모든 PDB (모든 입/출력 인수 및 해당 유형)에서 함수의 스택 프레임을 가져와야합니다. 함수 이름과 PDB에서 특정 함수의 주소가 PDB 파일에서 해당 함수의 모든 매개 변수 (in/out) 얻을 수있는 방법이 있습니까?PDB에서 컴파일 할 때 StackFrame을 얻으려면 어떻게해야합니까?
함수는 비 관리 코드로 작성됩니다. 그것은 불가능하다
감사합니다,
우스만
모든 PDB (모든 입/출력 인수 및 해당 유형)에서 함수의 스택 프레임을 가져와야합니다. 함수 이름과 PDB에서 특정 함수의 주소가 PDB 파일에서 해당 함수의 모든 매개 변수 (in/out) 얻을 수있는 방법이 있습니까?PDB에서 컴파일 할 때 StackFrame을 얻으려면 어떻게해야합니까?
함수는 비 관리 코드로 작성됩니다. 그것은 불가능하다
감사합니다,
우스만
개념이 엉망입니다. 다른 파일과 마찬가지로 PDB는 스택 또는 스택 프레임을 포함하지 않습니다. 이는 실행 중에 만들어지는 것이기 때문입니다. .net exe/dll 클래스에 대한 메타 데이터가 포함되어 있으므로 메소드 서명을 볼 수 있습니다. 코드 (Google 클래스 StackFrame
/StackFrame
)에 스택 프레임을 가져올 수 있지만 여전히 매개 변수 값과 같은 스택의 모든 데이터를 가져올 수는 없습니다.
는 컴파일시에 스택 프레임을 얻을 수 있습니다. 스택은 런타임 개념입니다.
함수 이름, 주소 및 인수 유형을 덤프에서 추출하려면 dia2dump 프로그램을 사용할 수 있습니다. 디버그 인터페이스 액세스 SDK (dia-sdk)의 샘플로 사용할 수 있습니다. 당신은 Visual 2008 또는 2010 아래에 찾을 수 있습니다 C:\Program Files\Microsoft Visual Studio (your version)\DIA SDK\Samples\DIA2Dump
그래, 이걸 찾았고 거의 끝내 버렸어. DIA2Dump는 실제로 필요한 모든 것을 보여줍니다. (모든 커널 관련 심볼, 내가 필요로하지 않는 PDB를 주었을 때의 심볼) DLL/EXE/PDB에 정의 된 심볼 만 필요합니다. 일부 기호는 symbol001 (int x, int y) 및 symbol002 (int x3, int x4) 중 일부 DLL을 가지고 있습니다 ... 나는이 두 가지만 Kernal 수준의 가져 오기 및 하늘에서 시작하는 모든 필요하지 않습니다. 한도. – Usman
get_symbolsFileName을 사용하여 어디에서 오는 기호를 추적 할 수 있습니다. 하지만 그것의 실패 및 xyz.obj 또는 그 기호가 오는 다른 파일과 같은 기호 파일에 관한 정보를 입력하지 않습니다. 그래서 내가 원하는 방식으로이 기호를 필터링 할 수 있습니다. – Usman
질문을 넣어 후 나는 생각을 작성하고 런타임에 스택에 대해 컴파일 타임에 생각하지 않았다. 그래서 어떻게 모든 함수의 매개 변수를 PDB (아마도 dbghelp를 사용하여)를 사용하여 얻을 수 있습니까? 나는 모든 함수 이름과 그 주소를 추출했습니다. 그러나 매개 변수가 필요합니다. 함수 이름과 주소를 얻는 것처럼 PDB를 사용하여 매개 변수를 얻을 수 있습니까? – Usman
매개 변수는 무엇을 의미합니까? 가치 또는 정의? – Andrey
그냥 정의 ..? 컴파일 할 때 함수 이름과 주소 (dbghelp를 사용하여 PDB에서 가져온 주소)가 필요합니다. 이제는 인수가 얼마나 많이 있고 인수의 유형이 얼마입니까? 쉼표로 구분 된 – Usman