【问题标题】:MIPS Disassembly on a x86 machine using GDB; possible?使用 GDB 在 x86 机器上进行 MIPS 反汇编;可能的?
【发布时间】:2012-07-17 11:50:48
【问题描述】:

我有一台 x86 开发机器并为 mips 开发内核模块。我想反汇编一个例程来查找模块的问题。

所以我的问题是 “我可以在 x86 机器上拆解它,否则我必须得到 MIPS 开发机器?”

我试过了,但它在 x86 指令集中反汇编。

【问题讨论】:

  • 如果您使用的是预构建的工具链,它可能已经包含了 gdb 的交叉编译版本。如果没有,您可以按照下面的答案中所述构建自己的。

标签: c assembly gdb x86 mips


【解决方案1】:

你基本上需要某种形式的cross compilation。交叉编译器将允许您在主机(在您的情况下为 x86)上为目标机器(在您的情况下为 MIPS)编译。因此,您将能够从您的 x86 机器生成 MIPS 二进制文件。此外,您还将获得与编译器相关的所有其他工具,例如objdump。这里有how to build a cross compiler for GCC 的指南。

假设您使用objdump 反汇编二进制文件,您可能不需要构建交叉编译器。 objdump 属于 binutils 并且可能只编译 binutils 以使用 MIPS 作为目标(我从未尝试创建 binutils 的跨平台构建,所以我不是 100% 确定)。

编辑:我刚刚又读了一遍标题,发现您使用的是gdb。在这种情况下,我相信您需要创建一个完整的交叉编译器,并创建一个跨平台版本的gdb

【讨论】:

  • opencores.org/project,mpx mpx 核心是 mips 克隆,浏览 repo trunk/gcc/build_gcc_linux.zip 有一个构建脚本。这些补丁只是删除了 mpx 不支持的指令,您不需要应用它们。它构建了一个 gdb 以及其他工具,您可以使用这些工具进行反汇编。不需要 gdb 来反汇编 binutils BTW。
  • 但在交叉编译的情况下,我将不得不在 MIPS 机器上执行实用程序。据我了解,交叉编译是“在架构 1 上编译代码以在架构 2 上运行”而不是“在架构 1 上编译代码以在架构 1 上运行并为架构 2 工作”
  • OBJDUMP 解决方案有效。它现在清楚地显示了 mips 指令集和寄存器。谢谢 !!你们太棒了。
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2013-08-04
  • 2010-12-07
  • 2014-03-15
  • 1970-01-01
  • 2010-12-16
相关资源
最近更新 更多