我有一个文件,其中包括:
code
.text
.bss
而且这个文件不是手工制作的,所以我怀疑。
问题是code
和.text
部分的含义是什么?据我所知,可执行代码位于.text
节中,那么为什么编译器会添加另一个呢?
如果您需要更多信息以获得答案,我会尽力提供。
我有一个文件,其中包括:
code
.text
.bss
而且这个文件不是手工制作的,所以我怀疑。
问题是code
和.text
部分的含义是什么?据我所知,可执行代码位于.text
节中,那么为什么编译器会添加另一个呢?
如果您需要更多信息以获得答案,我会尽力提供。
一般而言.code
,.text
节和节是同义词。这两个部分都包含可执行代码。而.data
部分包含不可执行的数据。
.bss
由于优化,通常会添加段。的大小.bss
通常非常小,因为它被指定用于保存未初始化的数据。相比之下,.data
段被指定为保存全局/静态变量和数据结构。
第二个代码段很可能是手动添加的。
现在,仅通过名称无法回答为什么二进制文件有两段代码。我认为这显然不寻常。我可以肯定地说一件事,你有两个部分是有原因的。但是,您必须弄清楚原因是什么。
我要做的第一件事是尝试确认段权限和 CLASS。真正的代码段将拥有Read
和Execute
权限。您可以使用许多不同的工具来验证它。例如,如果您要使用 IDA,则使用 完成Segments Subview
,可以使用Shift+访问F7。您可能会很幸运并从一开始就发现假货。
您可以在 PE 文件中使用您希望的任何名称创建任意部分。
.text
和code
部分敲响了警钟,也许这是一个打包的可执行文件?但是,我不记得是哪个包装工了。
部分名称.text
和.bss
Microsoft 的 VC++ 编译器使用的默认名称。虽然CODE
被 Borland 的编译器使用,但code
不是。
因此,这个 PE 文件似乎是使用 Microsoft VC++ 创建的,并且该code
部分是由 PE 文件的作者手动添加的。但是,段名称可以修改为最多 8 个字符的任何值(并且会被 Windows 加载程序忽略),因此请谨慎对待。
使用#pragma data_seg(.xxxxx)
one 可以创建一个单独的部分,并且名称可以是.code
,因为部分名称只是名称并且可以更改。