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