我试图在单独分配的堆栈上运行函数。在单独分配的堆栈上运行函数
我想保留以后的堆栈,以便我可以恢复它并恢复该功能。
下面的代码编译并运行,但没有打印到屏幕上。
#include <cstdlib>
#include <csetjmp>
#include <iostream>
using namespace std;
unsigned char stack[65535];
unsigned char *base_ptr = stack + 65535 - 1;
unsigned char *old_stack;
unsigned char *old_base;
void function()
{
cout << "hello world" << endl;
}
int main()
{
__asm
{
mov old_base, ebp
mov old_stack, esp
mov ebp, base_ptr
mov esp, base_ptr
call function
mov ebp, old_base
mov esp, old_stack
}
}
使用vs2012 /于Win8 /英特尔Q9650
也许'setjmp' /'longjmp'可能对您的问题有用? – 2012-08-03 06:06:35
setjmp/longjmp不保留堆栈,只有cpu注册。所以,如果你跳出一个函数,局部变量可以被覆盖。 – bitwise 2012-08-03 06:09:16
你不会告诉我们你正在使用哪个编译器。有一个支持MASM风格的程序集,我会写'mov ebp,[base_ptr]'和'mov esp,[base_ptr]'。 – 2012-08-03 06:59:38