일상에서 멍때리기
[Tool]dumpbin.exe 알아보기 본문
dumpbin은 microsoft에서 제공하는 COFF 개체 파일, COFF 개체의 표준 라이브러리, 실행 파일 및 DLL을 검사할 수 있는 유틸이다.
그렇다면 COFF란?
후다닥 구글링 해본 결과
COFF는 Common Object File Format은 Unix 시스템에서 사용된실행, object code, shared library의 컴퓨터 file 형식
이는 Unix System V에서 소개되어졌고, 이전에 사용되던 a.out format을 대체하였으며 XCOFF, ECOFF로 발전되는 기초가 되었다.
그래서 unix와 비슷한 시스템, Microsoft Window EFI환경 몇몇 embedded development system에서 계속 사용되고 있다는 내용이다.
출처 : http://en.wikipedia.org/wiki/COFF
COFF가 유닉스 기반이라고 해서 linux에서 만든 so library를 까봤는데
warning LNK4048: Invalid format file; ignored
라고 나온다.
혹시나 했는데 역시나 될리가 없었다 ㅋ
dumpbin수행시 발생하는 mspdb100.dll 에러관련은 아래를 참조!!
2011/06/28 - [IT/WIndow] - dumpbin.exe 사용시 에러 발생문제
dumpbin은 아래와 같은 많은 옵션을 제공한다.
/ALL
/ARCHIVEMEMBERS
/CLRHEADER
/DEPENDENTS
/DIRECTIVES
/DISASM[:{BYTES|NOBYTES}]
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
/EXPORTS
/FPO
/HEADERS
/IMPORTS[:filename]
/LINENUMBERS
/LINKERMEMBER[:{1|2}]
/LOADCONFIG
/OUT:filename
/PDATA
/PDBPATH[:VERBOSE]
/RANGE:vaMin[,vaMax]
/RAWDATA[:{NONE|1|2|4|8}[,#]]
/RELOCATIONS
/SECTION:name
/SUMMARY
/SYMBOLS
/TLS
/UNWINDINFO
보자마자 헉 소리가 날많은 많은 옵션들이 있다.
이중 자주 쓰는(?) 일부 옵션만 알아보도록 하자
1. EXPORTS
test_library.dll은 필자가 만든 test library로 아래의 한개 함수를 포함하고있다.
extern __declspec(dllexport) void PrintTest()
{
printf("Hello Library\n");
}
해당 library를 이용하여 exports test를 해보자
C:\temp\Debug>dumpbin /exports test_library.dll
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test_library.dll
File Type: DLL
Section contains the following exports for test_library.dll
00000000 characteristics
4E09364B time date stamp Tue Jun 28 11:02:51 2011
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 000110BE PrintTest = @ILT+185(_PrintTest)
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
exports는 위와 같이 외부로 노출 된 함수를 보여주는 역할을 한다.
2. IMPORTS
다음은 imports이다. 역시 같은 library로 명령어를 날려보도록하겠다
C:\temp\Debug>dumpbin /imports test_library.dll
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test_library.dll
File Type: DLL
Section contains the following imports:
MSVCR100D.dll
10018218 Import Address Table
100180EC Import Name Table
0 time date stamp
0 Index of first forwarder reference
22D _crt_debugger_hook
254 _except_handler4_common
402 _onexit
35A _lock
17D __dllonexit
4C8 _unlock
175 __clean_type_info_names_internal
153 __CppXcptFilter
1F2 _amsg_exit
2EA _initterm_e
2E9 _initterm
137 _CrtSetCheckCount
24C _encoded_null
287 _free_dbg
36C _malloc_dbg
121 _CRT_RTC_INITW
618 printf
KERNEL32.dll
10018168 Import Address Table
1001803C Import Name Table
0 time date stamp
0 Index of first forwarder reference
511 WideCharToMultiByte
4A5 SetUnhandledExceptionFilter
4D3 UnhandledExceptionFilter
1C0 GetCurrentProcess
4C0 TerminateProcess
162 FreeLibrary
4F1 VirtualQuery
214 GetModuleFileNameW
24A GetProcessHeap
2CB HeapAlloc
2CF HeapFree
DE DisableThreadLibraryCalls
279 GetSystemTimeAsFileTime
1C1 GetCurrentProcessId
1C5 GetCurrentThreadId
293 GetTickCount
3A7 QueryPerformanceCounter
33F LoadLibraryW
EA EncodePointer
CA DecodePointer
2EC InterlockedExchange
4B2 Sleep
2E9 InterlockedCompareExchange
300 IsDebuggerPresent
367 MultiByteToWideChar
3B1 RaiseException
54D lstrlenA
245 GetProcAddress
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
별것도 아닌 library에 정신 사납게 많은 내용이 나온다.
IMPORTS는 해당 파일이 참조하는 library와 그 함수를 나타낸다. 저 간단한 코드에서 많은 아이들을 가져다 쓴다는 걸 알 수 있다. ^^
3. HEADERS
다음 HEADERS는 옵션 명 그대로 header의 내용을 보여준다.
너무 긴내용이 나오니 축약하여 잘라서 보도록한다.
C:\temp\Debug>dumpbin /dependency test_library.dll
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test_library.dll
PE signature found
File Type: DLL
FILE HEADER VALUES
14C machine (x86)
7 number of sections
4E09364B time date stamp Tue Jun 28 11:02:51 2011
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
2102 characteristics
Executable
32 bit word machine
DLL
OPTIONAL HEADER VALUES
10B magic # (PE32)
10.00 linker version
3600 size of code
2E00 size of initialized data
0 size of uninitialized data
110D2 entry point (100110D2) @ILT+205(__DllMainCRTStartup@12)
1000 base of code
1000 base of data
10000000 image base (10000000 to 1001AFFF)
1000 section alignment
200 file alignment
5.01 operating system version
0.00 image version
5.01 subsystem version
0 Win32 version
1B000 size of image
400 size of headers
1224C checksum
2 subsystem (Windows GUI)
140 DLL characteristics
Dynamic base
NX compatible
100000 size of stack reserve
1000 size of stack commit
100000 size of heap reserve
1000 size of heap commit
0 loader flags
10 number of directories
16930 [ 15C] RVA [size] of Export Directory
18000 [ 3C] RVA [size] of Import Directory
19000 [ 1B4] RVA [size] of Resource Directory
0 [ 0] RVA [size] of Exception Directory
0 [ 0] RVA [size] of Certificates Directory
1A000 [ 29C] RVA [size] of Base Relocation Directory
15520 [ 1C] RVA [size] of Debug Directory
0 [ 0] RVA [size] of Architecture Directory
0 [ 0] RVA [size] of Global Pointer Directory
0 [ 0] RVA [size] of Thread Storage Directory
0 [ 0] RVA [size] of Load Configuration Directory
0 [ 0] RVA [size] of Bound Import Directory
18168 [ 12C] RVA [size] of Import Address Table Directory
0 [ 0] RVA [size] of Delay Import Directory
0 [ 0] RVA [size] of COM Descriptor Directory
0 [ 0] RVA [size] of Reserved Directory
이와같이 PE의 HEADER내용을 볼 수 있다.
4. DISASM
해당 옵션역시 이름 그대로 코드섹션의 디스어셈블을 표시한다.
5. DEPENDENTS
해당 이미지에서 함수를 가져다 쓰는 DLL의 이름을 덤프한다.
C:\temp\Debug>dumpbin /DEPENDENTS test_library.dll
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test_library.dll
File Type: DLL
Image has the following dependencies:
MSVCR100D.dll
KERNEL32.dll
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
아까 위의 headers에서도 봤던 library 명들이 그대로 보인다 ^^
우선은 많이 쓰는건 이정도 인것같다. (필자의 역량에선)
그럼 dumpbin 끗!
참고사이트 : http://msdn.microsoft.com/ko-kr/library/c1h23y6c(v=VS.90).aspx
'프로그래밍 > Tool And Utils' 카테고리의 다른 글
homebrew (1) | 2014.04.15 |
---|---|
macport (0) | 2014.04.15 |
eclipse에서 vi mode사용하기 (0) | 2014.04.14 |
[tools] cscope 활용하기 (0) | 2014.04.14 |
[Ubuntu] 유용한 유틸 - 그림판 kolourpaint (0) | 2014.04.14 |
[vim] 유용한 vim plugin - taglist (0) | 2014.04.14 |
fossil에 대하여 (0) | 2014.04.14 |