在 x86 上,调用后压入堆栈的地址指向调用指令之后的位置。该指令在 x86 机器上可以是可变长度的。有没有办法检测使用了哪种呼叫?
例如,间接调用 *(%eax) 是 FF 10,但这也可能是直接调用 0x10FF10FF 的一部分。IE
12: ff 10 call *(%eax)
14: e8 fb 10 ff 10 call 10ff1114 <main+0x10ff1114>
例如,如果我找到 FF 10,那么在 E8 之前检查 3 个字节是否足够?还有哪些我没有想到的隐藏陷阱?