gpt4 book ai didi

C 程序在编译和链接后生成包含 edata 部分的 EXE 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:12 25 4
gpt4 key购买 nike

我正在审查有关可移植可执行文件(EXE 文件)的 Microsoft 规范。特别是,我正在审查 .edata(导出数据)部分。这是 what the specification says about the edata section :

The export data section, named .edata, contains information about symbols that other images can access through dynamic linking. Exported symbols are generally found in DLLs, but DLLs can also import symbols.

非 DLL 文件可以有 edata 部分吗?具体来说,C 程序在编译和链接后能否生成包含 edata 部分的 EXE 文件?如果是,请您展示一个简单的 C 程序,在编译和链接后生成一个包含 edata 部分的 EXE 文件,好吗?

最佳答案

任何 PE Image 文件都可能包含导出表,无论它是 EXE 还是 DLL。但是,导出表不一定包含在 .edata 部分中。例如,通常在 .rdata 部分中查看导出表。

要定位导出表,您应该使用导出表数据目录,而不是完全依赖于节表。

以下是一个示例 C 程序,编译后将生成一个带有导出表的 EXE。但是,它可能不会放在 .edata 部分中(并且 EXE 可能根本没有 .edata 部分)。

#include <stdio.h>

__declspec(dllexport) void some_func(void)
{
printf("Hello\n");
return;
}

int main()
{
return 0;
}

当我在我的系统上使用 Visual Studio 2017 编译这个程序,并在生成的 EXE 上运行 dumpbin/HEADERS/EXPORTS 时,我看到以下内容:

...

SECTION HEADER #3
.rdata name
2A94 virtual size
19000 virtual address (0000000140019000 to 000000014001BA93)
2C00 size of raw data
7E00 file pointer to raw data (00007E00 to 0000A9FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only

...


Section contains the following exports for SampleApp.exe

00000000 characteristics
FFFFFFFF time date stamp
0.00 version
1 ordinal base
1 number of functions
1 number of names

ordinal hint RVA name

1 0 0001108C some_func = @ILT+135(some_func)

在这种情况下,确认导出表已放入 .rdata 部分。

关于C 程序在编译和链接后生成包含 edata 部分的 EXE 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55043473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com