假设我在 ELF64 可执行文件的 .text
部分中有函数 fn
。有没有办法知道 fn 函数位于距 ELF 文件开头的哪个偏移量(以字节为单位)?请注意,我不需要知道它在链接时被重定位到哪个 VA,而是需要知道它在 ELF 文件中的位置。
最佳答案
通常是的,如果您可以直接解析 ELF 文件或结合 objdump 和 readelf 等工具的输出。
更具体:您可以使用“readelf -S file”获取 .text 部分的偏移量和虚拟地址 - 将其写下来。 此外,您可以使用“readelf -s file”列出符号,只要您的可执行文件未被剥离,并且您的函数是可见的(不是静态的或在匿名命名空间中),那么您应该找到您的函数和它的虚拟地址。
因此您可以通过
计算偏移量fn symbol offset = fn symbol VA - .text VA + .text offset
假设您想使用常用工具“离线”执行此操作。如果您无法访问未剥离的 ELF 文件,则情况会更加困难,并且由于 ELF 文件中只有一部分保留在内存中,因此如果不使用“离线”技巧添加一些信息,可能是不可能的。
关于function - 在 ELF 中查找函数的起始偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40237321/