【发布时间】:2021-02-17 19:23:18
【问题描述】:
在我的一个 CS 课程中,我的老师叫我参加一个缩放会议,并指责我将我的 C 代码反编译成 AT&T x64 汇编语言。我没有反编译我的代码,所以我很困惑。
有没有办法区分手写代码和反编译代码?我想知道,这样我就不会意外地以似乎被反编译的方式编写代码......
【问题讨论】:
-
反编译将汇编转换为C,但您似乎在谈论相反的事情,这只是“编译”。
-
@NateEldredge:他本可以通过编译器运行它,然后通过反汇编程序。
-
@Joshua:这仍然不涉及任何反编译。您可以从 C 源代码开始,编译为机器代码或 asm,反编译为 C 或 C++,然后再次编译……或者您可以从手写 asm 开始,反编译为 C 或 C++,然后在尝试优化你的 asm。
-
我很想看看您的手写汇编,以及您的教授指出的作为指标的标志是编译器输出(这似乎是您所说的)。如果它是手写的,我很可能会指出 GCC 或 clang 永远不会发出它的多个迹象。绝大多数学生编写的 asm 都充满了简单但轻微遗漏的优化,例如在只需要 32 位时使用 64 位操作数大小。 (尽管公平地说,GCC 在编译不必要地使用
unsigned long或其他任何内容的源时,通常无法进行值范围分析。)
标签: c assembly x86-64 compiler-optimization