티스토리 뷰

IT/MFC, Visual C++

[WINAPI] dll에 포함된 함수 리스트 export 하기 (dumpbin.exe)

주인장 진빼이

기본 경로와 사용방법

dumpbin.exe를 이용하여 덤프를 이용하여 함수 리스트를 export 하는 방법(dumpbin.exe)에 대해 알아본다.

그 밖에도 여러 인자를 넘겨주어 어셈블리도 덤프할 수 있다.

 

dumpbin.exe는 Visual Studio 폴더 내 VC\bin 경로에 있다.

Visual Studio 2017 기준으로 폴더 이름이 Miscrosft Visual Studio 14.0이며, Visual Studio 버전마다 상이할 수 있으니 주의 바란다.

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

 

 

dumpbin.exe를 사용하기 위해서는 명령 프롬프트(cmd)를 관리자 권한으로 실행해야 한다.

다음 명령어를 입력하여 dll을 dump한다.

dumpbin.exe /EXPORTS /OUT:<덤프 출력할 파일 경로> <dll파일 경로>

 

 

 

만약 관리자 권한으로 명령 프롬프트를 실행하지 않은 경우 덤프 시 오류가 발생할 수 있다.

x86: C:\Windows\System32, x64: C:\Windows\SysWOW64 폴더에 포함된 시스템 dll을 덤프하길 바란다. 

시스템 dll이 아닌 직접 만든 dll이 있다면 dumpbin.exe을 사용하여 dll에 포함된 함수 리스트를 확인해보자

 

사용 예시

<관리자 권한으로 명령 프롬프트 실행>
cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
dumpbin.exe /EXPORTS /OUT:C:\test.def C:\Windows\SysWOW64\gdi32.dll

 

 

귀찮으면 아래 배치 파일 사용하길 바란다.

직접 삽질하며 만들었다. 덤프를 할 땐 반드시 관리자 권한을 사용하여 실행하자.

@echo off


net session >nul 2>&1
if %errorLevel% == 0 (
        echo [Success]: 관리자 권한 실행 확인
) else (
	echo.
	echo.
        echo [Fail!]: 관리자 권한으로 실행하시기 바랍니다!
    	pause >nul
	exit
)

set /p dll_path=[export] dll 경로 및 파일이름(*.dll): 
set /p export_path=[export] 덤프 출력 경로 및 파일이름(*.def): 
set mpath=
IF NOT "%VS140COMNTOOLS%" == "" (
	set mpath="%VS140COMNTOOLS%..\..\VC\bin"
)ELSE IF NOT "%VS130COMNTOOLS%" == "" (
	set mpath="%VS130COMNTOOLS%..\..\VC\bin;"
)ELSE IF NOT "%VS120COMNTOOLS%" == "" (
	set mpath="%VS120COMNTOOLS%..\..\VC\bin;"
)ELSE IF NOT "%VS110COMNTOOLS%" == "" (
	set mpath="%VS110COMNTOOLS%..\..\VC\bin;"
)ELSE IF NOT "%VS100COMNTOOLS%" == "" (
	set mpath="%VS100COMNTOOLS%..\..\VC\bin;"
)ELSE (
	echo "Sorry! 폴더를 찾을 수 없습니다!"
)
echo    ^>^> 입력하신 dll 경로: "%dll_path%"
echo    ^>^> 입력하신 export 경로: "%export_path%"
echo.
echo.
cd "%mpath%"
echo [%cd%]
dumpbin.exe /EXPORTS /OUT:%export_path% %dll_path%
echo 명령어:dumpbin.exe /EXPORTS /OUT:%export_path% %dll_path%
echo 오류가 없다면 정상적으로 덤프를 완료했습니다.
pause

dumpbin.bat
0.00MB

 

 

콘솔창 결과

bat를 관리자 권한으로 실행하여 덤프를 뛴 모습이다.

 

 

mytest.def 결과물

Dump of file C:\Windows\System32\gdi32.dll

File Type: DLL

  Section contains the following exports for GDI32.dll

    00000000 characteristics
    90B22122 time date stamp
        0.00 version
        1000 ordinal base
        1001 number of functions
         961 number of names

    ordinal hint RVA      name

       1011    0 0000B110 AbortDoc
       1012    1 00006C90 AbortPath
       1017    2 00005C20 AddFontMemResourceEx
       1018    3 0000B130 AddFontResourceA
       1019    4 00006D30 AddFontResourceExA
       1020    5 00006D50 AddFontResourceExW
       1021    6 00006D70 AddFontResourceTracking
       // 이하 생략...
       1971  3BE 00020738 pGdiSharedMemory
       1972  3BF 00004640 pldcGet
       1973  3C0 00004AC0 vSetPldc
       1000      000069F0 [NONAME]
       1001      00006A10 [NONAME]
       1002      00006A30 [NONAME]
       1003      00006970 [NONAME]
       1004      00002D80 [NONAME]
       1005      00006A50 [NONAME]
       1006      00006950 [NONAME]
       1007      000069B0 [NONAME]
       1008      0000B790 [NONAME]
       1009      000069D0 [NONAME]
       1010      00006990 [NONAME]
       1013      000068B0 [NONAME]
       1015      00003760 [NONAME]
       1016      00004620 [NONAME]

  Summary

        1000 .data
        2000 .didat
        1000 .pdata
       13000 .rdata
        1000 .reloc
        1000 .rsrc
        C000 .text

 

덤프도 재밌다.

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함