#表明这个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}
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;
}