Prototype
E_RTN EMemory::BlockSubstitute( ulonglong *pullBlockCountSubstitued,
void *pBlockToPut,
ulonglong ullBlockToPutSize,
void *pBlockToFind,
ulonglong ullBlockToFindSize,
ulonglong ullOffset = 0,
ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

Cette fonction substitue chaque bloc d'octets pBlockToFind de l'intervalle de travail par le bloc d'octets pBlockToPut.

La taille de l'espace de travail est redimensionné à la hausse ou à la baisse si la taille du bloc d'octets à substituer est différente de la taille du bloc d'octets de substitution.

 

Argument

ulonglong *pullBlockCountSubstitued

adresse d'une variable de type ulonglong où y sera copié le nombre de blocs d'octets substituté.

Si cette information ne vous intéresse pas cet argument peut être NULL (la fonction ne retournera pas d'erreur à ce propos).

void *pBlockToPut

adresse du bloc d'octets de substitution (bloc qui va remplacer) .

ulonglong ullBlockToPutSize

taille du bloc d'octets de substitution.

void *pBlockToFind

adresse du bloc d'octets à substituer (bloc qui doit être remplacé).

ulonglong ullBlockToFindSize

taille du bloc d'octets à substituer.

ulonglong ullOffset = 0

offset de départ de l'intervalle de travail de substitution.

ulonglong ullOffsetSize = EMemory::SizeUpToEnd

étendue de l'intervalle de travail de substitution.

 

Retour

E_RTN

voir la section retour de la librairie Eclat.

 

Exemple

Description :

Substitution d'un bloc d'octets 0x41, 0x41 et 0x41 ("AAA" en ASCII) par un bloc d'octets 0x5A et 0x5A ("ZZ" en ASCII) sur un intervalle de l'offset 1 sur une taille de 6 octets, puis substitution d'un bloc d'octets 0x5A, 0x5A, 0x5A et 0x5A ("ZZZZ" en ASCII) par un bloc d'octets 0x41 ("A" en ASCII) sur la totalité de l'espace de travail, puis substitution d'un bloc d'octets 0x41 ("A" en ASCII) par un bloc d'octets vide sur la totalité de l'espace de travail d'un objet EMemory alloué de 8 octets d'espace de travail contenant les données 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 et 0x41 ("AAAAAAAA" en ASCII).

Code :

EMemory eMem( "AAAAAAAA", 8 ); // objet EMemory alloué de 8 octets
ulonglong ullCount;

eMem.TraceEx( _T("eMem") );
eMem.BlockSubstitute( &ullCount, "ZZ", 2, "AAA", 3, 1, 6 );
ETrace::DoEx( _T("Nombre de bloc d'octets \"AAA\" remplacé par le bloc d'octets \"ZZ\" = %I64u.\n\n"), ullCount );
eMem.TraceEx( _T("eMem") );
eMem.BlockSubstitute( &ullCount, "A", 1, "ZZZZ", 4 );
ETrace::DoEx( _T("Nombre de bloc d'octets \"ZZZZ\" remplacé par le bloc d'octets \"A\" = %I64u.\n\n"), ullCount );
eMem.TraceEx( _T("eMem") );
eMem.BlockSubstitute( &ullCount, "", 0, "A", 1 );
ETrace::DoEx( _T("Nombre de bloc d'octets \"A\" remplacé par le bloc d'octets \"\" (vide) = %I64u.\n\n"), ullCount );
eMem.TraceEx( _T("eMem") );

Sortie :

### Object EMemory 'eMem' Trace #
# Object address='0x0012F3D4', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', workspace size='8' byte(s).
# Array data from offset '0x00000000' to offset '0x00000007', length=8 byte(s).
# Offset start 0x00000000 41 41 41 41 41 41 41 41 .. .. .. .. .. .. .. .. [AAAAAAAA]
### End #

Nombre de bloc d'octets "AAA" remplacé par le bloc d'octets "ZZ" = 2.

### Object EMemory 'eMem' Trace #
# Object address='0x0012F3D4', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', workspace size='6' byte(s).
# Array data from offset '0x00000000' to offset '0x00000005', length=6 byte(s).
# Offset start 0x00000000 41 5A 5A 5A 5A 41 .. .. .. .. .. .. .. .. .. .. [AZZZZA]
### End #

Nombre de bloc d'octets "ZZZZ" remplacé par le bloc d'octets "A" = 1.

### Object EMemory 'eMem' Trace #
# Object address='0x0012F3D4', status='EMemory::ObjectStatus_Enable' (code '3').
# Buffer address='0x00000004', workspace size='3' byte(s).
# Array data from offset '0x00000000' to offset '0x00000002', length=3 byte(s).
# Offset start 0x00000000 41 41 41 .. .. .. .. .. .. .. .. .. .. .. .. .. [AAA]
### End #

Nombre de bloc d'octets "A" remplacé par le bloc d'octets "" (vide) = 3.

### Object EMemory 'eMem' Trace #
# Object address='0x0012F3D4', status='EMemory::ObjectStatus_Empty' (code '2').
# Buffer address='0x00000004', workspace size='0' byte(s).
# No data to show from offset '0x00000000' to offset '0x00000000', length=0 byte(s).
### End #

Vue :

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04 05 06 07
  41
A
41
A
41
A
41
A
41
A
41
A
41
A
41
A

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02 03 04 05
  41
A
5A
Z
5A
Z
5A
Z
5A
Z
41
A

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
  00 01 02
  41
A
41
A
41
A

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E ..
 
 

 

Voir aussi
E_RTN EMemory::ByteSubstitute( ulonglong *pullByteCountSubstitued, uchar ucByteToPut, uchar ucByteToFind, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::BytesSubstitute( ulonglong *pullByteCountSubstitued, uchar ucByteToPut, void *pBytesToFind, ulonglong ullBytesToFindSize, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );
E_RTN EMemory::BlocksSubstitute( ulonglong *pullBlockCountSubstitued, void *pBlockToPut, ulonglong ullBlockToPutSize, EMemory::SC_BLOCK *pscBlockToFind, ulonglong ullBlockToFindCount, ulonglong ullOffset = 0, ulonglong ullOffsetSize = EMemory::SizeUpToEnd );

 

Minimum
Version 1.0.0