c - 将指令指针地址(在共享库中)翻译成源指令

标签 c linux pointers ip instructions

是否可以在 Linux 上使用任何工具或库仅从 PID 和当前指令指针地址获取原始(源)指令,即使 IP 当前指向共享库?

据我所知,这应该是可能的,因为库映射的位置可以通过 /proc/[PID]/maps 获得,尽管我还没有找到这样做的任何应用程序或示例。

有什么建议吗?

编辑:汇编指令或最接近的符号就足够了(不一定需要源代码行)

最佳答案

我找到了一种使用 GDB 执行此操作的方法:

互动: $ gdb --pid 1566 (gdb) 信息符号 0x7fe28b8a2b79 /lib/x86_64-linux-gnu/libc.so.6 的 .text 部分中的 pselect + 89 (gdb) 信息符号 0x5612550f14a4 /usr/bin/bash 的 .text 部分中的 copy_word_list + 20 (gdb) 信息符号 0x7fe28b878947 /lib/x86_64-linux-gnu/libc.so.6 的 .text 部分中的 execve + 7 完全符合我的要求!

它也可以编写脚本: gdb -q --pid PID --batch -ex '信息符号 HEX_SYMBOL_ADDR'

关于c - 将指令指针地址(在共享库中)翻译成源指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52776584/

相关文章:

Calloc 内部函数

c - 如何在新函数中设置 Typedef Struct 定义的指针值?

c - c中int**函数的返回

c -/proc/sys/kernel/sched_child_runs_first 工作吗?

c++ - 此 C/C++ if() 语句的计算结果是否为 TRUE?

c - 如何在 C 中通过 libcurl 使用 cookie 和 postfields?

linux - 如何仅从文件中删除最后一个单词

c - 下溢如何导致上溢?

linux - echo - - - 在 shell 命令中是什么意思?

c - gettimeofday 会导致 MPI 崩溃吗?