2017-04-13 13 views
0

물론 C/C++ 프로그램에 정의 된 각 변수의 심볼 및 유형 정보를 사용할 수 있습니다. 그렇지 않으면 디버거에서이를 표시 할 수 없습니다. 그러나이 정보에 액세스하는 방법은 무엇입니까?스택상의 로컬 변수에 대한 GCC 심볼 테이블

엘프에 대한 많은 정보를 사용할 수 있지만 그는 원격 실시간 시스템 (하지 유닉스에서)에서, 즉 스택

에만 전역 변수, 로컬이 아닌 사람을 잡아 것 같다 연결에 대해, 내가 이제는 엿볼 수 있고, 관련 변수 이름과 함께 목록에있는 일부 메모리를 복사 한 다음 나중에 RT 시스템이 작동하는 동안 살펴볼 수 있습니다.

코드 앞부분에 몇 가지 명령문을 추가 할 필요없이 언제든지 변수에 대해 덤프를 도입 할 수있는 것이 가장 좋습니다.

+0

그것은 함수와 스택에 필드를 확장하여 정의 된 구조체 유형 값을 출력하는 예제 프로그램을 갖는 데 많은 도움이됩니다. –

답변

1

이 정보에 액세스하는 방법은 무엇입니까?

TL : DR : 복잡합니다.

거의 완전한 디버거를 만들어야합니다. this space을 볼 수 있습니다. 저자가 9 단계로 넘어 가면 따라야 할 모범이됩니다.

나는 지금 엿볼 수 있고, 관련 변수 이름과 함께 목록의 일부 메모리를 복사하여 나중에 RT 시스템이 진행되는 동안 살펴볼 수 있기를 바랍니다.

RT 시스템은 일반적으로 쉬운 디버깅을 제공하지 않습니다. 가장 좋은 방법은 스택 전체 (사용 된 부분)의 스냅 샷을 찍은 다음 나중에 변수 값을 "꺼내는"것입니다.

이렇게하려면 스택 포인터와 명령 포인터의 현재 값, 스택의 내용 및 모든 ELF 객체의로드 주소를 알아야합니다. 그리고 디버거의 상당 부분을 다시 구현하거나 기존 디버거를 수정해야합니다.

가장 쉬운 방법은 위의 정보를 ELF core으로 변환 (사후 프로세스) 한 다음 원하는 기존 디버거를 사용하여 값을 분석하는 것입니다. Google user-space coredumper을 사용하면 관련된 내용을 볼 수 있습니다. this answer도 참조하십시오.