Self-Improvement
(*) ARM char, pointer 종합? (LDMIA, STMIA) 본문
#include <stdio.h>
#include <string.h>
struct score
{
int kor;
int eng;
int mat;
};
int main(void)
{
char aaa[50];
char abc[10];
char abb[10];
char aa='a';
unsigned int a[10]={1,2,3,4,5};
char b[10]="abcdefg";
scanf("%s",&abc);
strcpy(abb,abc);
printf("abb : %s\n", abb);
printf("%c\n", aa);
printf("%d %d %d\n",a, a[0], a[4]);
printf("%s %c %c\n",b, b[0], b[4]);
}
소스코드에 없는 memset을 한거보니 unsingned int a[10]을 의미하는 것으로 보인다.
int는 4byte로 10개의 배열을 생성했으니 0x28(40)의 크기를 가지고 있음으로 동일하다.
그리고 각 변수에 값을 넣어주고 있다.
scanf 함수를 할때 src 주소를 인자로 받고 있다.
scanf로 받은 데이터를 strcpy를 통해 &dest에 복사하여 printf로 출력하고 있다.
2번의 printf를 수행하며 var_5는 프롤로그쪽에서 값이 형성이 되었다.
마지막에 있는 printf도 별 어려운건 없다.
LDRB로 var_84, var_80에서 1바이트씩 가지고 와서 인자로 사용한다.
var_84, var_80 주소에 있는 값은 맨 처음에 있는 LDMIA, STMIA를 통해 할당이 이루어진다.
'ARM' 카테고리의 다른 글
ARM - buffer Overflow 기초 (R11 -> &lr(돌아갈 주소를 갖는 레지스터)) (0) | 2021.01.15 |
---|---|
** ARM Instruction 설명 (지속적 추가 예정) ** (0) | 2021.01.14 |
ARM의 함수 포인터(function pointer) 예제 (0) | 2021.01.12 |
ARM의 포인터(pointer) 사용예제 [R3] (0) | 2021.01.11 |
IDA에서 ARM의 SUB "-" 부분과 스택(stack) 부분 (0) | 2021.01.11 |