MIPS,擦除或转动空数组数据

时间:2016-06-03 17:45:39

标签: assembly mips

如何更改数组中每个名称和姓氏的值?所以当我尝试在控制台中打印它们时,它们不会输出任何内容,例如:

First Array:

name1

surname1

.data



DATA:    .word data1,data2,data3

data1:   .word nome1,cognome1
name1:       .asciiz "john"
surname1:    .asciiz "cena"


data2:    .word nome2,cognome2
name2:       .asciiz "giorno"
surname2:    .asciiz "giovana"


data3:   .word nome3,cognome3
name3:       .asciiz "nikola"
surname3:    .asciiz "tesla"

我正在尝试做的是在运行程序时“擦除”每个数组的数据,以便我可以选择何时擦除它们。

1 个答案:

答案 0 :(得分:1)

在许多不同的方面,但基本上两个主要是:

1).asciiz ..你检查过,它是如何编译成字节本身的?我认为它是"零终止字符串",所以.asciiz "AB"被编译成三个字节65, 66, 0

现在,如果要显示而不是名称空字符串,请将其设置为空字符串,即在字符串的第一个位置写入零,从而将前一个字节数组的内容更改为0, 66, 0。这当然会永远损坏数据。

2)如果你想保持原始名字在内存中的完整性,你的2级深指针结构(DATA-> data1-> string)你可以有一些空字符串,如empty: .asciiz "",并修改data1结构中的指针。因此,从data1: .word nome1,cognome1您可以将该内存的内容修改为data1: .word empty,empty

在任何一种情况下,您都必须识别要覆盖的内存(即加载data1或特定字符串的地址),并在该地址存储零字节(如果要覆盖字符串)或空字符串的地址(如果你正在覆盖名字指针)。

之后只是像以前一样显示事物,新的修改后的内存内容看起来就像是从人的角度删除了名称。

顺便说一句,如果您要使用敏感数据做某些事情,在某些安全应用程序中,覆盖整个名称字符串是有意义的,即。从65, 66, 0转到0, 0, 0,因此在擦除过程后,当您转储内存内容时,将没有原始名称的痕迹(第三个选项,如何擦除它们,非常相似) 1),但不是在第一个位置写零,而是保持写零,因为在目的地有非零内容。