使用内联asm进行VC ++的堆栈遍历

时间:2010-12-31 10:23:27

标签: c++ assembly inline-assembly

我在我的C ++代码中插入了以下asm代码。我正在使用VC ++编译器。

char c;
curr_stack_return_addr = s.AddrFrame.Offset; //I am doing a stack walk
    __asm{  
            push bx
            mov eax, curr_stack_return_addr  
            mov bl, BYTE PTR [eax - 1]
            mov c,bl
            pop bx

     }

我在c中为我的函数获取了正确的值,但是当它到达堆栈上的系统函数时它会崩溃。我没有编译错误。我做错了什么?

已解决:我忘了查看堆栈结束了!最后一帧中的返回地址为0.谢谢大家。

2 个答案:

答案 0 :(得分:3)

当程序进入asm块时,你无法知道eax的值。

答案 1 :(得分:3)

我在这里看到两个问题:

  1. push blpop bl不存在。你只能推送和弹出单词或双字。编译器一路警告。

  2. 您如何知道eax指向合法地址?