反编译实例1补充

实例1中对于寄存器R0的使用没有特别的强调,但是考虑到arm汇编中R0的重要性,这里再通过一个hello world修改后的实例来进一步说明:

#include <stdio.h>

int main(int argc, char** argv)
{
	printf("hello ");
	printf("world");
	printf("\n");
	return 0;
}
实例中把一个“hello world\n”字符串分三个printf函数调用进行打印输出,armcc生成的.o文件使用IDA打开后的结果如图一:

从图中可以看出printf函数的传入参数都是通过R0来完成的,而main函数的返回值0,也是通过给R0赋值来完成的,在arm的汇编中R0起到一个非常特殊的作用,在反编译过程中通过R0可以了解到我们一些需要的信息,简单的注释如图二:

值得一提的是,实例1中"hello world\n"为一个字符串使用一个符号地址来表示,而此例中则是通过三个地址符号来表示的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值