标准可执行文件可以有导出表吗?

问题描述 投票:0回答:2

我有一个用 C 编写的可执行文件,其中包含一些我想在 C# 应用程序中使用的函数。我之前编写过很多 dll,并且能够通过在函数声明前添加

__declspec(dllexport)
来使用其中的函数。我可以从可执行文件执行此操作吗?可执行文件实际上会导出该函数吗?

dllexport portable-executable
2个回答
8
投票

是的,你可以!是的,可执行文件将导出函数。这种做法并不常见,但效果非常好。根据可执行文件的规范(http://msdn.microsoft.com/en-us/gg463119.aspx),就导出而言,DLL 和可执行文件之间没有区别。 EXE(如 DLL)可以有一个导出表目录,用于记录将由映像导出的函数。作为“正常”可执行导出函数的示例,请查看 Chrome.exe。请参阅我使用 snapshotPEStudio 制作的 ,显示 Chrome 导出一些函数。一些 Windows 内置可执行文件还导出函数(例如本地安全机构子系统 - lsass.exe)。 Windows 内核 (ntoskrnl.exe) 映像还导出 2000 多个函数(在 Windows7 系统上)。


0
投票

是的。 PE 文件可以使用

__declspec(dllexport)
或 .DEF 文件导出函数,并且
GetProcAddress
将返回由该 EXE 文件导出的有效函数地址。 如果 PE 导入 DLL 函数,则该导入的函数可以使用
GetProcAddress(GetModuleHandle(NULL),TEXT("exported_function"))
访问导出的 EXE 函数。

© www.soinside.com 2019 - 2024. All rights reserved.