举例来说,我在地址 0xdeadbeef 处有一个 32 元素的无符号字符数组。我想覆盖内存中数组的内容。我没有使用 -g 进行编译,因此不能只执行“set [variable name] = [my value]”。
是否可以一次性设置内存的内容?
我见过有人尝试过set *((unsigned char*) 0xdeadbeef) = "abcdefghijklmnop",但这似乎不起作用。
或者,如果不可能(例如,因为 gdb 如何知道将其转换为十六进制 ascii 表示形式?),是否可以一次给出多个字节、单词等?例如,我可以只计算我想要数组表示的十六进制值,但是我可以一次性输入所有值吗?就像是:set 0xdeadbeef = 0x4142434445464748495051
还有一种方法可以在一个命令中写入 char 数组,而不需要像strcpy().
set *(char [CHAR_ARRAY_SIZE] *) <WRITE_ADDRESS> = "YOUR_CHAR_ARRAY"
Run Code Online (Sandbox Code Playgroud)
其中CHAR_ARRAY_SIZE是 的大小YOUR_CHAR_ARRAY加上额外的 NULL 字节(以 null 结尾的字符串)。
例如
set *(char [15] *) 0x20018000 = "Write a string"
Run Code Online (Sandbox Code Playgroud)