如何通过命令行工具从.elf二进制文件中按变量名提取常量字符串值?
从编译后的ELF程序中提取常量变量值
需求背景
现有如下C代码:
#include <stdio.h> const char greeting[] = "hello world"; int main() { printf("%s!\n", greeting); return 0; }
在Ubuntu中通过gcc -g main.c -o main.exe编译后,希望直接提取变量greeting对应的常量字符串值"hello world",不想手动解析readelf命令的输出,需要能直接按指定格式输出结果的命令行工具。
解决方案:使用GDB实现
因为编译时添加了-g调试参数,程序包含完整的符号信息,GDB可以直接通过变量名定位并读取其值,完全符合需求:
简洁输出格式
执行以下命令可直接输出带引号的字符串值:
gdb -batch -ex 'printf "\"%s\"\n", greeting' main.exe
执行结果:
"hello world"
详细输出格式
如果需要带描述性的详细输出,可使用:
gdb -batch -ex 'printf "The constant value of the variable \"greeting\" in `main.exe` is:\n\"%s\"\n", greeting' main.exe
执行结果:
The constant value of the variable "greeting" in `main.exe` is: "hello world"
说明
-batch参数让GDB执行完指定命令后自动退出,无需交互-ex用于指定要执行的GDB命令,这里通过printf直接读取并格式化输出变量greeting的内容- 因为
greeting是const char[]类型,直接用printf "%s"即可输出完整字符串内容
内容的提问来源于stack exchange,提问作者sdbbs
相关产品推荐
相关产品推荐

