이번엔 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" 옵션을 설정하면 됩니다.
-> 이후 gdb (파일 이름)을 통해 디버그 모드로 진입합니다.
2. 디버그(gdb) 커맨드
1) l : 코드를 10줄 단위로 보여줍니다.
2) b (line num or function) : 지정한 라인 또는 함수에 브레이크 포인트를 걸어줍니다.
3) r : 걸어준 브레이크 포인트까지 프로그램을 실행합니다.
4) s : 한 줄 단위로 프로그램을 실행합니다.
5) info reg : 레지스터들의 상태를 보여줍니다.
-> 디버그 모드에서 가장 중요한 커맨드입니다. 각 레지스터의 주소 값과 저장된 값을 보여줍니다.
이 상태에서 루프를 여러번 돌면 다음과 같이 레지스터 값이 변하게 됩니다.
다른 명령어도 몇 개 더 있지만 자주 사용하지 않아 여기까지만 써둡니다.
하지만 코드를 짜다보면 디버그 사용할 일이 많아서 이 정도까진 직접 테스트해보시는 것을 추천합니다!
(추가) gdb 모드 탈출 커맨드는 "quit" 입니다!
'System Programming(ARM)' 카테고리의 다른 글
[ARM] Signal Handling (0) | 2020.12.03 |
---|---|
10. Signals (0) | 2020.12.03 |
[ARM] 반복문으로 문자열 출력하기 (0) | 2020.11.08 |
[ARM] 스택으로 버퍼 대체하기 (0) | 2020.11.08 |
[ARM] System Call 정리 (0) | 2020.11.08 |