gcc 命令之 objdump
---------------objdump 是用查看目标文件或者可执行的目标文件的构成的GCC工具----------
以下3条命令足够那些喜欢探索目标文件与源代码之间的丝丝的关系的朋友。
objdump -x obj 以某种分类信息的形式把目标文件的数据组织(被分为几大块)输出 <可查到该文件的所有动态库>
objdump -t obj 输出目标文件的符号表()
objdump -h obj 输出目标文件的所有段概括()
objdump -j .text/.data -S obj 输出指定段的信息,大概就是反汇编源代码把
objdump -S obj C语言与汇编语言同时显示objdump -j .text -Sl hello | more
objdump -j .text -Sl hello --prefix-address | more
objdump -j .text -Dl hello | more
- 命令行上要给出至少一个下面的选项:
-
-a, --archive-headers 显示归档头文件的信息
-
-f, --file-headers 显示全部头文件的内容
-
-p, --private-headers 显示特定object头文件的内容
-
-h, --[section-]headers 显示段头的内容
-
-x, --all-headers 显示所有头内容
-
-d, --disassemble 显示可执行段的汇编内容
-
-D, --disassemble-all 显示所有断的汇编内容
-
-S, --source 显示汇编内容和机器码
-
-s, --full-contents 显示所有请求段的所有内容
-
-g, --debugging 显示object文件中的调试信息
-
-e, --debugging-tags 使用ctags的风格显示调试信息
-
-G, --stabs 显示(用原始的表格)文件中任意的STABS信息
-
-W, --dwarf 显示文件中的DWARF信息
-
-t, --syms 显示符号表的内容
-
-T, --dynamic-syms 显示动态符号表的内容
-
-r, --reloc 显示文件中重定位的入口
-
-R, --dynamic-reloc 显示文件中动态重定位的入口
- #include <stdio.h>
-
#include <stdlib.h>
-
-
int bss_array[1024*1024]; //4MB 未初始化 bss段
-
// objdump -h hello | grep bss
-
//看到 bss段4 MB 大小
-
int main(int argc, char *argv[])
-
{
-
printf("hello world.\n");
-
int a;
-
a = 1024;
-
char b[] = "abcdefg";
-
exit(EXIT_SUCCESS);
-
}
gcc hello.c -g -o hello
ywx@yuweixian:~/yu/c/test$ objdump -j .text -Sl hello |
more- 080483e4 <main>:
-
main():
-
/home/ywx/yu/c/test/hello.c:7
-
#include <stdlib.h>
-
-
int bss_array[1024*1024]; //4MB
-
-
int main(int argc, char *argv[])
-
{
-
80483e4: 55 push %ebp
-
80483e5: 89 e5 mov %esp,%ebp
-
80483e7: 83 e4 f0 and $0xfffffff0,%esp
-
80483ea: 83 ec 30 sub $0x30,%esp
-
80483ed: 8b 45 0c mov 0xc(%ebp),%eax
-
80483f0: 89 44 24 1c mov %eax,0x1c(%esp)
-
80483f4: 65 a1 14 00 00 00 mov %gs:0x14,%eax
-
80483fa: 89 44 24 2c mov %eax,0x2c(%esp)
-
80483fe: 31 c0 xor %eax,%eax
-
/home/ywx/yu/c/test/hello.c:8
-
printf("hello world.\n");
-
8048400: c7 04 24 00 85 04 08 movl $0x8048500,(%esp)
-
8048407: e8 04 ff ff ff call 8048310 <puts@plt>
-
/home/ywx/yu/c/test/hello.c:12
-
// return 0;
-
-
int a;
-
a = 1024;
-
804840c: c7 44 24 20 00 04 00 movl $0x400,0x20(%esp)
-
8048413: 00
-
/home/ywx/yu/c/test/hello.c:13
-
char b[] = "abcdefg";
-
8048414: a1 0d 85 04 08 mov 0x804850d,%eax
-
8048419: 8b 15 11 85 04 08 mov 0x8048511,%edx
-
804841f: 89 44 24 24 mov %eax,0x24(%esp)
-
8048423: 89 54 24 28 mov %edx,0x28(%esp)
-
/home/ywx/yu/c/test/hello.c:14
-
exit(EXIT_SUCCESS);
阅读(2329) | 评论(0) | 转发(1) |