关于 PE 图像中的部分的问题

逆向工程 聚乙烯
2021-06-12 15:39:05

我有一个文件,其中包括:

  • code
  • .text
  • .bss

而且这个文件不是手工制作的,所以我怀疑。

问题是code.text部分的含义是什么据我所知,可执行代码位于.text节中,那么为什么编译器会添加另一个呢?

如果您需要更多信息以获得答案,我会尽力提供。

4个回答

一般而言.code.text节是同义词。这两个部分都包含可执行代码。.data部分包含不可执行的数据。

.bss由于优化,通常会添加段。的大小.bss通常非常小,因为它被指定用于保存未初始化的数据。相比之下,.data段被指定为保存全局/静态变量和数据结构。

第二个代码段很可能是手动添加的。

现在,仅通过名称无法回答为什么二进制文件有两段代码。我认为这显然不寻常。我可以肯定地说一件事,你有两个部分是有原因的。但是,您必须弄清楚原因是什么。

我要做的第一件事是尝试确认段权限和 CLASS。真正的代码段将拥有ReadExecute权限。您可以使用许多不同的工具来验证它。例如,如果您要使用 IDA,则使用 完成Segments Subview,可以使用Shift+访问F7您可能会很幸运并从一开始就发现假货。

您可以在 PE 文件中使用您希望的任何名称创建任意部分。

.textcode部分敲响了警钟,也许这是一个打包的可执行文件?但是,我不记得是哪个包装工了。

部分名称.text.bssMicrosoft 的 VC++ 编译器使用的默认名称。虽然CODE被 Borland 的编译器使用,但code不是。

因此,这个 PE 文件似乎是使用 Microsoft VC++ 创建的,并且该code部分是由 PE 文件的作者手动添加的。但是,段名称可以修改为最多 8 个字符的任何值(并且会被 Windows 加载程序忽略),因此请谨慎对待。

使用#pragma data_seg(.xxxxx)one 可以创建一个单独的部分,并且名称可以是.code,因为部分名称只是名称并且可以更改。