将字符串写入指针 C++
write string to pointer C++
我有一个 Dll,我将其注入到我的目标进程中。
此 Dll 会更改给定内存地址处的一些变量。
通常我会这样做:
int* variable = (int*)0x????????;
*variable = 1;
现在我想用字符串做同样的事情。
读取字符串有效。
string* variable = (string*) 0x????????;
但是更改字符串会使进程崩溃。
*variable = "hello world"; //crash
我该如何解决这个问题?
您没有说明如何保证地址 0x????????
处的内存被正确分配或字符串对象被初始化。
如果指针不指向已分配的内存,或者如果在 copy-assign 时字符串未初始化,则会出现未定义的行为。可能的未定义行为包括:
But changing the string crashes the process.
要修复它,请分配并初始化一个字符串对象并使用该字符串的地址。
您不能以这种方式使用 std::string
或任何其他非 POD 数据类型。您需要做的是:
char* variable = (char*) 0x????????;
strcpy( variable, "hello world" );
或其他,可能是 MS 特定函数来操作 C 字符串。
我有一个 Dll,我将其注入到我的目标进程中。 此 Dll 会更改给定内存地址处的一些变量。 通常我会这样做:
int* variable = (int*)0x????????;
*variable = 1;
现在我想用字符串做同样的事情。 读取字符串有效。
string* variable = (string*) 0x????????;
但是更改字符串会使进程崩溃。
*variable = "hello world"; //crash
我该如何解决这个问题?
您没有说明如何保证地址 0x????????
处的内存被正确分配或字符串对象被初始化。
如果指针不指向已分配的内存,或者如果在 copy-assign 时字符串未初始化,则会出现未定义的行为。可能的未定义行为包括:
But changing the string crashes the process.
要修复它,请分配并初始化一个字符串对象并使用该字符串的地址。
您不能以这种方式使用 std::string
或任何其他非 POD 数据类型。您需要做的是:
char* variable = (char*) 0x????????;
strcpy( variable, "hello world" );
或其他,可能是 MS 特定函数来操作 C 字符串。