问题标签 [portable-executable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1039 浏览

object - ELF 和 PE 的基本链接过程如何工作

我一直对链接器的工作方式感到困惑,而且这是一个很难搜索的主题。

为了演示我的问题并为答案提供框架,我将写下到目前为止我所知道的(或认为我知道的)。我可能是非常错误的。:)

首先,每个 .cpp 文件都被构建到一个中间文件中(我相信 .o 代表 Posix/ELF 和 .obj 代表 Win/PE)。该中间文件包含由它构建的 .cpp 定义的所有符号,并说明了需要正确解析哪些外部链接。作为对此的扩展,Posix 系统允许您将 .o 文件合并到 .a 文件中(这似乎除了合并之外没有任何作用?这是什么命令?)。.lib 是 Posix .a 文件的 Win/PE 等价物吗?

接下来,将中间文件链接在一起,解决外部依赖关系,并获得可执行文件。我错过了任何步骤吗?

谢谢!

0 投票
2 回答
18692 浏览

windows - 什么是最小的 Windows (PE) 可执行文件?

作为编写编译器的先驱,我试图了解 Windows(32 位)可移植可执行文件格式。特别是我想看一个简单的可执行文件的例子,它除了正确加载、运行和退出之外什么都不做。

我尝试编写和编译一个简单的 C 主函数,它只执行生成的 .exe 约 22KB 并包含许多来自 KERNEL32.DLL 的导入(可能由 LIBC 用于设置环境、堆等)。甚至 DOS 标题也可能更小(它当前打印默认的“此程序无法在 DOS 模式下运行”)。

最小的 Windows 32 位可执行文件的结构是什么?

0 投票
3 回答
4405 浏览

debugging - 在反汇编中查找函数

我正忙于学习一个教程,作者使用 DUMPBIN 列出导出,并使用 OllyDbg 获取导出函数的汇编代码。鉴于导出表 RVA 与反汇编中的实际地址不对应,我将如何在完整的反汇编中找到函数代码。

0 投票
2 回答
210 浏览

windows - Windows XP 引导加载程序 (NTLDR) 是否注意内核导入声明?

我想知道 Windows XP 引导加载程序 ( ntldr) 是否真的使用了 Windows 内核 ( ntoskrnl.exe) 导入声明?

ntoskrnl.exe具有以下导入模块BOOTVID.dllHAL.dllKDCOM.dll. 所以这三个模块是最先被加载的。想象一下内核有另一个模块被声明为导入的。这会导致ntldr也加载它吗?还是ntldr只知道它应该加载这四个模块而没有办法改变它?

0 投票
1 回答
1915 浏览

kernel - 将内核映像从 ELF 转换为 PE

我正在使用 Msys 构建我在 Linux 下编写的 home brew 内核。Linux 使用 ELF 作为其二进制格式,而 Msys 使用 PE。我有源设置以允许 Grub 使用 Multiboot 规范启动它。在构建结束时,我得到一些未定义的符号:

这些似乎是面向 ELF 的符号。如果有人可以建议我如何在 PE 世界中处理这些问题,例如,如果有等价物,那将对我有很大帮助!

0 投票
3 回答
268 浏览

winapi - 标记为“执行”和“读取”的可执行部分?

我注意到(至少在 Win32 上)在可执行文件中,代码段(.text)设置了“读取”访问位以及“执行”访问位。代码读取自身而不是执行自身是否有任何真正的正当理由?我认为这是其他部分的用途(例如 .rdata)。

(具体来说,我说的是IMAGE_SCN_MEM_READ.)

0 投票
2 回答
1544 浏览

.net - 必要时从 USB 驱动器安装 .NET 框架

我们有一个将通过 USB 驱动器分发的 .NET 应用程序。最终用户将连接驱动器并双击 EXE(一个 .NET exe)运行它而不安装它。

现在的问题是,如果未安装 .NET,我们希望触发 .NET 安装程序,而不是显示 MS 放在那里的默认下载消息。安装程序将通过 USB 与应用程序一起分发。

一种方法可能是替换 .NET 可执行文件中的 PE 存根文件。但是我没有在 C# 编译器中看到和 /STUB 开关(尽管 C 编译器有它)。

还有什么人能想到的吗?

更新:感谢 Tim Robinson,我了解到 Windows 不处理 PE 存根文件。因此,ClickOnce 解决方案似乎是唯一可行的解​​决方案。我将检查 ClickOnce。

0 投票
1 回答
464 浏览

.net - 如何从 x86 .NET 应用程序(反之亦然)获取 AMD64 程序集的 PEKind 和 ImageFileMachine?

我正在为我们的产品编写一个安装验证工具,我需要从几个已安装的程序集中检索一些 PE 信息。无论我们的产品安装在什么平台上,我们都会将 AMD64、x86 和 MSIL 组件运送到特定位置,让用户为这些平台创建部署项目。

问题是,使用以下代码:

如果应用程序以 x86 运行并尝试加载 AMD64 程序集,Assembly.LoadFile(...) 将中断,反之亦然。

我发现这些相关但不完全:

0 投票
6 回答
25803 浏览

c++ - PE文件中的MZ签名有什么用?

我正在开发一个程序,该程序将解析 PE 对象以获取各种信息。

虽然阅读规范,但我无法找出 MZ 字节存在的原因,因为我无法在这 2 个字节应该代表的机器类型列表中找到它。

谁能澄清一下?

0 投票
3 回答
316 浏览

c# - 可编写脚本的 Windows 反汇编程序 [非 cygwin]

我目前正在尝试实现一些结合逆向工程和图论的东西。因此,我想反汇编 PE 二进制文件。有一些非常复杂的工具可以做到这一点,例如 IDA 或 w32dasm。后者似乎死了。IDA 不可编写脚本——据我所知。

我想要一个可编写脚本的反汇编程序的原因是,我用 C# 实现了我的程序。它得到一个二进制文件,因此它必须以某种方式获取操作码。我想我需要用参数调用一些帮助程序。没有 GUI 就无法调用 IDA。它不提供真正的命令行选项。

有任何想法吗?

谢谢,希望