[delphi] Delphi 프로그램 또는 컴파일러 생성 디버그 정보에서 지역 변수 정보 (주소 및 유형)를 어떻게 추출합니까?

내 목표는 :

  • Delphi로 컴파일 된 32 비트 또는 64 비트 Windows 프로그램에 일시 중단 된 스레드가 주어지면 스택을 살펴볼 수 있습니다 (실행 가능).
  • 스택 항목이 주어지면 각 메서드와 해당 값의 지역 변수를 열거합니다. 즉, 적어도 주소와 유형 (integer32 / 64 / signed / unsigned, string, float, record, class …)을 찾아 값을 찾는 데 사용할 수 있습니다.

첫 번째는 괜찮고이 질문에 관한 두 번째 문제입니다. 높은 수준 에서 Delphi의 스택 항목이 주어지면 지역 변수를 어떻게 열거합니까?


낮은 수준에서 이것은 내가 조사한 것입니다.

RTTI : 메서드에 대한 이러한 종류의 정보를 나열하지 않습니다. 이것은 내가 실제로 현실적인 선택이라고 생각한 것이 아니었지만 어쨌든 여기에 나열했습니다.

디버그 정보 : 디버그 빌드를 위해 생성 된 디버그 정보를로드합니다.

  • 지도 파일 : 상세한지도 파일 (텍스트 형식 파일! 하나를 열고 살펴보기)에도 지역 변수 정보가 포함되어 있지 않습니다. 기본적으로 주소 및 소스 파일 행 번호 목록입니다. 파일 및 라인 상관 관계에 대한 주소 (예 : 거터의 파란색 점)에 적합합니다. 더 자세한 정보에 적합하지 않음
  • 원격 디버깅 정보 (RSM 파일)- 내용이나 형식에 대한 알려진 정보가 없습니다 .
  • TD32 / TDS 파일 : 나의 현재 연구 라인. 여기에는 다른 많은 정보 중에서 전역 및 지역 기호가 포함되어 있습니다.

여기에서 발생하는 문제는 다음과 같습니다.

  • TD32 파일 형식에 대한 문서가 없습니다 (찾을 수 있음).
  • 그들에 대한 대부분의 지식은 그들을 사용하는 Jedi JCL 코드 (JclTD32.pas)에서 비롯되었으며 해당 코드를 사용하는 방법 또는 구조가 지역 변수를 표시하기에 충분히 광범위한 지 확실하지 않습니다. 나는 그것이 전역 기호를 처리 할 것이라고 확신하지만 지역에 대해서는 매우 불확실합니다. 정의 된 다양한 상수가 있고 형식에 대한 문서가 없는데, 그 의미를 읽기 위해 추측 할 수 있습니다. 그러나 이러한 상수와 이름은 어딘가에서 왔어 야합니다.
  • TDS 정보를 사용하여 찾을 수있는 소스 는 로컬 기호를로드하거나 처리하지 않습니다.

이것이 올바른 접근 방식이라면이 질문은 ‘TDS / TD32 파일 형식에 대한 문서가 있고 지역 변수를로드하는 코드 샘플이 있습니까?’가됩니다.

코드 샘플은 필수는 아니지만 매우 작더라도 매우 유용 할 수 있습니다.



답변

바이너리가 아닌 디버깅 기호가 있는지 확인하십시오. GDB를 사용하는 것도 가능합니다 (Windows에서는 포트). .dbg 또는 .dSYM 파일을 찾으면 좋을 것입니다. 예를 들어 소스 코드가 포함되어 있습니다.

gdb> list foo
56 void foo()
57 {
58  bar();
59  sighandler_t fnc = signal(SIGHUP, SIG_IGN);
60  raise(SIGHUP);
61  signal(SIGHUP, fnc);
62  baz(fnc);
63 }

디버깅 파일이없는 경우 MinGW 또는 Cygwin을 가져 와서 nm (1) ( man page )를 사용할 수 있습니다. 바이너리에서 기호 이름을 읽습니다. 여기에는 C ++ 유형과 같은 일부 유형이 포함될 수 있습니다.

int abc::def::Ghi::jkl(const std::string, int, const void*)

--demangle옵션 을 추가하는 것을 잊지 마십시오. 그렇지 않으면 다음과 같은 메시지가 표시됩니다.

__ZN11MRasterFont21getRasterForCharacterEh

대신에:

MRasterFont::getRasterForCharacter(unsigned char)


답변

http://download.xskernel.org/docs/file%20formats/omf/borland.txt 개방형 아키텍처 핸드북을 살펴보십시오 . 오래되었지만 파일 형식에 대한 관련 정보를 찾을 수 있습니다.


답변