一个ARM简单反汇编例子

来源:互联网 发布:政府网络舆情监控系统 编辑:程序博客网 时间:2024/05/05 15:38

下面是一个简单的函数调用ARM反汇编例子

/*C语言源代码*/
static int d = 13;
char e = 1;
char* fun(char a, int b)
{
    char *p = "anhu";
    *p = a;
    *(p+3) = b;
    return p;
}
int main(void)
{
     char* f = fun(100,200);
     *f='c';
     return 0;
}

以下是上述C语言的ARM核心反汇编代码以及我添加的注释(ADS1.2上编译)

……

** Section #5 '.text' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
Size : 60 bytes (alignment 4)
fun
$a
.text
0x00000000: e1a02000 .... MOV r2,r0                         
0x00000004: e28f0008  .... ADD r0,pc,#8 ; #0x14  ;执行到0x00000004时,pc已经为0x0000000c
0x00000008: e5c02000 . .. STRB r2,[r0,#0]       ;*p=a
0x0000000c: e5c01003 .... STRB r1,[r0,#3]       ;*(p+3)=b
0x00000010: e1a0f00e  .... MOV pc,r14            ;r14保存了返回地址
$d
0x00000014: 75686e61 anhu DCD 1969778273        ;常量字符串
0x00000018: 00000000 .... DCD 0
main
$a
0x0000001c: e52de004 .... STR r14,[r13,#-4]!    ;保存r14,r13地址完了自减4
0x00000020: e3a010c8 .... MOV r1,#0xc8
0x00000024: e3a00064 .... MOV r0,#0x64
0x00000028: ebfffffe        .... BL fun ; 0x0
0x0000002c: e3a01063 .... MOV r1,#0x63          ;'c' = 0x63
0x00000030: e5c01000 .... STRB r1,[r0,#0]       ;fun返回值保存在r0中
0x00000034: e3a00000 .... MOV r0,#0
0x00000038: e49df004  .... LDR pc,[r13],#4

……

 

原创粉丝点击