如何使用Dumpbin从PE头中确定AddressOfEntryPoint的RVA

时间:2013-01-08 00:26:50

标签: debugging windbg portable-executable

我一直在网上搜索试图找到这个问题的答案,但它似乎在逃避我。在提出这个问题之前,我已经咨询了以下来源。

我理解PE格式(或者至少我认为我这样做)。使用命令行调试器(cdb),我希望能够反汇编RVA所在的地址,以查看第一次调用的内容。对于本机应用程序(如记事本),我希望看到记事本!WinMainCRTStartup ,对于.NET应用程序,我希望看到CLR的jmp命令。

以记事本为例,我在其上执行了 dumpbin / headers ,并为入口点获得了3570的值。当我执行 cdb notepad 并执行此命令 - u [内存中的基地址] + 0x3570 时 - 我没有得到WinMainCRTStartup调用。

我是否误解了dumpbin的PE输出?我怎样才能准确知道应用程序的启动功能在内存中的位置?

编辑(1/7/13):我忘了提到我在64位Windows 7上运行此操作。如果我尝试在Windows XP模式下使用cdb(从中获取结果)一个32位的操作系统),反汇编我从PE文件的分析得到的AddressOfEntryPoint让我调用WinMainCRTStartup,正如我所料。换句话说,我被告知要查看的确切地址包含我认为应该在32位操作系统中应该使用的地址。在64位计算机上运行应用程序真的会产生很大的不同吗?

只是为了增加复杂性,如果我在cdb中的64位操作系统中对ImageBaseAddress执行操作,我会得到需要使用的EXACT AddressOfEntryPoint。

1 个答案:

答案 0 :(得分:2)

使用Microsoft Symbol Server获取符号调试信息。 http://support.microsoft.com/kb/311503/en-us

0:001> !dh -a notepad
    ....
    3689 address of entry point
    ...
    00ac0000 image base
    ...
0:001> u ac3689 
notepad!WinMainCRTStartup:

编辑:添加dumpbin输出(入口点的偏移量相同,图像库可能不同,因为ASLR在内存中加载图像时有效):

Microsoft (R) COFF/PE Dumper Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file c:\windows\notepad.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               4 number of sections
        4A5BC60F time date stamp Tue Jul 14 03:41:03 2009
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             102 characteristics
                   Executable
                   32 bit word machine

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            9.00 linker version
            A800 size of code
           22400 size of initialized data
               0 size of uninitialized data
            3689 entry point (01003689) _WinMainCRTStartup

编辑2 为x64添加输出

DUMPBIN:

Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file c:\windows\notepad.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
            8664 machine (x64)
               6 number of sections
        4A5BC9B3 time date stamp Tue Jul 14 03:56:35 2009
               0 file pointer to symbol table
               0 number of symbols
              F0 size of optional header
              22 characteristics
                   Executable
                   Application can handle large (>2GB) addresses

OPTIONAL HEADER VALUES
             20B magic # (PE32+)
            9.00 linker version
            A800 size of code
           25800 size of initialized data
               0 size of uninitialized data
            3570 entry point (0000000100003570) WinMainCRTStartup

WinDBG的:

    0:000> !dh -a notepad

    File Type: EXECUTABLE IMAGE
    FILE HEADER VALUES
        8664 machine (X64)
        ...
        1000 base of code
             ----- new -----
    00000000ff0c0000 image base
    ...
0:000> u ff0c0000+3570
notepad!WinMainCRTStartup: