遍历工具遍历游戏:[[[[[[5f6e20]+5fb5c]+4]+0..4 30]+16]
得到: 偏移地址:[[[[[[5f6e20]+5fb5c]+4]+0]+16]  内存地址:2B42106   整形:117949  
无符整形:1179649  byre:1                          偏移地址:[[[[[[5f6e20]+5fb5c]+4]+74]+16]  内存地址:1807616   整形:33554432 
无符整形:33554432 byre:0  
五级基址=[[[[5f6e20]+5fb5c]+4]+0..4 30]
C#代码:
win32API.API.ReadProcessMemory(openprocess, 五级基址 + 0x16, 区分01, 4, 0);这里要要区别这个内存地址出来:
我想要的到 byre=0 这个数组ID
要这么写?
希望我说的够明白

解决方案 »

  1.   

    [DllImport( "kernel32 ")] 
    public   static   extern   void   CopyMemory(System.IntPtr   Dest,   System.IntPtr   Source,   int32   Length); 
    http://topic.csdn.net/u/20100209/12/D5258785-3A2D-4377-ACC6-50171D082FFD.html
      

  2.   

    win32API.API.ReadProcessMemory(openprocess, 五级基址 + 0x16, 区分01, 4, 0);
     byte[] 区分01 = new byte[32];我是这样写,但是不好判断,判断了也是错误。我自己也不太懂,资料也很难找到
      

  3.   

                openprocess = win32API.API.OpenProcess(win32API.API.OPEN_PROCESS_ALL | win32API.API.PROCESS_CREATE_THREAD | win32API.API.PROCESS_VM_WRITE, 0, pid);
                win32API.API.ReadProcessMemory(openprocess, 0x5f6e20, out 一级基址, 4, 0);
                win32API.API.ReadProcessMemory(openprocess, 一级基址 + 0x5fb5c, out 二级基址, 4, 0);
                win32API.API.ReadProcessMemory(openprocess, 二级基址 + 4, out 三级基址, 4, 0);
                for (int i = 0; i < 怪物数组最大; i++)
                {
                    win32API.API.ReadProcessMemory(openprocess, 三级基址 + i * 4, out 四级基址, 4, 0);
                    if (四级基址 > 0)
                    {
                        win32API.API.ReadProcessMemory(openprocess, 四级基址 + 0x24, out 五级基址, 4, 0);
                        win32API.API.ReadProcessMemory(openprocess, 五级基址 + 0x0d, out 区分怪物, 4, 0);
                        win32API.API.ReadProcessMemory(openprocess, 五级基址 + 0x16, 区分生死, 4, 0);
                        win32API.API.ReadProcessMemory(openprocess, 五级基址, 怪物名,16, 0);
      

  4.   

    写到这里,我想要得到数组里面 byte 是0 的,不知道要这么写
      

  5.   

    [Quote=引用 8 楼 knowkjava 的回复:]
    引用 1 楼 wuyq11 的回复:
    [DllImport( "kernel32 ")]
    public static extern void CopyMemory(System.IntPtr Dest, System.IntPtr Source, int32 Length);
    可以解释下吗?。
    而下面这个例子,基本没帮助,只是注入和写,没有删除其他的不用的数组啊
      

  6.   

    汗就是 对比下,把想要的 byte是0的全取出来
      

  7.   

    大概是OpenProcess的时候没加read权限,你光加write了。
      

  8.   


    // PROCESS_VM_WRITE = 0x10
    // 2344是任意进程的id
    IntPtr hProcess = API.WindowsAPI.OpenProcess(0x10, true, 2344);  
    byte[] buffer = new byte[100];
    // 0x77ef0000是gdi32模块的首地址,肯定是有数据的。
    API.WindowsAPI.ReadProcessMemory(hProcess, 0x77ef0000, buffer, 100, 0); 
      

  9.   

    这里我已经取出来了,问题在于这个 buffer 里面我要等于0的地址或者ID。
    这样解释不知道你明白否?
    而这个比如
    if(buffer=0 )是错误的,
      

  10.   

    buffer=0 肯定是错的我想是LZ buffer==0的手误吧
      

  11.   


    for(int i = 0; i < buffer.length; i++)
    {
        if(buffer[i] != 0)
        {
            boolResult = false;
        }
    }//数据是特定类型的话,可以直接用unsafe指针。           unsafe
               {
                    fixed (byte* intBuffer = buffer)
                    {
                        if (*((int*)intBuffer) == 0)
                        {
                            boolResult = false;
                        }
                    }
                }
      

  12.   

    unsafe
    显示错误:不安全代码只会在在使用/unsafe 编译下错误
      

  13.   

    把帖结了,LS的LS是对的,是我的错误。谢谢帮组