arm

이번엔 저번 시간에 배운 시그널을 c언어를 이용해 호출해보는 실습을 진행해보자. Signal 알아보기 : suhwanc.tistory.com/127 Signal Handler c언어에서는 함수 signal을 이용해 시그널을 핸들링하는 기능을 제공한다. signal 함수는 다음과 같이 생겼다. -> signal(int signum, sighandler_t *handler) 첫 번째 인자는 시그널의 고유 ID이고, 두 번째 인자는 앞의 시그널에 대한 처리 루틴이다. 헷갈려서 위에 쓰지 않았지만, 이 함수는 이전 핸들러의 주소 포인터가 리턴된다.(반환값 : sighandler_t*) 두 번째 인자로는 그냥 handler 자체가 올 수도 있고, 특별하게 2가지가 더 올 수 있는데 SIG_IGN 이 오면, 앞의 ..
이번에 배울 시그널은 특정 시스템에 한정된 용어가 아닌 운영체제 전반에서 쓰이는 용어이니 잘 알아두자. 우선 이전에 배운 것들을 다시 상기해보자. 우리가 지금까지 배운 컴퓨터 시스템 안에서의 상호작용 Assembly language : 명령어 사이의 상호작용 Procedure calls : 함수 사이의 상호작용 Linking : 오브젝트 파일 사이의 상호작용 Exceptions : OS와의 상호작용 (application -> OS) 결론부터 말하자면, 시그널은 application과의 상호작용을 의미하는데, 이는 application에 제어권을 넘긴다는 것을 의미한다. 말은 어려운 것 같지만 이후 나올 내용은 앞에서 배운 어떤 것보다 우리에게 친숙하게 느껴질 것이니 끝까지 잘 공부해보자. 시그널이란? ..
이번엔 ARM 어셈블리 코드로 작성한 파일을 디버깅하는 방법에 대해 알아보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @ suhwan++20201108 @ debug practice .text _start: .global _start mov r1, #0 loop: cmp r1, #10 bge exit add r1, r1, #1 b loop exit: mov r0, #0 mov r7, #1 swi 0 .end cs 먼저, 이번에 사용할 코드입니다. 아주 단순하게 1부터 10까지 r1을 +1씩 증가시키고, 10이 되면 프로그램을 종료하는 코드입니다. 1. 디버그 옵션 설정 -> 디버그 옵션은 as(오브젝트 파일로 변환)할 때 "-g" 옵션을 설정하면 ..
이번엔 미리 버퍼에 저장해둔 문자열을 출력해봅시다! 순서는 다음과 같습니다. 1) 문자열의 주소(맨 앞 포인터)를 레지스터에 담습니다.(adr 명령어 사용) 2) 포인터를 하나씩 증가시키면서 바이트 단위로 로드해서 출력합니다. 3) 위 과정을 문장이 끝날 때까지 반복합니다. 소스 코드 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 @ suhwan++20201108 @ write sentence .text _start: .global _start adr r3, msg @ r3
본 포스팅에서는 sp(stack pointer)를 이용해 항상 .data 밑에다가 자잘하게 써왔던 버퍼를 대체하는 것을 보여드립니다! 1. 기존 버퍼 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @ suhwan++20201108 @ system call test .text _start: .global _start @ sys_read (fd, pstr, len); @ r0 r1 r2 mov r0, #0 @ fd
suhwanc
'arm' 태그의 글 목록