Ich kämpfe um herauszufinden, wie ein bestimmter Block funktionieren würde. Mit der folgenden Adresse auf dem HeapAssembly memory und looping
004B0000 73 6D 67 66 74 smgft
und folgende Montag:
77A701B8 xor eax, eax
77A701BA mov ecx, 4
77A701BF lea edi, DWORD PTR DS:[ecx+4B0000]
77A701C5 xor DWORD PTR DS:[edi], ecx
77A701C5 loopd short ntdll.77A701BF
Das Problem ist, den Wert des fünf Bytes auf dem Heap in ASCII zur Verfügung zu stellen, nachdem die Anweisungen ausgeführt haben. Was ich daraus verstehen kann, ist wie folgt
xor eax, eax; 0 aus eax
mov ecx, 4; Satz ecx 4
lea edi, dword ptr ds: [ecx + 4b0000]; Dies lädt in EDI, was auch immer bei ecx + 4b0000 gespeichert ist, also 4b0004. Ich bin mir nicht sicher, was das alles bringen würde. Ich bin nicht einmal sicher, was 4b0000 bekommen würde, da es 5 Bytes ist. mgft oder smgf? Ich denke, smgf? Und wie beeinflusst das + 4h das? Macht es 736D676678?
xoder dword ptr ds: [edi], ecx; Also das wird xor 4h mit dem neu geladenen dword bei edi, aber was macht es damit im loopd?
loopd kurz ntdll.77A701BF; Das ist also eine "Schleife, die gleich ist", aber ich bin mir nicht sicher, was das bedeutet mit einem X oder darüber. Und dekrementiert es Ecx? Aber dann springt es zurück zur Spurlinie.
Es ist eine "loop", nicht "loope" (Schleife während gleich), so ist es egal, EFLAGS (welche xor setzt). Weitere Informationen finden Sie unter http://www.felixcloutier.com/x86/LOOP:LOOPcc.html –