目前我在一个基于 x64 的系统上并且已经做了一段时间的逆向工程。但是我仍然是一个新手,我一直遇到的最大问题是内存布局差异。显然 x64 使用不同的寄存器(rax
=>eax
等),并为程序分配更多内存。我使用了免疫调试器,它似乎运行得比较好,但是当我在我的 Linux 机器上尝试调试/反汇编时很痛苦。我最好的选择是使用基于 x86 的 VM 或类似的东西吗?
只是一般的建议将不胜感激。谢谢!
目前我在一个基于 x64 的系统上并且已经做了一段时间的逆向工程。但是我仍然是一个新手,我一直遇到的最大问题是内存布局差异。显然 x64 使用不同的寄存器(rax
=>eax
等),并为程序分配更多内存。我使用了免疫调试器,它似乎运行得比较好,但是当我在我的 Linux 机器上尝试调试/反汇编时很痛苦。我最好的选择是使用基于 x86 的 VM 或类似的东西吗?
只是一般的建议将不胜感激。谢谢!
使用 32 位系统可能是最简单的解决方案,您可以使用gdbserver从主系统进行调试。但是,随着 32 位系统逐渐消失,您可能会从学习 x64 中受益。除了不同的寄存器名称/大小以及由于堆栈大小固定而将参数传递给函数的方式之外,没有太大区别,一段时间后您会习惯它。
大多数 x86_64 操作系统提供了一些运行 32 位代码的机制。只要您安装了必要的库,99% 的时间一切都将在您的标准 GDB 中工作 - 无需更改。我在 64 位上调试 32 位应用程序从来没有遇到任何问题,而且工作流程对我来说是透明的,前提是我正确设置了 multilib。
话虽如此,如果您愿意,总是可以使用 32 位虚拟机。或者,正如其他人所提到的,您可以在专用的 32 位测试机器上通过网络进行调试。
另外,我建议编辑您的问题,以明确您在谈论 x86 与 amd64 - 在具有 32 位和 64 位版本的其他架构上,答案可能会有所不同(诚然,我不知道这些)。编辑:无视 - 我看到你写了 x64。猜猜我的眼睛只是盯着 x...