목록ARM (19)
Self-Improvement
크로스 컴파일 및 편리하게 ld-linux.so.3 복사 johyungen.tistory.com/391 크로스 컴파일 (cross compile) https://nightohl.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%EC%84%9C-arm-%ED%81%AC%EB%A1%9C%EC%8A%A4%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EB%B0%8F-%EB%94%94%EB%B2%84%EA%B9%85 우분투에서 arm 크로.. johyungen.tistory.com R11 -> &lr(돌아갈 주소를 갖는 레지스터) bof.c 소스코드 gcc 컴파일할 때 NX, Canary 보호기법을 제거하기 위한 옵션을 추가하고 진행하였다. 풀이2 에서는 코드..

틀린점이 있다면 지적 바랍니다. LDR = 메모리에 있는 값을 레지스터에 저장한다. ex) LDRR2, [R11, #s] // R2 = s LDRB = 메모리에 있는 값 1byte를 레지스터에 저장한다 ex) MOVR3, #0x61 STRBR3, [R11,#var_5] LDRBR3, [R11,#var_5] // var_5 = 0x61, R3 = 0x61 STR = 레지스터에 있는 값을 메모리에 저장한다 ex) MOVR3, #5 STRR3, [R11,#var_68] // var_68 = 5 STRB = 레지스터의 값 1byte를 메모리에 저장한다 ex) MOVR3, #0x61 STRB R3, [R11,#var_5] // var_5 = 0x61 SUB * 주소를 줄때 자주 사용된다. * ex) SUBR3, ..

#include #include 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]을 의미하는 것으로 보..

#include int sum(int, int); int main(void) { int (*fp)(int, int) // 함수 포인터 선언 int res; fp = sum; // 함수명을 함수 포인터에 저장 res = fp(10,20); // 함수 포인터로 함수 호출 printf("result : %d\n", res); return 0; } int sum(int a, int b) { return(a+b); } var_8에 sum() 주소 값을 넣고 있으며 값을 R3으로 가져와 호출하고 있다. #include void func(int (*fp)(int, int)); int sum(int a, int b); int mul(int a, int b); int max(int a, int b); int main(v..

R11은 프레임 포인터로 주소를 뜻하며 [R11]은 값을 뜻한다. [R11, #var_c] = var_c 주소에 있는 값 R11, #-var_8 = var_8 주소 #include 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..
보호되어 있는 글입니다.
보호되어 있는 글입니다.

레지스터 종류 R0 ~ R12 : 범용 레지스터 (다목적 레지스터), R11(스택 프레임 포인터) R0 : 함수 리턴 값 저장 (EAX 같은 느낌) R0 ~ R3 : 함수 호출 인자 전달 R13 ~ R15 : 특수 레지스터 R13(SP) : 스택 포인터 : 스택의 맨 위를 가리킴 R14(LR) : 링크 레지스터 : 서브루틴 후에 돌아갈 리턴 주소 저장 R15(PC) : 프로그램 카운터 : 현재 fetch되고 있는 명령어의 주소 - 따라서 현재 실행되는 명령어의 다음다음 주소 CPSR : 현재 프로그램 상태 레지스터 Instruction 분기 명령 B, BL 데이터 연산 명령 ADD, ADC, SUB, SBC, RSB, RSC, AND, ORR, BIC, MOV, MVN, CMP, CMN, TST, TEQ..

소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push {r6}\n" "add r6, pc, $1\n" "bx r6\n" ".code 16\n" "mov r3, pc\n" "add r3, $0x4\n" "push {r3}\n" "pop {pc}\n" ".code 32\n" "pop {r6}\n" ); } int key3(){ asm("mov r3, lr\n"); } int main(){ int key=0; printf("Daddy ..