使用def文件从可执行文件导出函数

Exporting functions from an executable using a def file

本文关键字:函数 可执行文件 def 文件 使用      更新时间:2023-10-16

有很多关于如何从dll导出函数的信息(我已经做过很多次),但我听说也可以从可执行文件导出函数,以便外部dll可以调用它们。

虽然我已经设法使这个工作,但似乎入口点有一些问题:

  • 如果没有显式设置,则默认为错误的"main" in一个不起眼的子库。
  • 如果显式设置的,那么它的输入参数argc和argv会被损坏(argc可以是~20000000或~-700000)。

我很难找到任何关于从可执行文件导出函数的文档-我应该接受提示而不这样做吗?

[上下文:这是使我们的进程在Windows和Linux上都工作的努力的一部分。Linux版本意外地从可执行文件中提取函数,而不是从附带的dll中显式导出的函数(函数具有相同的名称,但不同的参数)。

在没有更好的答案的情况下,我发表这篇文章只是为了总结我自己对这个问题的了解:

    在添加def文件后,链接器立即抱怨它无法确定入口点。正是出于这个原因,我添加了/ENTRY引用。然而,在返工期间,我在删除def文件的同时删除了/ENTRY,并且我可以编译而没有错误-我一定在此期间删除了一个微妙的冲突选项。
  • def文件确实成功地从。exe导出函数,并且这些可以然后在该进程的dll中使用(如果它链接到DelayImp)。
  • 我从来没有能够让/ENTRY选项令人满意地工作,并且结合MSDN项目[https://msdn.microsoft.com/en-us/library/f9t8842e.aspx]上的温和令人沮丧的评论,我认为没有理由在这种情况下使用它。

我希望这对其他试图做类似事情的人有所帮助。我很乐意重新指定一个更技术性的答案作为"解决方案",如果出现的话…