function - 在 ELF 中查找函数的起始偏移量

标签 function executable elf disassembly relocation

假设我在 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/

相关文章:

windows - Windows 中用于查看 ELF 文件格式的任何工具/软件?

linker - ELF 文件中 data 和 data1 部分之间的区别以及 Rodata 和 Rodata1 部分之间的区别是什么?

c++ - 重载运算符 * C++

windows - 如何将 Windows 上的 PCSXR 源代码编译成可执行文件?

python - 在 switch 字典中执行函数

Python 脚本在 IDLE Shell 和 Bash 中作为 .py 而不是 .exe 运行

c++ - 如何在 Linux (Ubuntu) 上将 SDL 静态链接到我的 a.out

java - 从 eclipse 包中提取后损坏的 ELF header /部分

php - 在不使用数组的情况下将不定数量的参数传递给函数

php - Woocommerce 返回价格未正确显示