首页 > 代码库 > 反汇编入门

反汇编入门

写了一个简单的C语言代码:

?
1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main()
{
    int a,b,c;
    a=1;
    b=2;
    c=a+b;
    printf("%d",c);
}

使用arm-linux-objdump -d 反汇编

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
00000000 <main>:
   0:   e92d4800    push    {fp, lr}
   4:   e28db004    add fp, sp, #4
   8:   e24dd010    sub sp, sp, #16
   c:   e3a03001    mov r3, #1
  10:   e50b3010    str r3, [fp, #-16]
  14:   e3a03002    mov r3, #2
  18:   e50b300c    str r3, [fp, #-12]
  1c:   e51b2010    ldr r2, [fp, #-16]
  20:   e51b300c    ldr r3, [fp, #-12]
  24:   e0823003    add r3, r2, r3
  28:   e50b3008    str r3, [fp, #-8]
  2c:   e59f3014    ldr r3, [pc, #20]   ; 48 <main+0x48>
  30:   e1a00003    mov r0, r3
  34:   e51b1008    ldr r1, [fp, #-8]
  38:   ebfffffe    bl  0 <printf>
  3c:   e24bd004    sub sp, fp, #4
  40:   e8bd4800    pop {fp, lr}
  44:   e12fff1e    bx  lr
  48:   00000000    .word   0x00000000

地址对应指令内容,可以读懂。

配合arm-linux-gdb单步调试和查看寄存器内容。反汇编利器。