这是我在VC ++项目中插入的一个简单的asm代码。 addr_curr_ebp是EBP指针的当前地址。它指向堆栈帧内的旧EBP值。此后的4个字节是应用程序函数内的返回地址。我从代码部分提取单个字节。我运行我的代码以及其他应用程序,如gtalk,vlc等。当我在我的代码中包含ProbStat 1和2时,应用程序总是崩溃。当我删除这些语句时,一切正常。你觉得这是什么?
__asm{
push eax
push ebx
push cx
mov ebx, addr_curr_ebp
mov eax, [ebx + 4]
mov cl, BYTE PTR [eax - 5] //ProbStat 1
mov ret_5, cl // ProbStat 2
pop cx
pop ebx
pop eax
}
答案 0 :(得分:1)
您的代码段不足以查看“ret_5”的位置。如果它是类的成员,您将自动崩溃。 ecx寄存器存储“this”指针,你搞砸了。
不确定这是什么,听起来像你需要使用_ReturnAddress内在函数。 调用此代码的调用指令后,它返回指令的地址。将它分配给unsigned char *,不需要以这种方式进行汇编。