【发布时间】:2012-06-03 06:40:58
【问题描述】:
我在当前的项目中遇到了这个问题,这需要在二进制级别对代码进行推理。
我认为我们可以通过查看 CALL 指令的操作数来确定程序中所有函数的起始位置。有了这个列表后,我们是否可以通过简单地向后搜索直到找到起始地址来确定哪个函数包含一个地址? IE 是指包含指令的函数的起始地址 小于指令地址的最大函数地址?
如果上述方法不正确,是否有其他方法可以找到包含指令的函数的起始地址?
编辑: 添加了对问题的说明。
编辑2: 我的方法可能是错误的。编译器不保证将函数体放置在机器代码的连续区域中。
【问题讨论】:
-
使用函数甚至不需要汇编语言。这可能只是一堆意大利面条式的 goto。
-
你在汇编语言的上下文中是对的。它的上下文是编译语言的输出。
标签: compiler-construction x86 reverse-engineering decompiling disassembly