일상에서 멍때리기

[Tool]dumpbin.exe 알아보기 본문

프로그래밍/Tool And Utils

[Tool]dumpbin.exe 알아보기

로 얄 2014. 4. 14. 23:24
반응형

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
Comments