ARM反汇编基础(一)

#include <stdio.h>
int nums[5]={1,2,3,4,5};
int for1(int n)
{
	int i=0;
	int s=0;
	for(i=0;i<n;i++)
	{
	    s+=i*2;
	}
	return s;
}
int for2(int n)
{
	int i=0;
	int s=0;
	for(i=0;i<n;i++)
	{
	  s+=i*i+nums[n-1];
	}
	return s;
}
int main(int argc,int ** argv[])
{
	printf("for1:%d\n",for1(5));
	printf("for2:%d\n",for2(5));
	return 0;
}


IDA ARM:
EXPORT main
main

var_C= -0xC 
var_8= -8

STMFD SP!, {R11,LR}     @保存现场
ADD	  R11, SP, #4		@设置R11的值,作为栈帧指针使用
SUB	  SP,  SP, #8 		@开辟栈空间
STR	  R0,  [R11,#var_8] @保存参数1
STR	  R1,  [R11,#var_C] @保存参数2  
MOV	  R0,  #5			@R0=5
BL	  for1				@调用for1
MOV	  R2,  R0			
LDR	  R3,  =(aFor1D-0x8414)  
ADD	  R3,  PC, R3       @for1:%d\n
MOV	  R0,  R3			@format
MOV	  R1,  R2 
BL    printf			@调用printf
MOV	  R0,  #5			@R0=5
BL	  for2    			@调用for2
MOV	  R2,  R0			
LDR   R3,  =(aFor2D-0x8434)
ADD	  R3,  PC, R3		@for:%d\n
MOV	  R0,  R3           @format
MOV	  R1,  R2
BL    printf
MOV	  R3,  #0
MOV   R0,  R3   
SUB   SP,  R11, #4
LDMFD SP!, {R11,PC}



版权声明:本文为NightStarSoul原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。