![](/img/trans.png)
[英]How does processor know how much to read from the stack for function parameters (x64)
[英]How to change processor stack?
为什么这段代码不打印“测试”?
#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;
}
因为新分配的堆栈不是DWORD对齐的。 将代码更改为:
push 0x00100000
call malloc
pop ecx
push eax
add eax, 0x000f0000
......它会根据需要打印。
请务必添加\\ n,以避免保罗建议的缓冲问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.