我发现二进制翻译通常是基于跟踪的。是因为看不到功能的边界吗?二进制代码中有函数标签吗?
这个问题没有简单的答案。您可以搜索
ret
指令,但它们不能保证它们是函数边界,因为您可以从函数中间返回。
搜索类似的东西
mov ebp, esp
在一定程度上会起作用,但同样,这并不能保证。
某些编译器(最著名的是英特尔编译器)会将分支块移动到函数结束后,然后跳回函数...
一些编译器提供
#pragma
或预处理关键字,以允许您将函数分配给特定地址。抱歉,C语言只提供了函数的起始地址;不是它们的长度。