Self-Improvement

ARM의 포인터(pointer) 사용예제 [R3] 본문

ARM

ARM의 포인터(pointer) 사용예제 [R3]

JoGeun 2021. 1. 11. 17:47

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 *)는 해당 포인터가 가르키는 곳의 값을 뜻한다.