问题标签 [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 投票
3 回答
2970 浏览

windows - Windows PE - 如果不在资源中,字符串在哪里以及如何存储?

通常 .exe 文件中的字符串(如对话框的内容/标题)存储在某种资源中。

但是在最近的一些我反汇编/资源检查的exe中,我找不到任何包含该字符串的资源,但它以某种方式用db's 硬编码到程序源代码中。

  • 如何提取和修改直接位于程序中的字符串?我假设那些只是相当于const char*C++ 中的 s ?

  • 为什么有人不“外包”对话框、菜单等的内容?

0 投票
1 回答
1367 浏览

windows - 从 windows PE 文件修改 .rdata unicode 字符串

我一直在寻找一种方法来修改存储在 .rdata 部分的 Windows .exe 文件中的静态字符串,但是我还没有找到真正的方法。

  • 整个事情太复杂了,无法手动完成(在本例中是由 HEX 编辑器完成),所以我想知道您是否有解决方案。
0 投票
3 回答
19258 浏览

winapi - 为什么我的 PE 文件无效?

我已经问过一个类似的问题,“PE Header requirements”,但我对它的答案并不满意。

我正在用 Java SE 1.6 构建一个汇编器/链接器。我已经阅读了大约 5 个关于 PE/COFF 标头和文件格式的不同文档/规范,但我遇到了一个问题:

我生成的文件无效,Windows 说:“X 不是有效的 Win32 应用程序。” 我不知道可能出了什么问题;我仔细检查了 PE Header 和 PE Optional Header 中的每个条目,一切似乎都是正确的。
我有三个部分:

  • code(RVA 0x1000,文件0x400
  • data(RVA 0x2000,文件0x600
  • import(RVA 0x3000,文件0x800

我的入口点值在0x1000(的开头code),我的图像库是0x400000. 节对齐是0x1000,文件对齐是0x200.

请参阅此问题的修订版以查看整个文件。

所以:我抓取了一个有效的 PE 文件(一个简单的“Hello World”消息框应用程序),并开始使用十六进制编辑器 (HxD) 对其进行修改。我收到了很多不同的错误消息,而不是“X 不是有效的 Win32 应用程序。”:

我知道我的code内容不是“有效”代码,但我已经对其进行了测试:无效代码会导致应用程序崩溃错误。

如果“Hello World”PE 文件中的 import-section 内容无效,它会给我错误“Procedure point cannot be found in [...]”,或“Application has failed to start because [..] dll is未找到。”,或应用程序崩溃。这些错误都非常有用;他们都给了我一些线索,知道出了什么问题。

但是我的 PE 文件出现错误“X 不是有效的 Win32 应用程序。”让我发疯:我的 PE 文件有什么问题?

垃圾箱输出:

0 投票
3 回答
13223 浏览

linux - 如何在Linux中将PE(Portable Executable)格式转换为ELF

将 PE 二进制文件转换为 ELF 二进制文件的最佳工具是什么?

以下是这个问题的简要动机:

  1. 假设我有一个简单的 C 程序。
  2. 我使用 gcc for linux 编译它(这给出了 ELF),并使用 'i586-mingw32msvc-gcc' for Windows(这给出了一个 PE 二进制文件)。
  3. 我想分析这两个二进制文件的相似之处,使用 Bitblaze 的静态分析工具 - vine( http://bitblaze.cs.berkeley.edu/vine.html )
  4. 现在 vine 对 PE 二进制文件没有很好的支持,所以我想转换 PE->ELF,然后继续我的比较/分析。

由于所有分析都必须在 Linux 上运行,我更喜欢在 Linux 上运行的实用程序/工具。

谢谢

0 投票
2 回答
74 浏览

exe - 执行部分

如何在 exe 文件中检索 IP 指向开头的点?它总是指向 .text 段的开头吗?

0 投票
2 回答
2613 浏览

com - 如何检查PE文件(DLL,EXE)是否为COM组件?

我需要编写一个存根模块,当给定一个 PE (DLL/EXE) 作为输入时,它将确定它是普通的 Win32 DLL/EXE 还是 COM DLL/EXE。我需要以编程方式确定这一点。

是否有任何用于此目的的 Windows API?

0 投票
1 回答
2327 浏览

dll - 更改导入的 Dll 名称?

在便携式可执行文件中,我们可以通过编辑PE文件来更改导入的dll名称,在这里,我已经更改了应用程序exe的一个导入的dll名称,当时它正常更改...。例如advapi32.dll到^dvapi32。 dll ,所以这里 system32 或任何其他 PATH 位置没有 ^dvapi32.dll ..这次我只是将真正的 advapi32.dll 更改为 ^dvapi32.dll 并放入应用程序目录,这次它工作正常....但是当我尝试使用 ntdll 和 gdi32.dll 时,它不支持,我无法解决问题,请帮助我解决问题..谢谢。

0 投票
4 回答
829 浏览

visual-studio - 想知道 COFF Externs

Microsoft PE/COFF SPEC(v8,第 5.4.4 节)说,当符号具有:

  1. IMAGE_SYM_CLASS_EXTERNAL 的存储类
  2. 和0的节号(IMAGE_SYM_UNDEFINED)

它是“指示大小”的“值”字段(在符号表中)。

这让我很困惑。特别是,我想知道“表示什么大小?”。

通常, CL(visual C++) 使用IMAGE_SYM_CLASS_EXTERNALandIMAGE_SYM_UNDEFINED来表示 externs。

为什么链接器需要知道或关心符号的大小?它不只需要知道一个名称,它是一个外部,并设置适当的重定位条目吗?这些都不应该取决于大小。现在,诚然,编译器需要知道这一点,但它会从头文件中获取该信息,而不是从目标文件中。

我查看了一些由 CL 编译的简单示例 extern,Value 字段似乎总是为零。所以,它显然没有被用来编码字段的大小。

有谁知道规范指的是什么“尺寸”?他们是否有任何视觉工作室链接器可能使用该字段的场景,或者规范中的宣传只是胡说八道?我有限的大脑无法想到任何这样的场景。

更新:

请注意,它并不(至少不总是)看起来是符号的大小。在我观察到VALUE IS ALWAYS 0的情况下,这就是问题所在。

0 投票
3 回答
4090 浏览

windows - 可移植的可执行结构解释

我正在学习可移植可执行文件的结构。我浏览了 MSDN 文章,但我对此有点困惑。我对它们的精确结构及其功能有些困惑。

任何人都可以帮助我或请我参考一篇不错的文章吗?

0 投票
2 回答
1301 浏览

c# - .NET 是否支持 Win32 代码互操作?

我需要带有 .NET 的 InterOp Win32 代码(非托管 Win32 DLL 和 EXE)。我需要在运行时调用 Win32 非托管代码(DLL 导出函数),知道 Win32 签名中的数据类型,并在运行时根据该类型传递数据。

这对于 COM 是可能的,您可以使用 tlbimp.exe 将 COM 非托管代码转换为托管程序集,并使用反射 API 来处理这些托管类型(使用 tlbimp 将非托管类型转换为托管)。

如何在 .NET 框架中获得与 Win32 相同的功能?

我知道 MS 提供了一个导出表读取 API,但我找不到用于 Win32 非托管代码互操作的确切 API。