我有一个用 C 编写的可执行文件,其中包含一些我想在 C# 应用程序中使用的函数。我之前编写过很多 dll,并且能够通过在函数声明前添加
__declspec(dllexport)
来使用其中的函数。我可以从可执行文件执行此操作吗?可执行文件实际上会导出该函数吗?
是的,你可以!是的,可执行文件将导出函数。这种做法并不常见,但效果非常好。根据可执行文件的规范(http://msdn.microsoft.com/en-us/gg463119.aspx),就导出而言,DLL 和可执行文件之间没有区别。 EXE(如 DLL)可以有一个导出表目录,用于记录将由映像导出的函数。作为“正常”可执行导出函数的示例,请查看 Chrome.exe。请参阅我使用 PEStudio 制作的 ,显示 Chrome 导出一些函数。一些 Windows 内置可执行文件还导出函数(例如本地安全机构子系统 - lsass.exe)。 Windows 内核 (ntoskrnl.exe) 映像还导出 2000 多个函数(在 Windows7 系统上)。
是的。 PE 文件可以使用
__declspec(dllexport)
或 .DEF 文件导出函数,并且 GetProcAddress
将返回由该 EXE 文件导出的有效函数地址。
如果 PE 导入 DLL 函数,则该导入的函数可以使用 GetProcAddress(GetModuleHandle(NULL),TEXT("exported_function"))
访问导出的 EXE 函数。