"hello world" 만 test.c
인쇄하고 이름 a.out
을 gcc test.c
.
런타임에 무슨 일이 일어나고 있는지 정확히 모니터링하는 것이 가능한지 궁금합니다 a.out
. 예를 들어, 정확히 몇 바이트가 사용되는지 등, a.out
사용된 각 메모리 단위(8비트)에서 무슨 일이 일어나는지 알고 싶습니다 .a.out
글쎄요, 저는 다음과 같은 것을 원합니다.
현재 0X00001234 주소의 메모리는 00001001을 저장하고 있으며,
다음 순간에는 0X00001236 주소의 메모리가 해당 값을 캐시에 저장하고 있습니다.
GDB를 사용하여 단계별로 수행한 것 같습니다. 하지만 나에게는 실행 가능한 바이너리만 있습니다. 디버깅하지 않고 테스트할 수 있는 방법이 필요합니다.
답변1
이 옵션을 사용하여 디버깅 정보가 포함된 프로그램을 컴파일할 수 있습니다 -g
. gdb
그런 다음 소스 코드를 따르고 단계별로 실행할 때 해당 소스 .c 파일이 있으면 소스 코드의 올바른 줄이 표시됩니다.
또한 인터페이스 gdb
를 사용하면 소스 코드에 있는 변수의 해당 메모리 위치를 검사할 수 있습니다.
test
또한 기존 지침과 충돌하는 바이너리 이름을 사용하지 않을 것입니다 .
gcc -g mytest.c -o mytest
-g는 컴파일러에게 실행 파일에 기호 테이블 정보를 저장하도록 지시합니다. 여기에는 다음이 포함됩니다.
- 기호 이름
- 기호 정보 입력
- 기호가 나오는 파일 및 줄 번호
바라보다디버그 옵션 -g는 바이너리 실행 파일을 어떻게 변경합니까?
내 관련 답변도 참조하세요Linux 바이너리가 수행하는 작업 이해