arm汇编调用c语言,从ARM汇编语言中调用c函数printf

这篇内容展示了C语言简单程序的汇编过程,包括参数传递、函数调用及返回。程序中,`printf`函数被用于输出两个整数1和2。在汇编代码中,可以看到`r0`、`r1`和`r2`寄存器分别用于存储格式字符串、第一个参数和第二个参数。通过反汇编,我们可以找到格式字符串的内存地址并查看其内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include

#include

int main(void) {

printf("%d.%d\n",1,2);

return EXIT_SUCCESS;

}

编译和拆机:

0000842c :

842c: e92d4008 push {r3, lr}

8430: e3a01001 mov r1, #1

8434: e3a02002 mov r2, #2

8438: e59f0008 ldr r0, [pc, #8] ; 8448

843c: ebffffcc bl 8374 <_init>

8440: e3a00000 mov r0, #0

8444: e8bd8008 pop {r3, pc}

8448: 00008524 andeq r8, r0, r4, lsr #10

r0是第一参数,格式字符串,R 1是所述第二参数A 1,R 2,第三参数A 2.格式字符串是一个字符串,一个指向字节数组的指针。 r0加载该指针,即一个字节字符串的地址。在这种情况下,该地址是0x8524。

,如果你很好奇,你可以去看看0x8524,看看你的字符串,

8524: 252e6425 strcs r6, [lr, #-1061]! ; 0xfffffbdb

8528: 00000a64 andeq r0, r0, r4, ror #20

0x25,0x64,0x2E之间,0x25,0x64,的0x0A,为0x00

同样,在你的拆装地址你的字符串是

81d0: e59f0014 ldr r0, [pc, #20] ; 81ec <.text>

...

81ec: 00060120 andeq r0, r6, r0, lsr #2

如果你看看你的反汇编地址0x60120你会看到你的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值