我正在尝试以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
答案 0 :(得分:4)
您的“图片大小”仅涵盖标题区域; .text
部分和入口点位于其外部。将它设置为至少1006,文件应该可以工作。
我是如何找到的:
制作了一个最小的C程序:
int entry() { 返回42; }
编译它没有库和自定义条目:
cl test.cpp / link / nodefaultlib / entry:entry / subsystem:console
开始编辑标题以匹配您的商家信息,并在每次更改后运行exe。一旦我将SizeOfImage更改为1000,我就得到了“不是有效的Win32应用程序”消息。
答案 1 :(得分:0)
我无法通过查看您的dumpbin输出来判断,但是有一个很好的实用工具,CFF Explorer可用于检查PE文件的几乎所有细节。它是交互式的并显示各种表格,您还可以动态编辑大部分值来试验它。
我发现过去比较容易将值与CFF资源管理器中的PE规范进行比较,而不是使用dumpbin。