我正在调试 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 指令出现在 jmpnop 之后,该指令也似乎无法访问。在这种情况下,jmp 也会退出 for 循环。

这里是否有一些范例会放入无法访问的指令?

编辑:原来它没有在 lea 指令上崩溃,而是在 cmp 指令之后,当访问 esi 的内存时。

最佳答案

我找到了答案 here

关于c++ - 汇编中无法访问的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37448848/

10-11 15:09