IDA分析HELLO ARM 程序的ARM 反汇编

本文通过IDA工具深入解析一个简单的HELLO ARM程序,主要涉及ARM汇编语言和反汇编过程。在main函数中,程序使用printf输出'Hello Arm !' ,并返回0。
摘要由CSDN通过智能技术生成
#表明这个main函数是被程序导出的
EXPORT main
#main为函数的名称IDA Pro 能自动识别源程序中所有的函数以及名称
main
#IDA识别出的栈变量
var_C = -0xC

var_8 = -8
#堆栈寻址指令 把寄存器的值压入堆栈
STMFD SP1,{R11,LR}
#SP寄存器的值加上4 赋给R11寄存器
ADD   R11,SP,#4
#SP寄存器的值减去8赋给SP寄存器
SUB      SP ,SP,#8
#写寄存器指令 把R0寄存器中的值保存到栈变量var_8中
STR      R0, {R11,#var_8}
#写寄存器指令 把R1寄存器中的值保存到栈变量var_C中
STR      R1, {R11,#var_C}
#读寄存器指令 把(aHelloArm-0x8300)计算出的地址放入到R3寄存器中
LDR      R3, =(aHelloArm-0x8300)
#PC寄存器值加上R3寄存器的值 放入到R3寄存器
ADD      R3, PC,R3  
#把R3寄存器的值放到R0寄存器中
MOV   R0, R3  
#类似于调用函数功能  puts为标准输入输出函数中printf的实现
BL    puts
#把0赋值给R3寄存器
MOV      R3, #0
#把R3寄存器中的值赋值给R0寄存器
MOV      R0, R3
#R11寄存器的值减去4 赋给SP寄存器
SUB   SP, R11,#4  
#堆栈寻址指令 从堆栈中恢复寄存器的值
LDMFD SP!,{R11,PC}


#include<stdio.h>

int main(int argc, char * argv[]){

   printf("Hello Arm !\n");

   return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值