Wie der Prozessor-Stack ändern?
-
06-07-2019 - |
Frage
Warum funktioniert dieser Code drucken "test"?
#include <stdio.h>
#include <stdlib.h>
void foo ( void ) {
printf("test\n");
}
__declspec(naked)
void bar ( void ) {
asm {
push 0x000FFFFF
call malloc
pop ecx
push eax
add eax, 0x000EFFFF
mov ecx, esp
mov esp, eax
push ecx
call foo
pop esp
call free
pop ecx
ret
}
}
int main(int argc, char* argv[])
{
bar();
return 0;
}
Lösung
Da Ihre neu zugeordneten Stapel nicht ausgerichtet ist DWORD. Code ändern, um diese:
push 0x00100000
call malloc
pop ecx
push eax
add eax, 0x000f0000
... und es wird nach Bedarf gedruckt werden.
Seien Sie sicher, \ n hinzufügen Pufferung Probleme zu vermeiden, wie von Paul beraten.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow