gpt4 book ai didi

java - 使用调试信息反编译 C 代码?

转载 作者:太空狗 更新时间:2023-10-29 19:59:04 25 4
gpt4 key购买 nike

Java 和 Python 字节码比 C/C++ 编译器生成的编译机器码更容易反编译。

关于为什么 -g 选项的信息不足以反编译,但足以调试,我找不到令人信服的答案?Python/Java 字节码中包含哪些额外的东西,使反编译变得容易?

最佳答案

这里有一些原因:

  1. Java 和 Python 字节码相对简单和高级,而某些 CPU(想想 x86)的指令集极其复杂。
  2. 字节码非常模仿其设计语言的结构。
  3. 在生成字节码时,Java 和 Python 几乎没有进行优化。这导致字节码与原始源代码的结构紧密对应。良好的优化 C 或 C++ 编译器能够生成与原始源代码相去甚远的程序集。
  4. Java 和 Python 编译器很少,C 和 C++ 编译器很多。如果您以单个已知编译器(或一小组已知编译器)为目标,则更容易生成高质量的反编译器。
  5. 与 C++ 相比,Python 和 Java 是相对简单的语言(这一点不适用于 C)。
  6. C++ 模板对质量反编译提出了许多挑战(这一点也不适用于 C)。
  7. C/C++ 预处理器。
  8. 在 Python 中,源文件和字节码文件之间存在一对一的关系。在 Java 中,关系是一个源与一个或多个字节码文件的关系。在 C 和 C++ 中,这种关系是多对多的,在源代码方面有很多重叠(想想 header )。

关于java - 使用调试信息反编译 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com