c++ - 调试构建如何使逆向工程变得容易?

标签 c++ debugging reverse-engineering

这里的一些回答指出,调试信息将使对软件进行逆向工程变得更加容易。当我使用 Visual C++ 并分发带有调试信息但没有其他文件 (.pdb) 的可执行文件时,它会包含任何有趣的东西吗?

我用十六进制编辑器查看了可执行文件,没有发现任何类似符号名称的东西,现在我假设 .exe 文件只是链接到 .pdb 文件中的信息,对吧?

你知道它是否包含

  • 变量名?
  • 函数/成员名称?
  • 行号?
  • 有什么有趣的事吗?

最佳答案

调试构建往往会生成可以轻松与高级语言结构相关联的输出。只需查看机器代码,您就可以识别变量、测试、循环等。您不会获得变量名称,但这通常是逆向工程中最不重要的考虑因素之一。

优化代码、OTOH、重新排列指令、展开循环、为多个变量重用插槽、在函数之间共享代码块、内联小函数等等,这使得辨别原始意图变得相当困难。这也使调试变得更加困难,即使您拥有代码也是如此,因为当前行标记通常非常具有误导性,并且变量往往会消失或显示随机废话。

不过,这些都不能使逆向工程成为不可能。只是需要更多的工作来梳理出含义。

关于c++ - 调试构建如何使逆向工程变得容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4375334/

相关文章:

c++ - C++ 中的部分 const 类型转换

c++ - 仅允许在 QDoubleValidator 的范围内进入 QLineEdit

c++ - 无法在 Linux 上读取 DDS 图像 header

ruby-1.9.3-preview1 上的 ruby​​-debug19

c++ - 逆向工程的汇编语言

javascript - 从 JavaScript 访问 Linux 诊断信息

c++ - 调试段错误

.net - 如何中断无效的跨线程错误

c - 这个哈希函数是什么?

debugging - ARM 中 DWARF 信息中的局部变量位置