Linux Binutils 使用 'as' 至 assemble Mips
Linux Binutils using 'as' to assemble Mips
我提取了 D-Link 固件,我正试图对其进行逆向工程。
我以前没有任何使用 Mips 的经验。我已经下载了 Mars 来学习 Mips。但现在我有点了解 Mips,我想构建机器代码。我可以将它作为转储从火星导出,radare2 可以很好地反汇编它,但我更喜欢终端实用程序。
我听说 as
可以做到这一点,但是它在 -march
下没有针对 mips32、mips1、mips2 等的选项。
我仔细阅读 Google 以了解为什么会这样,但到目前为止没有成功。有人可以让我走上正确的道路以正确启用 as
中的这些功能吗?
非常感谢您的帮助。
我在头痛之后找到了解决方案,但这对于那些希望在 linux 上快速学习 mips 的人来说非常有用。
test.asm:
.text
main:
li $t1, 100
li $t2, 50
add $t3, $t1, $t2
li $t4, 25
使用您的 asm 文件执行以下操作,通过安装 spim 将其 assemble 转换为机器代码,奇怪的是,mips 向后拼写:
apt-get update
apt-get install spim
spim
(spim) load "test.asm"
(spim) dumpnative "test.bin"
这将为您转储包含机器代码的 bin 文件。是的,您需要在文件名周围加上引号,否则 spim 会出错。
要取消assemble您的代码,请执行以下操作:
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
按照所有提示进行操作并根据您的喜好进行安装。
要引导进入 Debian Squeeze 运行 模拟 mips,请执行以下操作:
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文件assemble它和disassemble它并比较代码。
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 有时不匹配。
您的 disassembler 将对其进行最佳解释并输出汇编指令,根据反编译器,有些指令可能看起来不完全相同,但它对大多数指令都非常有效,并且仍然应该有效。
这很棒的原因是您不必打开火星即可执行此操作。 Mars 是模拟获取 mips 机器代码的好工具,但 spim 和 qemu 当然是轻量级的,并为您将其保存在终端中。我希望这对其他人也有帮助。
--lillypad
我提取了 D-Link 固件,我正试图对其进行逆向工程。
我以前没有任何使用 Mips 的经验。我已经下载了 Mars 来学习 Mips。但现在我有点了解 Mips,我想构建机器代码。我可以将它作为转储从火星导出,radare2 可以很好地反汇编它,但我更喜欢终端实用程序。
我听说 as
可以做到这一点,但是它在 -march
下没有针对 mips32、mips1、mips2 等的选项。
我仔细阅读 Google 以了解为什么会这样,但到目前为止没有成功。有人可以让我走上正确的道路以正确启用 as
中的这些功能吗?
非常感谢您的帮助。
我在头痛之后找到了解决方案,但这对于那些希望在 linux 上快速学习 mips 的人来说非常有用。
test.asm:
.text
main:
li $t1, 100
li $t2, 50
add $t3, $t1, $t2
li $t4, 25
使用您的 asm 文件执行以下操作,通过安装 spim 将其 assemble 转换为机器代码,奇怪的是,mips 向后拼写:
apt-get update
apt-get install spim
spim
(spim) load "test.asm"
(spim) dumpnative "test.bin"
这将为您转储包含机器代码的 bin 文件。是的,您需要在文件名周围加上引号,否则 spim 会出错。
要取消assemble您的代码,请执行以下操作:
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
按照所有提示进行操作并根据您的喜好进行安装。
要引导进入 Debian Squeeze 运行 模拟 mips,请执行以下操作:
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文件assemble它和disassemble它并比较代码。
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 有时不匹配。
您的 disassembler 将对其进行最佳解释并输出汇编指令,根据反编译器,有些指令可能看起来不完全相同,但它对大多数指令都非常有效,并且仍然应该有效。
这很棒的原因是您不必打开火星即可执行此操作。 Mars 是模拟获取 mips 机器代码的好工具,但 spim 和 qemu 当然是轻量级的,并为您将其保存在终端中。我希望这对其他人也有帮助。
--lillypad