내 목표는 :
- 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 파일 형식에 대한 문서가 있고 지역 변수를로드하는 코드 샘플이 있습니까?'가됩니다.
코드 샘플은 필수는 아니지만 매우 작더라도 매우 유용 할 수 있습니다.