c - 逆向工程——使用调试信息进行编译

标签 c debugging gcc reverse-engineering reversing

我正在学习如何逆向一个程序,我想知道..如果我用调试信息编译:

gcc -g ....

这对逆向过程有什么帮助吗?如果我这样做,我会提供额外的信息吗?我找不到有关该主题的任何信息。

最佳答案

它通过将行号、文件名、宏定义等添加到生成的二进制文件中来提供帮助。但是,它不包括程序本身内部的程序的完整源代码。

下面是结果文件中包含宏定义的示例:

username@localhost /path/to/source/code $ gcc test.c -Wall -Wextra -gdwarf-4 -g3
username@localhost /path/to/source/code $ grep __STDC_VERSION__ a.out 
Binary file a.out matches

在使用-g3编译时,调试信息对于反编译更有用,如上例所示。

因此,您的问题的答案是:它提供了一些可能对反编译有用的额外信息,但不足以成功反编译和重新编译程序。如果可能,请将源代码提供给此人。

如果你想防止反编译你的代码,只需在构建和调试你的程序后像这样运行 strip:

strip program-file

-g 不应影响代码生成,它只是将仅对调试器有用的信息添加到生成的程序文件中。

如果您想禁止他人反汇编或反编译您的软件,只需将其包含在您的许可证中即可。

关于c - 逆向工程——使用调试信息进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776485/

相关文章:

C - 将值插入到结构中

c - 平方数但保留符号(在 c 中)

c++ - 在 codelite 中调试 C++

c - Valgrind 提示 "Invalid write of size 8"

c - short 用作长度修饰符的 h 的缩写是什么?

c - Allegro 5.2 编译错误

windows - 如何找到其他进程

c++ - 静态常量匿名 union 使用 GCC 4.9.3 给出 "uninitialized const"错误

c - Ansi C 中的 Netdb.h

php - 使用 PHP 执行 FFMPEG shell - 由于 GCC 导致的异常错误