Je suis en train d'inverser un fichier exécutable (pour l'apprentissage RE), Cependant, je suis coincé sur un morceau de pseudocode qui a des choses que je ne comprends pas.Kindly m'aider à le comprendre afin que je puisse améliorer. Maintenant, je comprends qu'il y a un tableau qui a le numéro 32 jusqu'à l'entrée 2014e et de la 2014e à la 4095e entrée, il y a les codes de caractère retournés par fget.Après cela il y a un petit extrait de code que je ne suis pas capable de comprendre, le bloc est marqué avec **.Assemblée à pseudocode compréhension
code:
int sub_12A11A0()
{
__int16 v1; // [sp+4h] [bp-24h]@13
int v2; // [sp+8h] [bp-20h]@11
int v3; // [sp+Ch] [bp-1Ch]@8
signed int v4; // [sp+10h] [bp-18h]@13
signed int l; // [sp+14h] [bp-14h]@16
int v6; // [sp+18h] [bp-10h]@6
int v7; // [sp+18h] [bp-10h]@13
int v8; // [sp+18h] [bp-10h]@32
signed int v9; // [sp+1Ch] [bp-Ch]@8
signed int v10; // [sp+20h] [bp-8h]@8
signed int i; // [sp+24h] [bp-4h]@1
signed int j; // [sp+24h] [bp-4h]@4
int k; // [sp+24h] [bp-4h]@13
signed int m; // [sp+24h] [bp-4h]@27
for (i = 0; i < 2015; ++i)
byte_12A3400[i] = 32;
for (j = 2015; j < 4096; ++j)
{
v6 = fgetc(dword_12A33EC);
if (v6 == -1)
break;
byte_12A3400[j] = v6;
++dword_12A3088;
}
v9 = j;
v10 = 2015;
v3 = 0;
while (v10 < v9)
{
if (v9 - v10 < 33)
v2 = v9 - v10;
else
v2 = 33;
v1 = 0;
v4 = 1;
****v7 = (unsigned __int8)byte_12A3400[v10];
for (k = v10 - 1; k >= v3; --k)
{
if ((unsigned __int8)byte_12A3400[k] == v7)
{
for (l = 1; l < v2 && (unsigned __int8)*(&byte_12A3400[l] + k) == (unsigned __int8)*(&byte_12A3400[l] + v10); ++l)
;
if (l > v4)
{
v1 = k;
v4 = l;
}
}
}****
if (v4 > 1)
sub_12A1120(v1 & 0x7FF, v4 - 2);
else
sub_12A10D0(v7);
v10 += v4;
v3 += v4;
if (v10 >= 4063)
{
for (m = 0; m < 2048; ++m)
byte_12A3400[m] = byte_12A3C00[m];
v9 -= 2048;
v10 -= 2048;
v3 -= 2048;
while (v9 < 4096)
{
v8 = fgetc(dword_12A33EC);
if (v8 == -1)
break;
byte_12A3400[v9++] = v8;
++dword_12A3088;
}
}
}
return sub_12A1090();
}
Pour moi, on ne sait pas ce que vous demandez ... où avez-vous obtenu le * pseudo code * du code asm (qui n'est pas inclus dans la question) et que voulez-vous dire par * m'aider à comprendre *? Comprendre à quel niveau? Voulez-vous faire correspondre un algorithme ou avez-vous besoin d'une description ligne par ligne du code ou quoi? – grek40
Salut, je traçais un programme à travers l'assemblage en utilisant IDA, quand j'ai atteint cette fonction, j'ai appuyé sur l'onglet qui a généré ce pseduocode. Je veux comprendre ce que font les lignes marquées avec **** car je ne suis pas capable de le comprendre. Plus important encore cette ligne, pour (l = 1; l
Juste indexer un tableau, par ex. 'foo [l] [k] == foo [l] [v10]' – Jester