帮助:应用程序在访问源代码时崩溃

时间:2011-01-04 11:24:05

标签: c++ assembly inline-assembly

这是我在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
}

1 个答案:

答案 0 :(得分:1)

您的代码段不足以查看“ret_5”的位置。如果它是类的成员,您将自动崩溃。 ecx寄存器存储“this”指针,你搞砸了。

不确定这是什么,听起来像你需要使用_ReturnAddress内在函数。 调用此代码的调用指令后,它返回指令的地址。将它分配给unsigned char *,不需要以这种方式进行汇编。