C 在GDB中,能否将内存设置为字符数组?

C 在GDB中,能否将内存设置为字符数组?,c,arrays,gdb,C,Arrays,Gdb,比如说,我在地址0xdeadbeef有一个32元素的无符号字符数组。我想覆盖内存中数组的内容。我不是用-g编译的,所以不能只做一个集合[变量名]=[我的值] 可以一次设置所有内存的内容吗 我见过有人尝试set*unsigned char*0xdeadbeef=abcdefghijklmnop,但这似乎不起作用 或者,如果不可能,例如,因为gdb如何知道如何将其转换为十六进制ascii表示形式?是否可能一次给出多个字节、字等?例如,我可以只计算我希望数组表示的十六进制值,但我可以一次全部输入它吗?

比如说,我在地址0xdeadbeef有一个32元素的无符号字符数组。我想覆盖内存中数组的内容。我不是用-g编译的,所以不能只做一个集合[变量名]=[我的值]

可以一次设置所有内存的内容吗

我见过有人尝试set*unsigned char*0xdeadbeef=abcdefghijklmnop,但这似乎不起作用


或者,如果不可能,例如,因为gdb如何知道如何将其转换为十六进制ascii表示形式?是否可能一次给出多个字节、字等?例如,我可以只计算我希望数组表示的十六进制值,但我可以一次全部输入它吗?类似于:设置0xdeadbeef=0x4142434445464748495051发布此消息,以便问题有正式答案

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

调用strcpy0xdeadbeef,mystring


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

发布这篇文章只是为了让问题有一个正式的答案

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

调用strcpy0xdeadbeef,mystring


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

可以在一个命令中写入字符数组,而不使用标准函数,如strcpy


可以选择在一个命令中写入char数组,而不使用strcpy之类的标准函数


您的C库中没有memset或strcpy符号吗?没有。我正在调试一个已经编译过的程序,不能重新编译。如果我能做到这一点,我肯定会使用这些函数:对,但通常C库是动态链接的,因此即使程序的其余部分没有使用调试信息编译,您也可以访问符号名。啊,这是一个很好的观点。所以,只要让gdb调用它并直接传入内存地址,我就可以了?像这样的?调用memcpy0xdeadbeef,mycharacters,[mycharacters的]应该可以工作,是的。你可能需要一些强制类型转换来让每个人都高兴。你的C库中甚至没有memset或strcpy符号吗?没有。我正在调试一个已经编译好的程序,我不能重新编译。如果我能做到这一点,我肯定会使用这些函数:对,但通常C库是动态链接的,因此即使程序的其余部分没有使用调试信息编译,您也可以访问符号名。啊,这是一个很好的观点。所以,只要让gdb调用它并直接传入内存地址,我就可以了?像这样的?调用memcpy0xdeadbeef,mycharacters,[mycharacters的]应该可以工作,是的。你可能需要一些演员来让每个人都开心。
set *(char [CHAR_ARRAY_SIZE] *) <WRITE_ADDRESS> = "YOUR_CHAR_ARRAY"
set *(char [15] *) 0x20018000 = "Write a string"