call_stack 을 구현할려고합니다.

updateing의 이미지

리눅스에서 gcc기반으로 디버거를 만들고 있습니다.

리눅스에서 개발한지는 2개월 정도 되었구요

디버거 기능중 callstack 이라는 기능을 구현할려고 하는데

함수의 시작주소를 가져와서 elf와 매칭하여 현재 프로세서 가 어떻게

돌아가는지를 보여주고 싶은데

도무지 어떻게 해야 할지 감이 안오네요

레지스터 정보 struct pt_reg regs ptrace() 통해 가져와서

ebp+0x04 를 해도 다음 주소가 안나오네요

call_stack 에대해서 좀 알려주세요 ^^*

JuEUS-U의 이미지

스택만 두고서는 구할 수는 없고,
디버깅 정보에 함수가 스택에 저장하는 내용이 들어있다고 하는데,
뭐 자세히는 잘 모르겠습니다.

updateing의 이미지

ELF 섹션안에 디버깅 정보에 함수 네임정보가 있어요 주소랑요

근데 call_stack을 구현할려면 함수의 흐름을 보여야 하잖아요

그러니 이 섹션 정보랑 매치할 함수의 흐름을 어떻게 해야 할지 ...ㅜㅜ

JuEUS-U의 이미지

대충 개념적으로는 간단하긴 한데... 관련자료가 하나도 없네요 - ㅅ-)
뭐 glibc의 backtrace 함수를 참고하시는게 어떨까 합니다.
ptrace(syscall)로도 가능하다고는 하는데, 글쎄요 '~');;;