首页 > 解决方案 > C# .NET 读取所有进程的问题

问题描述

我正在使用我正在研究的扫描引擎,并且正在尝试读取进程的内存。我的代码在下面(有点乱),但是由于某种原因,如果我读取处于不同状态的应用程序的内存,或者在它有很多东西加载到内存之后,无论如何我都会得到相同的内存大小。我的入口点地址和长度不正确吗?

如果我使用内存编辑器,我不会得到与此相同的结果。

        Process process = Process.GetProcessesByName(processName)[0];
        List<Byte[]> moduleMemory = new List<byte[]>();

        byte[] temp;

            //MessageBox.Show(pm.FileName);
            temp = new byte[pm.ModuleMemorySize];
            int read;

            if (ReadProcessMemory(process.Handle, pm.BaseAddress, temp, temp.Length, out read)) {
                moduleMemory.Add(temp);
            }
        }
        //string d = Encoding.Default.GetString(moduleMemory[0]);
        MessageBox.Show("Size: " + moduleMemory[0].Length);

标签: c#.netmemory

解决方案


正如我所看到的,这段代码只不过是读取为其创建进程的可执行模块(.exe 文件)的内存布局。所以难怪你总是得到相同的尺寸。

我假设您已准备好阅读该过程的“操作”内存。如果是这样,你应该看看这个讨论


推荐阅读