| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1373 人关注过本帖
标题:读其内存值的问题?返回值与实际值不同
只看楼主 加入收藏
a6068132
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:47
专家分:131
注 册:2011-5-10
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
读其内存值的问题?返回值与实际值不同
static class Program
    {
        private int baseAddress = 0x006A9EC0;           //游戏内存基址
        private string processName = "PlantsVsZombies"; //游戏进程名字
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            int address = ReadMemoryValue(baseAddress);//本来这里实际返加的不是0,但次次运行都返回为0,不知道哪里错了,请大家多看看
            Console.WriteLine(address.ToString());
            Console.ReadLine();   
        }

       //根据进程名获取PID
        public static int GetPidByProcessName(string processName)
        {
            Process[] arrayProcess = Process.GetProcessesByName(processName);

            foreach (Process p in arrayProcess)
            {
                return p.Id;
            }
            return 0;
        }
      
      //读内存值
       public static int ReadMemoryValue(int baseAddress,string processName)
        {
            try
            {
                byte[] buffer = new byte[4];
                IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0); //获取缓冲区地址
                IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName));
                ReadProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, 4, IntPtr.Zero); //将制定内存中的值读入缓冲区            
                CloseHandle(hProcess);
                return Marshal.ReadInt32(byteAddress);               
            }
            catch
            {
                return 0;
            }
        }
    }
搜索更多相关主题的帖子: 游戏 应用程序 private address false 
2011-09-19 11:45
a6068132
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:47
专家分:131
注 册:2011-5-10
收藏
得分:0 
这么多人看了,都没一个能回答啊,高手们在哪里啊?出来冒个泡啊
2011-09-19 15:48
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:20 
一般是readprocessmemory出错造成的,API出错并不会造成异常,所以不易被察觉。

QQ:81704464
2011-09-19 15:56
a6068132
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:47
专家分:131
注 册:2011-5-10
收藏
得分:0 
不知为啥缓冲区的值一直为零,肯定是该地址的值没有写入缓冲区,不知为啥未写入呢?
2011-09-19 17:25
a6068132
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:47
专家分:131
注 册:2011-5-10
收藏
得分:0 
强调一下,两个return 0;都没发生,所以没有异常发生。
2011-09-19 17:36
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:0 
我还得强调一下,API出错,并不会有任何反应,只是会产生默认的返回值。readprocessmemory这个函数就是这样的,如果有错误了,就会让其返为0,正确的话,则返回其它值。

QQ:81704464
2011-09-20 08:36
快速回复:读其内存值的问题?返回值与实际值不同
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018732 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved