如何更改数组中每个名称和姓氏的值?所以当我尝试在控制台中打印它们时,它们不会输出任何内容,例如:
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"
我正在尝试做的是在运行程序时“擦除”每个数组的数据,以便我可以选择何时擦除它们。
答案 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),但不是在第一个位置写零,而是保持写零,因为在目的地有非零内容。