使用def文件从可执行文件导出函数
Exporting functions from an executable using a def file
有很多关于如何从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]上的温和令人沮丧的评论,我认为没有理由在这种情况下使用它。
我希望这对其他试图做类似事情的人有所帮助。我很乐意重新指定一个更技术性的答案作为"解决方案",如果出现的话…
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 调用函数一次用于动态链接库,一次从可执行文件调用函数
- 如何在函数居住的可执行文件中找到位置
- 可执行文件如何从DLL文件找到函数
- 如何在 c++ 中调用 unicode 函数 CreateProcessW 来启动 Windows 可执行文件
- 是否可以在Windows上的运行时从可执行文件中找到函数
- 导入函数 Matlab 编码器和C++可执行文件
- 如何在C++中调用预编译可执行文件中的函数(通过命令调用)
- 从编译的可执行文件执行函数
- 可执行文件中共享库的引用函数,带有重定位,但没有PIC
- 库在可执行文件中调用函数,而不是在库中调用函数
- 使用def文件从可执行文件导出函数
- 如何将带有常量参数的C++函数或C++结构链接到D可执行文件
- 如何在arm可执行文件中获取printf函数的地址
- 从可执行文件调用成员函数
- 如何将一个函数从c++可执行文件公开给LuaJIT
- 重载函数和可执行文件/库的大小
- 从可执行文件调用函数
- Turbo C++系统函数运行一个可执行文件