Linux Binutils使用'as'来组装Mips

时间:2015-08-12 13:40:25

标签: linux assembly mips reverse-engineering gas

我已经提取了我试图逆向工程的D-Link固件。

我以前没有Mips的经验。我已经下载了火星来学习Mips。但是现在我有点想要Mips,我想建立机器代码。我可以将它作为转储从火星中导出并且radare2将其拆解得很好但是我更喜欢终端实用程序。

我听说as能够做到这一点,但是对于mips32,mips1,mips2等,-march下没有选项。

我已经撕破谷歌,看看为什么到目前为止并没有成功。有人可以让我在正确的路径上正确启用as中的这些功能吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

TEST.ASM:

.text
main:
li $t1, 100
li $t2, 50
add $t3, $t1, $t2
li $t4, 25

使用你的asm文件执行以下操作,通过安装spim将它组装到机器代码,这是一个奇怪的mips向后拼写:

apt-get update
apt-get install spim
spim
(spim) load "test.asm"
(spim) dumpnative "test.bin"

这将使用机器代码转储bin文件。是的,您需要围绕文件名称或spim的引号才能使用。

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

apt-get update
apt-get install radare2
radare2 -a mips test.bin
[0x00000000]>b 32
[0x00000000]>aa
[0x00000000]>af
[0x00000000]>pd

虽然这是使用qemu快速完成此操作的方法,但它比spim更准确:

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

让我们开始编译qemu:

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 Squeeze的mips版本。

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

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创建虚拟驱动器:

qemu-img create -f qcow2 debian_mips.qcow2 2G

运行安装程序:

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

按照所有提示进行操作并按照您的喜好进行安装。

要启动运行模拟mips的Debian Squeeze,请执行以下操作:

qemu-system-mips -hda debian_mips.qcow2 -kernel vmlinux-2.6.32-5-4kc-malta -append "root=/dev/sda1 console=ttyS0" -nographic

在此处使用您在安装期间设置的凭据登录并执行以下操作以设置ssh以便于使用:

apt-get update
apt-get -y install ssh

关闭此qemu实例并使用以下命令启动另一个实例:

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,在主机上执行以下操作:

ssh -p 10022 localhost

现在登录后,现在安装我们需要做的事情mips assembly:

apt-get update
apt-get -y install build-essential gdb

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

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有时并不匹配。

您的反汇编程序会将其解释为最佳并输出汇编指令,但根据反编译程序可能看起来并不完全相同,但它对大多数指令都非常有用,但仍然有效。

这很好的原因是你不必让火星开放这样做。火星是一个很好的工具来模拟获取mips的机器代码,但spim和qemu肯定是轻量级的,并将它保存在终端中。我希望这也有助于其他人。

- lillypad