[GDB] Arm(Armv7): C 코드와 어셈블리 코드를 동시에 디버깅하기
By Guillermo Austin Kim | 2021년 3월 31일 |
이번 포스트에서는 GDB를 사용해 디버깅을 하는 방법을 소개합니다. 소개된 내용을 참고하면 즐겁게 어셈블리 명령어를 디버깅할 수 있습니다. 환경: 라즈베리 파이4 GDB 실행 아래 명령어를 사용해 GDB를 Text User Interface 모드로 실행합니다. $ gdb -tui armv7_aapcs_proc 다음은 위 명령어로 실행한 화면입니다. 이제 바로 다음 명령어를 입력해 어셈블리 명령어 창을 보이도록 합시다. $ layout split 이번에는 'b main'와 'r' 명령어를 입력해 main() 함수에 브레이크 포인트를 걸고 프로그램을 실행합니다. 위 명령어를 입력하면 다음과 같은 화면이 보입니다. 위 화면과 같이 main() 함수의 첫 번째 라인에 브레
[Arm프로세서] Arm 아키텍처의 레지스터 소개
By Guillermo Austin Kim | 2022년 4월 10일 |
Arm 아키텍처를 구성하는 기능을 이해하려면 먼저 무엇을 알아야 할까요? Arm 코어에 내장된 레지스터입니다. 레지스터를 잘 알려면 무엇을 알아야 할까요? 레지스터들이 어떻게 구성돼 있고 어떤 방식으로 사용되는지 파악하면 레지스터를 잘 안다고 말할 수 있습니다. Arm 아키텍처에서 정의된 기능들은 "레지스터를 어떻게 변경하고 설정할까?"가 그 실체이고 정체입니다. 메모리 아키텍처 관점으로 레지스터는 무엇일까요? Arm 코어가 사용하는 저장 매체 중에 가장 속도가 빠른 게 레지스터입니다. 레지스터 다음으로 속도가 빠른 저장 매체로 캐시와 RAM을 주로 언급합니다. 캐시나 RAM을 사용하는 것보다 되도록 레지스터를 사용해 데이터를 연산하면 성능을 최적화할 수 있습니다. 그럼 레지스터는 어떻게 표기할까요
[ARM프로세서] 익셉션 벡터 테이블 소개
By Guillermo Austin Kim | 2020년 10월 21일 |
이번 포스팅에서는 ARMv7과 ARMv8 아키텍처의 익셉션 벡터 테이블을 차례로 소개합니다. ARMv7 익셉션 벡터 테이블 "표 7.2"는 ARMv7 익셉션 벡터 테이블입니다. 우선 표를 읽고 해석해 봅시다. 표 7.2 ARMv7 익셉션 벡터 테이블 표의 가장 왼쪽 윗 부분에 "익셉션 벡터 베이스 주소"가 보이는데, 이는 익셉션 벡터의 기준이 되는 주소를 뜻합니다. 익셉션 벡터 베이스 주소는 0x0이나 0xffff_0000으로 지정할 수 있는데, 리눅스와 같은 범용 운영체제에서는 0xffff_0000에 익셉션 벡터 베이스 주소를 지정합니다. 이어서 "+0x04"~"+0x1C"로 표기된 부분은 익셉션 벡터 베이스 주소 기준의 오프셋 주소를 나타냅니다. 이해를 돕기 위해 한 가지 예를 들겠습니
[ARM프로세서] ARM7 아키텍처의 익셉션 소개
By Guillermo Austin Kim | 2020년 11월 17일 |
"누군가 여러분에게 ARM 아키텍처의 익셉션이 무엇인가요?"라고 묻는다면, 아마 ARMv7 아키텍처에서 설명하는 익셉션이 머릿 속에 떠오를 가능성이 높습니다. ARMv7 아키텍처의 익셉션의 종류와 익셉션 테이블은 기존 ARM 아키텍처의 익셉션의 개념을 물려 받았기 때문입니다. 20년 전에 ARMv5에서 ARM6 아키텍처에 적용된 익셉션의 기본 동작 방식을 ARMv7 아키텍처에서 거의 그대로 확인할 수 있습니다. 가격과 성능을 만족해야 하는 소형 디바이스에서 32비트 ARMv7 아키텍처 기반의 CortexA7, CortexA9 프로세서를 많이 탑재하고 있습니다. 또한 고성능 컴퓨터나 최신 휴대폰에 ARMv8 아키텍처 기반의 ARM 프로세서를 탑재하는데, ARMv8 아키텍처의 익셉션은 기존 ARMv7 아키텍