C# C内存结构指针
我正在开发一个内存读写器类,但我被它卡住了。 我的问题是,我想用结构指针修改其他进程内存值。 我知道如何用C++做,但不能用c</p> 我目前的代码是:C# C内存结构指针,c#,C#,我正在开发一个内存读写器类,但我被它卡住了。 我的问题是,我想用结构指针修改其他进程内存值。 我知道如何用C++做,但不能用c 我目前的代码是: class CModifier { struct Data { int iMember; float fMember; } public CModifier() { Data data[62]; *data = 0x123456;
class CModifier
{
struct Data
{
int iMember;
float fMember;
}
public CModifier()
{
Data data[62];
*data = 0x123456;
// use them to modify values etc.
data.fMember = 1.2345f;
}
}
C确实允许对内存位置进行有限的访问,但实际上并不推荐这样做,而且只有在您知道其他系统(如垃圾收集)如何处理内存后,才应该尝试这样做。引用运算符&和反引用运算符*用于访问内存。您还必须在方法声明中使用不安全关键字。例如:
public unsafe void Method()
{
int x = 10;
int y = 20;
int *ptr1 = &x;
int *ptr2 = &y;
Console.WriteLine((int)ptr1);
Console.WriteLine((int)ptr2);
Console.WriteLine(*ptr1);
Console.WriteLine(*ptr2);
}
注意到还有其他更高级的事情要考虑,比如将内存位置钉住以阻止垃圾收集器在内存中移动对象,以及这个过程对堆栈堆的影响。
底线,使用指针引用,你自己的风险,只是作为最后的手段。
< P>我感觉C++专业人士会因为不使用正确的技术术语而抨击我的帖子,但是哦,好吧。 C有一个“不安全”修饰符,您可以使用它来调整指针代码,但在另一个位置修改结构的更好选项是“ref”关键字 <>我不能说——确切地说,你想完成的事情可以在C中完成,我不确定我会用C++理解它,但下面是我要怎么做的,正如你所描述的。void ChangeMyStruct(ref Data etc) {
data.fMember = 1.2345f;
}
void mainMethod() {
ChangeMyStruct(ref dataOne);
}
*data=0x123456是无意义的,即使在C/C++.*data=0x123456;你想在这里实现什么?我错过了一些东西。另一个过程是从它的地址空间向您传递一个块,您正在处理它并将其传递回?C的全部要点是可读性。坚持使用数据[a+b+c]。如果你想有安全整数,浮点联合。。。你也可以吃。@leppie不,不是。。。他只是给指针的解引用设置了一个十六进制值。在你的答案前面加上语义等价物“我不知道我在说什么,但不管怎么说,这里有。这是一个大的红旗,你不应该试图回答这个问题。@ PieGeelkkes,我主要说我不知道C++,但是我相信我知道解决他的问题的有效方法是用他所问的语言。像Horton大象:说你的意思,“你说的话是真的。”PieGeelkks'我不确定我会用C++理解它——像这样。你的批评毫无帮助。