如何将/proc/pid/maps中的运行时地址映射到二进制可执行文件?
运行时指令地址与静态指令地址的映射规则
我持有一个二进制可执行文件,以及该文件启动进程对应的/proc/pid/maps文件,需要将通过gdb等调试器获取的运行时指令地址,映射为objdump、IDA等反汇编工具中对应的静态指令地址。
根据经验总结,目前有两种映射方式:
1. PIE可执行文件或共享库的映射方式
当/proc/pid/maps中出现如下格式的条目时:
xxxx-yyyy r-xp 0000000 ... path/to/mysharedlibrary.so
若运行时地址为zzzz,对应的静态地址可通过以下公式计算:
static-address = zzzz - xxxx
计算结果可通过objdump或IDA验证。
2. 非PIE或静态链接可执行文件的映射方式
当/proc/pid/maps中出现如下格式的条目时:
400000-yyyy r-xp 000000 ... path/to/executable
此时无需减去基地址,运行时地址与静态地址完全相同。
上述两种规则均来自经验总结,我想了解计算正确地址的确切规则是什么?
内容的提问来源于stack exchange,提问作者Evian
相关产品推荐
相关产品推荐

