c - 从符号表中读取变量的类型、地址、大小。这是使用 gnu 工具(如 gmake 或 gcc)构建的

标签 c linux linux-kernel gdb centos

我们正在尝试为特定环境实现定制的 gdb 工具。我们有 Linux-Centos 操作系统。

尝试通过一些定制来实现 gdb 功能。我们的工具将附加到 PID(已经运行的进程),它将启动调试 session 。我们希望读取符号信息(符号表)并打印尽可能多的符号信息(主要是数据类型、地址和大小)。

我们可以使用 readelf,gdb 中的文件命令读取符号表,并且可以打印一些与局部/全局变量相关的信息。但是我们无法找到打印变量地址和大小的确切命令。

最佳答案

您可以在 gdb 的表达式中使用 ptype 命令和 sizeof:

(gdb) ptype exit
type = int ()
(gdb) print sizeof(argc)
$1 = 4

这当然需要调试信息,而不仅仅是符号表可用,例如对于 ELF,这需要 .debug_{aranges,info,abbrev,...} 部分,而不仅仅是 .shstrtab.symtab,和 .strtab

关于c - 从符号表中读取变量的类型、地址、大小。这是使用 gnu 工具(如 gmake 或 gcc)构建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122159/

相关文章:

使用系统调用在 C 中复制文件并将其转换为二进制文件

c - 从文本文件读入char数组[]

编译 SQLite 以在 Windows Mobile 上运行

linux-kernel - 系统调用期间将数据复制到内核空间

c - IOCTL 调用不适用于驱动程序

linux - 2.6 内核中的 EXPORT_SYMTAB

C 如何从主范围获取 "hide"宏

linux - 用于创建树目录的 Bash 脚本

linux - 如何等到 shell 脚本启动的所有内容结束?

linux - 计算字数并指定行数