【问题标题】:difference between .text and .code section name.text 和 .code 部分名称之间的区别
【发布时间】:2017-01-23 19:21:19
【问题描述】:

我使用 pe 文件分析器软件,如 exeinfoPe,在部分列表部分有 .text 和 CODE 部分类型,我们可以使用它们,例如将 .data 名称更改为 .text 或 CODE 或其他部分名称。这些部分类型相同吗?他们之间有什么区别?

【问题讨论】:

  • 请参阅code segmentdata segment。有时,它们可能是相同的。
  • 我相信您在谈论部分名称,而不是标志。有一些常见的部分名称,但它们不是必需的。什么实际上是标志(例如可执行或可写)。
  • .code.text 段是同义词。否则,段通常不可互换。例如,它们在许多架构上都是只读的。
  • 您将部分名称与部分标志混淆了。 CODE 是节标志,.text 是节名。虽然一个部分的名称提供了一个很好的线索,它的用途,一个部分可以命名任何东西,它是决定它可以用于什么的部分标志。
  • PE Explorer 误导了你。虽然CODE,特别是IMAGE_SCN_CNT_CODE,是一个节标志,可以与其他标志结合使用,或者没有其他标志,可以认为是表示一个节的类型,.text只是节名。按照惯例,它具有标志IMAGE_SCN_CNT_CODE|IMAGE_SCN_MEM_EXECUTE|IMAGE_SCN_MEM_READ,但具有不同名称的部分也可以具有这种“类型”,而名为.text 的部分至少在理论上可以具有其他标志。有关详细信息,请参阅 PECOFF 规范:msdn.microsoft.com/en-us/library/windows/desktop/…

标签: assembly disassembly


【解决方案1】:

二进制文件的.text.code 部分在功能上没有区别。

在几乎所有情况下,它们是完全同义的(意味着它们引用相同的部分),但即使它们不是同义词(例如,由于二进制文件中部分的实际顺序) ,它们在语义上是相同的。

这是目标文件或地址空间中包含可执行指令(“代码”)的部分,这些指令以纯文本(“文本”)形式存储。与.data 部分不同,它几乎总是只读的。

请查阅您的汇编器、编译器、链接器或反汇编器的文档以查看它更喜欢哪个名称。 PE 格式使用.text

【讨论】:

    【解决方案2】:

    .CODE.TEXT 部分之间没有语义差异。 就像在MASM 汇编器中一样,指令空间地址由.CODE 部分命名,而在其他编译器中则由.CODE 命名。

    因此,当您使用MASM 组装代码时,您将看到.CODE 部分以及.TEXT

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 1970-01-01
      • 2016-09-17
      • 2014-10-09
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多