Linux可执行文件信息查看
所属分类 linux
浏览量 820
gcc -o hello hello.c
gcc -g -o hello_debug hello.c
可执行文件信息查看
readelf ldd nm file strip size strings objdump
readelf查看可执行文件头信息
readelf -h hello
Class 位数
Data 大小端信息
Machine 运行平台
readelf -x .rodata hello
ldd 查看程序依赖的动态库
ldd hello
nm 符号表信息
nm hello
file 查看文件信息
file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=132ce1a61a995c67e14bbdd61583bea0225738f2, not stripped
not stripped 表示含有符号表
线上程序可能会选择去掉符号表信息,可减小文件大小
size查看可执行文件大小
size hello
text data bss dec hex filename
1188 540 4 1732 6c4 hello
data占用过大,可能是程序中用到了太多的 全局变量 静态变量 或 常量
去掉符号表
strip hello
执行前 文件大小 8480
执行后 文件大小 6344
file hello 最后 显示 stripped
strings查看可执行文件中的字符串
strings hello
objdump反汇编
objdump -d hello_debug
objdump -S -d hello_debug
-S 显示 源码
反汇编特定函数(如main函数)
先按照地址顺序输出符号表信息
nm -n hello |grep main -A 2
U __libc_start_main@@GLIBC_2.2.5
U puts@@GLIBC_2.2.5
00000000004003c8 T _init
--
000000000040051d T main
0000000000400540 T __libc_csu_init
00000000004005b0 T __libc_csu_fini
main的开始地址为0x000000000040051d,结束地址为0x0000000000400540
反汇编main函数
objdump -d hello --start-address=0x000000000040051d --stop-address=0x0000000000400540
上一篇
下一篇
编译时指定宏参数
systemctl service chkconfig 之间的关系
Java实现简单的模板
C语言获取时间戳秒
C语言获取时间戳秒毫秒微秒
java 和 C 循环和递归性能比较