C语言代码反汇编例子,一个ARM简单反汇编例子

下面是一个简单的函数调用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

……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值