2010-03-30 3 views
0

모든 PDB (모든 입/출력 인수 및 해당 유형)에서 함수의 스택 프레임을 가져와야합니다. 함수 이름과 PDB에서 특정 함수의 주소가 PDB 파일에서 해당 함수의 모든 매개 변수 (in/out) 얻을 수있는 방법이 있습니까?PDB에서 컴파일 할 때 StackFrame을 얻으려면 어떻게해야합니까?

함수는 비 관리 코드로 작성됩니다. 그것은 불가능하다

감사합니다,

우스만

답변

2

개념이 엉망입니다. 다른 파일과 마찬가지로 PDB는 스택 또는 스택 프레임을 포함하지 않습니다. 이는 실행 중에 만들어지는 것이기 때문입니다. .net exe/dll 클래스에 대한 메타 데이터가 포함되어 있으므로 메소드 서명을 볼 수 있습니다. 코드 (Google 클래스 StackFrame/StackFrame)에 스택 프레임을 가져올 수 있지만 여전히 매개 변수 값과 같은 스택의 모든 데이터를 가져올 수는 없습니다.

+0

질문을 넣어 후 나는 생각을 작성하고 런타임에 스택에 대해 컴파일 타임에 생각하지 않았다. 그래서 어떻게 모든 함수의 매개 변수를 PDB (아마도 dbghelp를 사용하여)를 사용하여 얻을 수 있습니까? 나는 모든 함수 이름과 그 주소를 추출했습니다. 그러나 매개 변수가 필요합니다. 함수 이름과 주소를 얻는 것처럼 PDB를 사용하여 매개 변수를 얻을 수 있습니까? – Usman

+0

매개 변수는 무엇을 의미합니까? 가치 또는 정의? – Andrey

+0

그냥 정의 ..? 컴파일 할 때 함수 이름과 주소 (dbghelp를 사용하여 PDB에서 가져온 주소)가 필요합니다. 이제는 인수가 얼마나 많이 있고 인수의 유형이 얼마입니까? 쉼표로 구분 된 – Usman

1

는 컴파일시에 스택 프레임을 얻을 수 있습니다. 스택은 런타임 개념입니다.

1

함수 이름, 주소 및 인수 유형을 덤프에서 추출하려면 dia2dump 프로그램을 사용할 수 있습니다. 디버그 인터페이스 액세스 SDK (dia-sdk)의 샘플로 사용할 수 있습니다. 당신은 Visual 2008 또는 2010 아래에 찾을 수 있습니다 C:\Program Files\Microsoft Visual Studio (your version)\DIA SDK\Samples\DIA2Dump

+0

그래, 이걸 찾았고 거의 끝내 버렸어. DIA2Dump는 실제로 필요한 모든 것을 보여줍니다. (모든 커널 관련 심볼, 내가 필요로하지 않는 PDB를 주었을 때의 심볼) DLL/EXE/PDB에 정의 된 심볼 만 필요합니다. 일부 기호는 symbol001 (int x, int y) 및 symbol002 (int x3, int x4) 중 일부 DLL을 가지고 있습니다 ... 나는이 두 가지만 Kernal 수준의 가져 오기 및 하늘에서 시작하는 모든 필요하지 않습니다. 한도. – Usman

+0

get_symbolsFileName을 사용하여 어디에서 오는 기호를 추적 할 수 있습니다. 하지만 그것의 실패 및 xyz.obj 또는 그 기호가 오는 다른 파일과 같은 기호 파일에 관한 정보를 입력하지 않습니다. 그래서 내가 원하는 방식으로이 기호를 필터링 할 수 있습니다. – Usman

관련 문제