Self-Improvement
ARM의 포인터(pointer) 사용예제 [R3] 본문
R11은 프레임 포인터로 주소를 뜻하며 [R11]은 값을 뜻한다.
[R11, #var_c] = var_c 주소에 있는 값
R11, #-var_8 = var_8 주소
#include <stdio.h>
void swap_ptr(char **ppa, char **ppb);
int main(void)
{
char *pa = "success";
char *pb = "failure";
printf("pa -> %s, pb -> %s\n", pa, pb);
swap_ptr(&pa, &pb);
printf("pa -> %s, pb -> %s\n", pa, pb);
return 0;
}
void swap_ptr(char **ppa, char **ppb)
{
char *pt;
pt = *ppa; // *ppa = pa
*ppa = *ppb; // *ppb = pb
*ppb = pt;
}
프롤로그(johyungen.tistory.com/561)와 print 인자들 var_8, var_c를 출력하고 있다.
[R11, #var_8] -> var_8로 봐도 무방하다
swap_ptr 함수를 호출하기 위해 사용되는 인자는 &var_c, &var_8이다.
인자로 받은 주소를 스택 var_10, var_14에 넣고 있고 swap을 통해 서로 값이 바뀌게 된다.
헥스레이
#include <stdio.h>
void print_str(char **pps, int cnt);
int main(void)
{
char *ptr_ary[] = {"eagle", "tiger", "lion", "squirrel"};
int count;
count = sizeof(ptr_ary);
print_str(ptr_ary, count);
return 0;
}
void print_str(char **pps, int cnt)
{
int i;
for(i=0; i<cnt; i++)
{
printf("%s\n", pps[i]);
}
}
off_11044 주소 값에는 "Eagle", "tiger", "lion", "squirrel" 값이 있다.
위 소스코드랑 살짝은 다르지만 헥스레이
(_DWORD *)가 있는 것으로보아 포인터, *(_DWORD *)는 해당 포인터가 가르키는 곳의 값을 뜻한다.
'ARM' 카테고리의 다른 글
(*) ARM char, pointer 종합? (LDMIA, STMIA) (0) | 2021.01.14 |
---|---|
ARM의 함수 포인터(function pointer) 예제 (0) | 2021.01.12 |
IDA에서 ARM의 SUB "-" 부분과 스택(stack) 부분 (0) | 2021.01.11 |
ARM - Socket( bind, socket ) 코드 분석 (htons, htonl) (0) | 2020.12.03 |
ARM 기초 (레지스터 종류, 명령어 등, LDR, STR) (0) | 2020.08.05 |