gdb에서 함수 내에서 디버깅 할 때 "finish"명령을 사용하여 함수의 끝까지 실행할 수 있습니다.gdb는 함수 호출을 "끝내는"방법을 알기 위해 어떤 메커니즘을 사용합니까?
제 질문은 : gdb가 함수의 끝 위치를 어떻게 알 수 있습니까? 특히 "{}"소스 코드와 일치하는 디버깅 기호가없는 경우 어떻게해야합니까?
gdb는 기능이 끝났는지 여부를 판단하기 위해 x86에서 "leave"또는 "mov % rbp, % rsp, pop % rbp"를 찾습니다.
그러나 문제는,
(1) 소스 코드와 ABI의 구조에 따라, 함수 호출의 시작/끝/팝업을 밀어 필요가 몇 가지 추가 레지스터가 여전히있어.
(2) 컴파일하는 동안 레지스터 수를 결정해야합니다.이 "number"정보를 사용할 수없는 경우 바이너리 실행 파일을 throw하는 것이 좋습니다.
그렇다면 "끝내기"명령으로 점프 할 수 있도록 gdb가 어떻게 함수 호출의 끝을 결정합니까?
감사합니다.