gpt4 book ai didi

c# - 如何找到进程的开始和结束内存?

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:15 26 4
gpt4 key购买 nike

这是我的 Form1 代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace ReadMemory
{
public partial class Form1 : Form
{
List<int> memoryAddresses = new List<int>();

public Form1()
{
InitializeComponent();


Process proc = Process.GetCurrentProcess();
IntPtr startOffset = proc.MainModule.BaseAddress;
IntPtr endOffset = IntPtr.Add(startOffset, proc.MainModule.ModuleMemorySize);
for (int i = 0; i < startOffset.ToInt64(); i++)
{
memoryAddresses.Add(startOffset[i]
}

}

private void modelsToolStripMenuItem_Click(object sender, EventArgs e)
{

}
}
}

我尝试从头到尾扫描所有内存地址,并将它们添加到一个列表中。但是我在线上遇到错误:

memoryAddresses.Add(startOffset[i]

错误 3 无法将带 [] 的索引应用于“System.IntPtr”类型的表达式

第二件事是在循环中做的事情:startOffset.ToInt64() 可以吗?或者我应该做 ToInt32() ?

最佳答案

这不是 Windows 的工作方式。它是一个虚拟内存需求分页操作系统,每个进程获得 2 GB 的内存。对于 32 位进程,它从 0x0001000 开始到 0x7fffffff 结束。大多数进程从 0x00400000 开始使用 VM,这是 EXE 的默认起始地址。 Windows 始终使用 VM 空间的末尾来跟踪进程中的线程等基本内容。中间有很多空间,用于加载 DLL 和为堆分配内存。

看到分配需要 VirtualQueryEx(),您不能使用 Process 类来完成。您的代码无效, IntPtr 不是数组。通过 SysInternals 的 VMMap 实用程序深入了解进程使用虚拟内存空间的方式。同一位作者撰写了“Windows Internals”一书,这是一本了解 Windows 内部工作原理的必备书籍。

关于c# - 如何找到进程的开始和结束内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198073/

26 4 0
文章推荐: c# - 超链接 NavigateUrl 的正确语法
文章推荐: python - 使用 for 循环迭代文本文件中的各个单词
文章推荐: Java Opencv 3.4.2 如何从 Mat 对象中提取不同的 channel ?
文章推荐: css - 文本未在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com