Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将内存读入字符串_C#_Readprocessmemory - Fatal编程技术网

C# 将内存读入字符串

C# 将内存读入字符串,c#,readprocessmemory,C#,Readprocessmemory,我知道进程的所有信息以及我想读取的地址,但我不知道如何使用Readprocessmemory函数。我需要添加一些用法还是什么? 我用C++做了这个,但是我怎么能在C?< /P>里做呢? char*ReadMemoryText(DWORD地址,整数大小) { 字符率[大小]; DWORD processId; HWND HWND=FindWindow(“WindowX”,NULL); 如果(胫骨!=NULL) { GetWindowThreadProcessId(hwnd和processId);

我知道进程的所有信息以及我想读取的地址,但我不知道如何使用Readprocessmemory函数。我需要添加一些用法还是什么? 我用C++做了这个,但是我怎么能在C?< /P>里做呢?
char*ReadMemoryText(DWORD地址,整数大小)
{
字符率[大小];
DWORD processId;
HWND HWND=FindWindow(“WindowX”,NULL);
如果(胫骨!=NULL)
{
GetWindowThreadProcessId(hwnd和processId);
HANDLE phandle=OpenProcess(PROCESS_VM_READ,0,processId);
如果(!幻影)
{

cout这里是一个使用C#从内存中读取字符数组的示例。在本例中,它是来自攻击立方体的本地玩家的名称字符串

[DllImport(“kernel32.dll”,SetLastError=true)]
公共静态外部bool ReadProcessMemory(
IntPtr hProcess,IntPtr lpBaseAddress,字节[]lpBuffer,Int32 nSize,out IntPtr lpNumberOfBytesRead);
var nameAddr=ghapi.FindDMAAddy(hProc,(IntPtr)(modBase2+0x10f4f4),新的int[]{0x225});
字节[]名称=新字节[16];
ghapi.ReadProcessMemory(hProc,nameAddr,name,16,out);
WriteLine(Encoding.Default.GetString(name));
我们使用pinvoke访问从kernel32.dll导出的ReadProcessMemory

我们使用FindDMAAddy来获取name变量的地址。char数组的大小固定为16字节

我们使用ReadProcessMemory使用源变量和目标变量,大小为16,最后一个参数我们只使用“out”\ux,因为我们不关心ByteRead参数

然后,我们需要将该字符数组转换为使用encoding.Default.GetString()的正确编码的字符串类型

然后将该行写入控制台。

可能重复的
    char* ReadMemoryText(DWORD address,int size)
    {
        char ret[size];
        DWORD processId;
        HWND hwnd = FindWindow("WindowX",NULL);
        if(tibia!=NULL)
        {
            GetWindowThreadProcessId(hwnd,&processId);
            HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, processId);
            if(!phandle)
            {
                cout<<GetLastError()<<endl;
                cout <<"Could not get handle!\n";
                cin.get();
            }
            ReadProcessMemory(phandle, (LPVOID)address, &ret,size,0);
            char * rt = ret;
            for(int i=0;i<size && ret[i]!=0;++i)
                cout << ret[i];
            return rt;
        }
        return NULL;
    }