我想用一个干净的堆栈调用一个函数,它可以切断调用堆栈。
====================伪代码开始============================ =====
stackBaseAddress = 通过 NtCurrentTeb 查找堆栈基地址
stackCurrentSize = stackBaseAddress - esp
备份堆栈
memset(esp, 0, stackCurrentSize)
MessageBoxA(0, "1", 0, 0) <== 这里有问题,MessageBoxA 失败,GetLastError == 0
恢复堆栈
==============================伪代码结束=================== ===================
如果没有 memset(esp, 0, stackCurrentSize),一切顺利。
所以我认为堆栈中一定有一些不能擦除的东西,但是什么?