我正在调试 linux 中的崩溃,并且正在完成 cxa_finalize 函数的组装
崩溃发生在看起来无法访问的源代码行上:
cmp %edx,%esi // f >= &funcs->fns[0]
jae 0xb6e17b88 // enter for loop
jmp 0xb6e17c08 // exit for loop
lea 0x0(%esi,%eiz,1),%esi // crashes here - how do we even get here since there is a
// jmp above us, and nothing jumps to here
cmp %edi,0xc(%esi) // d == f->func.cxa.dso_handle (jumped to from below)
稍后在此方法中,还有另一个
lea 0x0(%esi,%eiz,1),%esi
指令出现在 jmp
和 nop
之后,该指令也似乎无法访问。在这种情况下,jmp
也会退出 for 循环。这里是否有一些范例会放入无法访问的指令?
编辑:原来它没有在
lea
指令上崩溃,而是在 cmp
指令之后,当访问 esi
的内存时。 最佳答案
我找到了答案 here
关于c++ - 汇编中无法访问的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37448848/