因近期工作需要,需要利用objdump工具剖析程序指定可执行程序,以检查错误函数(语句)。
objdump命令参考:https://blog.csdn.net/zoomdy/article/details/50563680
本文以最简单的程序开始,剖析反汇编之后的程序最小执行系统以及初始化、判断语句、循环语句以及函数及其调用过程在反汇编指令集中的形式,方便在工作过程中的异常程序中寻找异常地址。
文件组成:
最简文件组成:main.c Makefile
Makefile代码:
TRGET = main.out
all: clean $(TRGET)
$(TRGET):main.o
cc main.o -o $(TRGET)
main.o:
clean:
rm -f *.o;rm -f *.out
编辑方式:以挂载的方式挂载到linux系统上,编辑在Window上的NotePad++
从最简程序开始:(这是我能想到最简单的程序了)
#include <stdio.h>
int main()
{
return 0;
}
反汇编指令:
objdump -C -S main.out > objdump_main_00.txt
反汇编结果:
main.out: file format elf32-i386
Disassembly of section .init:
08048254 <_init>:
8048254: 55 push %ebp
8048255: 89 e5 mov %esp,%ebp
8048257: 83 ec 08 sub $0x8,%esp
804825a: e8 51 00 00 00 call 80482b0 <call_gmon_start>
804825f: e8 a4 00 00 00 call 8048308 <frame_dummy>
8048264: e8 87 01 00 00 call 80483f0 <__do_global_ctors_aux>
8048269: c9 leave
804826a: c3 ret
Disassembly of section .plt:
0804826c <__libc_start_main@plt-0x10>:
804826c: ff 35 20 95 04 08 pushl 0x8049520
8048272: ff 25 24 95 04 08 jmp *0x8049524
8048278: 00 00 add %al,(%eax)
...
0804827c <__libc_start_main@plt>:
804827c: ff 25 28 95 04 08 jmp *0x8049528
8048282: 68 00 00 00 00 push $0x0
8048287: e9 e0 ff ff ff jmp 804826c <_init+0x18>
Disassembly of section .text:
0804828c <_start>:
804828c: 31 ed xor %ebp,%ebp
804828e: 5e pop %esi
804828f: 89 e1 mov %esp,%ecx
8048291: 83 e4 f0 and $0xfffffff0,%esp
8048294: 50 push %eax
8048295: 54 push %esp
8048296: 52 push %edx
8048297: 68 ac 83 04 08