编写伪MIPS汇编程序和fwrite进行二进制编码
问题描述:
我正在编写高级MIPS汇编程序。我在试图让fwrite正确输出时遇到麻烦。一个例子汇编文件看起来是这样的:编写伪MIPS汇编程序和fwrite进行二进制编码
.text
addi $t0,$0,7
addi $t1,$0,1
L1:
beq $t0,$0,DONE
mult $t1,$t0
mflo $t1
addi $t0,$t0,-1
j L1
DONE:
add $a0,$0,$t1
addi $v0,$0,1
syscall
addi $v0,$0,10
syscall
我的代码应该将这些转换为32位的二进制指令和fwrite他们到一个文件由人造CPU读取。
我有一个问题,在文件开头的32位分隔符应该是0xf0f0f0f0。我知道你不能“读”一个二进制文件,但是看看我有的示例文件,在用fwrite写入分隔符后,分隔符代表/ 360/360/360/360。为什么当我编写自己的文件时(如何使用fwrite来实现此目的以创建其他二进制文件),我将如何复制该行为?
答
的fwrite(3)
为您的分隔符应该是这样的:
unsigned int delim = 0xF0F0F0F0;
fwrite(&delim, sizeof delim, 1, output);
这写delim
的大小的一个对象标准C流output
。
您可以使用od(1)
或xxd(1)
“读”二进制文件:
$ od -bc /etc/passwd
0000000 162 157 157 164 072 170 072 060 072 060 072 162 157 157 164 072
r o o t : x : 0 : 0 : r o o t :
$ xxd /etc/passwd
0000000: 726f 6f74 3a78 3a30 3a30 3a72 6f6f 743a root:x:0:0:root:
0000010: 2f72 6f6f 743a 2f62 696e 2f62 6173 680a /root:/bin/bash.
(该hexer(1)
程序(在hexer
软件包在Ubuntu)是很多像一个互动xxd(1)
,您可能会发现一些有用的一天。)
这很有用,但是fwrite需要一个指向数组的指针作为第一个参数,而不是一个int值 – mathjacks 2011-12-31 18:10:58
@flapjackery:然后使用&delim代替delim – BlackBear 2011-12-31 20:12:37
男人,我觉得很傻。 :) – sarnold 2011-12-31 23:37:33