티스토리 뷰
기본 경로와 사용방법
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
콘솔창 결과
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
덤프도 재밌다.
댓글