我在我的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.谢谢大家。
答案 0 :(得分:3)
当程序进入asm块时,你无法知道eax的值。
答案 1 :(得分:3)
我在这里看到两个问题:
push bl
和pop bl
不存在。你只能推送和弹出单词或双字。编译器一路警告。
您如何知道eax指向合法地址?