首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux Binutils使用“as”组装Mips

Linux Binutils使用“as”组装Mips
EN

Stack Overflow用户
提问于 2015-08-12 13:40:24
回答 2查看 613关注 0票数 4

我提取了D固件,我正试图反向工程。

我以前和Mips没有任何经验。我下载了火星来学习Mips。但是现在我得到了Mips的正义,我想要构建机器代码。我可以导出它从火星作为一个转储和radare2反汇编它只是很好,但我更喜欢终端实用程序。

我听说as能够做到这一点,但是它在-march下没有选择mips32、mips1、mips2等。

我已经在谷歌( Google )里翻来覆去,看看为什么会这样,但到目前为止还没有成功。有人能让我走上正确的道路,让as中的这些特性正确地启用吗?

非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-12 16:48:52

我在头痛之后找到了一个解决方案,但是对于那些希望在linux上快速学习mips的人来说,这是很好的。

test.asm:

代码语言:javascript
复制
.text
main:
li $t1, 100
li $t2, 50
add $t3, $t1, $t2
li $t4, 25

使用asm文件,通过安装spim (奇怪的是,mips向后拼写),将其组装到机器代码中如下:

代码语言:javascript
复制
apt-get update
apt-get install spim
spim
(spim) load "test.asm"
(spim) dumpnative "test.bin"

这将为您转储带有机器代码的bin文件。是的,你需要引号周围的文件名称,否则spim将抛出一个麻烦。

要反汇编代码,请执行以下操作:

代码语言:javascript
复制
apt-get update
apt-get install radare2
radare2 -a mips test.bin
[0x00000000]>b 32
[0x00000000]>aa
[0x00000000]>af
[0x00000000]>pd

尽管这是使用qemu快速完成此操作的一种方法,而且它比spim更精确:

首先下载DTC 这里。*注意:之所以必须这样做,是因为qemu的设置方式只在包含在DTC文件夹中的文件夹中查找DTC,而源不在/usr/lib或/usr/include等。

让我们开始编译qemu:

代码语言:javascript
复制
apt-get update
apt-get -y install git build-essential
git clone git://git.qemu-project.org/qemu.git
tar -xzvf dtc-1760e7c.tar.gz
cd dtc-1760e7c
cp * ../qemu/dtc
cp -r Documentation/ ../qemu/dtc
cp -r libfdt/ ../qemu/dtc
cp -r scripts/ ../qemu/dtc
cp -r tests/ ../qemu/dtc
cd ..
cd qemu/dtc
make
cd ..
./configure
make
make install

安装了qemu之后,现在让我们创建一个虚拟机,qemu可以使用它,它将是Debian挤压的mips版本。

首先,让我们获取所需的文件:

代码语言:javascript
复制
wget http://ftp.de.debian.org/debian/dists/squeeze/main/installer-mips/current/images/malta/netboot/initrd.gz
wget http://ftp.de.debian.org/debian/dists/squeeze/main/installer-mips/current/images/malta/netboot/vmlinux-2.6.32-5-4kc-malta

现在为qemu制作虚拟驱动器:

代码语言:javascript
复制
qemu-img create -f qcow2 debian_mips.qcow2 2G

运行安装程序:

代码语言:javascript
复制
qemu-system-mips -hda debian_mips.qcow2 -kernel vmlinux-2.6.32-5-4kc-malta -initrd initrd.gz -append "root=/dev/ram console=ttyS0" -nographic

按照所有提示并根据您的喜好安装。

要引导到Debian压缩,运行模拟mips,请执行以下操作:

代码语言:javascript
复制
qemu-system-mips -hda debian_mips.qcow2 -kernel vmlinux-2.6.32-5-4kc-malta -append "root=/dev/sda1 console=ttyS0" -nographic

在此处使用凭据登录时,您在安装过程中安装并执行以下操作以安装ssh,以便于使用:

代码语言:javascript
复制
apt-get update
apt-get -y install ssh

关闭qemu的这个实例并用以下方法启动另一个实例:

代码语言:javascript
复制
qemu-system-mips -hda debian_mips.qcow2 -kernel vmlinux-2.6.32-5-4kc-malta -append "root=/dev/sda1 console=ttyS0" -nographic -redir tcp:10022::22

连接到ssh,在主机上执行以下操作:

代码语言:javascript
复制
ssh -p 10022 localhost

现在,一旦登录,让我们现在安装我们需要做的事情mips程序集:

代码语言:javascript
复制
apt-get update
apt-get -y install build-essential gdb

现在,让我们编写一个简单的mips文件,组装和反汇编它,并比较代码。

代码语言:javascript
复制
nano test.asm

--start test.asm--
.global __start
.text
__start:
li $t0, 100
li $t1, 50
add $t2, $t0, $t1
--end test.asm--

CTRL + O, CTRL + X

as -march=mips32 -o test.o test.asm
objdump -d test.o

--start objdump output--
0:  24080064    li  t0,100
   4:   24090032    li  t1,50
   8:   01095020    add t2,t0,t1
   c:   00000000    nop
--end objdump output--

您可以看到,我们确实以这种方式获得了精确的命令,因为spim有时与之不匹配。

您的反汇编程序将解释它的最佳,并输出组装指令,有些可能看起来不完全一样,根据反编译,但它的工作非常好,大多数指令,仍然应该是有效的。

这很棒的原因是你不需要让火星打开来做这件事。Mars是一个很好的工具,可以模拟获得mips的机器代码,但是spim和qemu无疑是轻量级的,并将其保存在终端中。我希望这对其他人也有帮助。

-利勒帕德

票数 3
EN

Stack Overflow用户

发布于 2022-10-09 09:42:18

现在,这似乎更直接了,例如在Debian 11中:

代码语言:javascript
复制
sudo apt install binutils-mips-linux-gnu

mips-linux-gnu-as -o test.o test.asm
mips-linux-gnu-objdump -d test.o

输出:

代码语言:javascript
复制
test.o:     file format elf32-tradbigmips


Disassembly of section .text:

00000000 <__start>:
   0:   24080064        li      t0,100
   4:   24090032        li      t1,50
   8:   01095020        add     t2,t0,t1
   c:   00000000        nop

还提供其他三胞胎:

代码语言:javascript
复制
binutils-mips-linux-gnu
binutils-mips64-linux-gnuabi64
binutils-mips64-linux-gnuabin32
binutils-mips64el-linux-gnuabi64
binutils-mips64el-linux-gnuabin32
binutils-mipsel-linux-gnu
binutils-mipsisa32r6-linux-gnu
binutils-mipsisa32r6el-linux-gnu
binutils-mipsisa64r6-linux-gnuabi64
binutils-mipsisa64r6-linux-gnuabin32
binutils-mipsisa64r6el-linux-gnuabi64
binutils-mipsisa64r6el-linux-gnuabin32
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31966951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档