在GDB中,你可以将内存设置为char数组吗?

时间:2014-09-26 16:57:37

标签: c arrays gdb

比如说我在地址0xdeadbeef处有一个32元素的unsigned char数组。我想在内存中覆盖数组的内容。我不是用-g编译的,所以不能只做一个"设置[变量名] = [我的值]"。

是否可以一次性设置内存的内容?

我看过有人尝试set *((unsigned char*) 0xdeadbeef) = "abcdefghijklmnop",但这似乎不起作用。

或者,如果它不可能(例如,因为gdb如何知道将其转换为十六进制ascii表示?),是否可以同时提供多个字节,单词等?例如,我可以只计算我希望数组表示的十六进制值,但是我可以一次性地提供它吗?类似于:set 0xdeadbeef = 0x4142434445464748495051

2 个答案:

答案 0 :(得分:2)

(发布此问题只是一个“官方”答案)

卡尔在评论中的陈述是完全正确的。您可以在gdb中执行以下操作:

call strcpy(0xdeadbeef, "mystring")

这适用于静态链接的C库(memset,strncpy等)中包含的任何函数。

答案 1 :(得分:1)

可以使用一个命令编写char数组,而不使用strcpy()之类的标准函数。

set *(char [CHAR_ARRAY_SIZE] *) <WRITE_ADDRESS> = "YOUR_CHAR_ARRAY"

其中CHAR_ARRAY_SIZEYOUR_CHAR_ARRAY的大小加上多余的NULL字节。

例如

set *(char [15] *) 0x20018000 = "Write a string"