2009-03-16 6 views
1

COM DLL에서 해당 함수 번호의 실제 함수 이름을 가져 오려고합니다. dumpbin.exe을 사용해 보았지만 각 서수에 대해 [NONAME] 만 반환합니다 (처음 몇 개는 제외).COM DLL의 서수에서 함수 이름을 얻는 방법

 
    ordinal hint RVA  name 

     21 0 00002439 DllCanUnloadNow 
     25 1 00007F41 DllGetClassObject 
     116 2 0000539C DllMain 
     138 3 00008633 DllRegisterServer 
     176 4 00008640 DllUnregisterServer 
      1  0009152E [NONAME] 
      2  00154CA7 [NONAME] 
      3  00154C0B [NONAME] 
      4  000140C9 [NONAME] 
     ... 

다른 파일을 포함하지 않는 .dll 파일을 포함하는 디렉토리 (* .TLB, * lib 디렉토리, * .DEF).

누군가이 목록을 가져 오는 방법을 알려주시겠습니까? 또는 최소한 레지스트리 또는 다른 것을 사용하는 특정 서적의 이름? 나는 COM DLL을위한 .DEF 파일을 찾을 수 없습니다, 그래서 이름을 얻기 위해 그것을 사용할 수 없습니다 :

[추가 정보 EDIT]. COM 클래스를 인스턴스화하는 데 관심이 없으며 지정된 서수와 관련된 함수 만 알고 싶습니다.

원래 문제는 WinDbg를 사용하여 예외가 발견되었습니다. ChartFXClientServerCore! Ordinal5507 (+ 0x97b7), 문제를 격리하려고하는 특정 기능을보고 싶습니다.

답변

2

Windows SDK 인 http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en과 함께 제공되는 OleView 도구 (OLE/COM 개체 뷰어)를 사용할 수 있습니다. 이 도구에서 파일 ->보기 TypeLib로 이동 한 다음 DLL을 찾습니다.

EDIT : 형식 라이브러리에 의해 노출 DLL 서수와 메소드 이름 사이의 관계에 대한 질문에 응답 : 그것은 또한 DEF 파일을 통해 또는 __declspec 통해 노출되는 COM 통해 노광 방법 너무 일반적인 아니다 (같이 DllImport). 일반적으로 IUnknown 파생 인터페이스를 통해 CoCreateInstance() 또는 이와 유사한 방법으로 해당 클래스를 만든 후에 COM 메서드에 액세스합니다.

는 DLL의 프로그래머는 는 DEF 파일의 COM 방법의 일부를 노출하도록 선택할 수 있지만 매핑을 알아낼 수있는 유일한 방법 AFAIK, 유엔 장식은 DUMPBIN/수출의 출력을 살펴 보는 것입니다 반환 된 이름 (undname.exe 포함)을 확인하고 형식 라이브러리에서 서신을 시각적으로 찾습니다.

+0

감사합니다. 지금 도구를 사용하여 파일을 탐색 중이지만 서수와 함수 이름 사이의 관계를 찾을 수 없습니다. 라이브러리의 .def 파일을 찾을 수 없으므로이 도구가 어떻게 작동하는지 전혀 모릅니다 (레지스트리 또는 다른 정보에서 정보를 가져 옵니까?) – Groo

1

COM 구성 요소가 스크립팅에 안전하다고 표시되지 않은 경우 OLEView에 실제 정보가 없습니다 (예 : 스크립트에서 호출 할 필요가 없으므로 호출 방법에 대한 모든 정보 (typelib)). idl을 통해 컴파일 됨).

mIDA과 같은 정보가 대부분 해당 정보를 얻을 수 있습니다. openrce, NDR RPC IDL, woodmann을 검색하여 symbolviewer를 검색 할 수도 있습니다. (RIP fravia).

관련 문제