系统相关
首页 > 系统相关> > Linux Binutils使用’as’组装Mips

Linux Binutils使用’as’组装Mips

作者:互联网

我提取了要进行反向工程的D-Link固件.

我以前没有关于Mips的经验.我已经下载了火星以学习Mips.但是,现在我有了Mips的正当性,我想构建机器代码.我可以将其从火星导出为转储文件,而radare2可以很好地对其进行分解,但是我更喜欢使用终端实用程序.

我听说可以这样做,但是在-march下没有mips32,mips1,mips2等选项.

我已经遍历谷歌,看看为什么会这样,但到目前为止没有成功.有人可以让我走上正确的道路,以正确启用这些功能吗?

非常感谢帮忙.

解决方法:

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

test.asm:

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

使用您的asm文件,执行以下操作以通过安装spim将其汇编到机器代码中,该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更准确:

首先下载DTChere.*注意:之所以必须这样做,是因为设置qemu的方式是,它仅在DTC文件夹中包含的文件夹中查找DTC,该文件夹随附的源不在/usr/lib或/ usr /中.包括等

让我们开始编译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组装所需的东西:

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

标签:assembly,mips,gas,linux,reverse-engineering
来源: https://codeday.me/bug/20191119/2039588.html