【发布时间】:2012-10-12 20:26:53
【问题描述】:
在 x86 上,在调用之后,压入堆栈的地址指向调用指令之后的位置。该指令在 x86 机器上可以是可变长度的。有没有办法检测使用了哪种调用?
例如,间接调用 *(%eax) 是 FF 10,但这也可能是直接调用 0x10FF10FF 的一部分。即
12: ff 10 call *(%eax)
14: e8 fb 10 ff 10 call 10ff1114 <main+0x10ff1114>
例如如果我找到 FF 10,那么在 E8 之前检查 3 个字节是否足够?还有哪些我没有想到的隐藏陷阱?
【问题讨论】:
-
只有这些是您想要区分的情况吗?
-
现在我只需要检测它是间接调用还是其他任何东西。