windows - PE 文件 - 缺少什么?

标签 windows portable-executable

我正在尝试生成 PE 格式的可执行文件 - Windows 7,64 位,最初是一个用于测试目的的最小文件,其作用仅是

mov eax, 42
ret

我有一个 dumpbin 似乎很满意的文件,它包含我能找到的各种来源所说的实际使用的所有字段的明显有效值,但是当我尝试运行它时,Windows 说“不是有效的 Win32 应用程序” 。 dumpbin 输出如下;有人能从中看出我缺少什么吗?

Dump of file a.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
            8664 machine (x64)
               1 number of sections
               0 time date stamp Thu Jan 01 00:00:00 1970
               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+)
            2.05 linker version
               0 size of code
               0 size of initialized data
               0 size of uninitialized data
            1000 entry point (0000000140001000)
               0 base of code
       140000000 image base (0000000140000000 to 0000000140000FFF)
            1000 section alignment
             200 file alignment
            0.00 operating system version
            0.00 image version
            4.00 subsystem version
               0 Win32 version
            1000 size of image
             200 size of headers
               0 checksum
               3 subsystem (Windows CUI)
            8100 DLL characteristics
                   NX compatible
                   Terminal Server Aware
          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
               0 [       0] RVA [size] of Export Directory
               0 [       0] RVA [size] of Import Directory
               0 [       0] RVA [size] of Resource Directory
               0 [       0] RVA [size] of Exception Directory
               0 [       0] RVA [size] of Certificates Directory
               0 [       0] RVA [size] of Base Relocation Directory
               0 [       0] 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
               0 [       0] 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


SECTION HEADER #1
   .text name
       6 virtual size
    1000 virtual address (0000000140001000 to 0000000140001005)
     200 size of raw data
     200 file pointer to raw data (00000200 to 000003FF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

RAW DATA #1
  0000000140001000: B8 2A 00 00 00 C3                                ©*...+

  Summary

        1000 .text

最佳答案

您的“图像大小”仅覆盖标题区域; .text 部分和入口点位于其外部。将其设置为至少 1006,文件应该可以工作。


我是如何找到它的:

  1. 制作了一个最小的 C 程序:

    int 条目() { 返回42; }

  2. 在没有库的情况下使用自定义条目编译它:

    cl test.cpp/link/nodefaultlib/entry:entry/subsystem:console

  3. 开始编辑标题以匹配您的列表,并在每次更改后运行 exe。将 SizeOfImage 更改为 1000 后,我收到“不是有效的 Win32 应用程序”消息。

关于windows - PE 文件 - 缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21585549/

相关文章:

windows - 需要自动化从 Linux 到 Windows 的 PPTP 连接

通过将静态构建转换为特定于操作系统的二进制文件来跨操作系统构建

windows - 计算PE文件中入口点的文件偏移量

windows - 如何手动创建可执行的 .exe PE 文件?

c++ - 如何使用 winHttp 为用户名设置原始 header ?

c++ - 使用 Bazel 运行使 GetTempPath 返回 C :\Windows\

windows - 以编程方式安装 NDIS 筛选器驱动程序

c++ - 是否存在需要在内存中创建对象到某个地址的情况?

c++ - CHAR Name [1]如何容纳超过1个字符?

delphi - 如何将配置信息放入可执行文件中?