【发布时间】:2016-08-24 19:02:57
【问题描述】:
文件是否可以同时是可执行文件 (EXE) 和动态链接库 (DLL)? (即它可以作为 EXE 执行并在运行时作为共享库加载。)
我不明白为什么不可能,但也许有人可以给出解释?
【问题讨论】:
-
不能。请参阅以下内容:stackoverflow.com/questions/1210873/…
-
不是专家,所以我只添加两点需要注意:1)两个主要入口点(exe 与 dll 不同)。 2)dll基地址不固定,所以你的“dll”代码必须是“位置无关代码”。关于文件内容肯定还有很多事情要做,以包含所有必需的部分等。看起来萨米的评论有很好的教程。由于维护原因,我会避免这种混合(我敢打赌,MS 有一天会打破它:))。但如果你坚持的话,它看起来是可能的。
-
不,这是不可能的。 PE 头中有一个位,加载程序使用它来区分 EXE 和 DLL。一个文件不可能同时存在,因为一个位不能同时设置和取消设置。但是,您可以通过与从 DLL 中加载资源和代码非常相似的方式从 EXE 中加载资源和代码。您是否正在尝试解决实际问题?如果您 edit 提出您的问题,我们可以为您提供更多有用和详细的答案。
-
@CodyGray - IMAGE_FILE_EXECUTABLE_IMAGE (0x002) 和 IMAGE_FILE_DLL (0x2000) 都是 PE 头的特性字段的标志。你的意思是这些标志不能都由它们的描述来设置?但是它们的值可能是 OR'd - 我猜根据你的解释,加载器会产生错误吗?不,我只是提出问题,因为我想知道,而不是因为我有一个实际问题:-)