Lensual 发表于 2017-7-27 10:59

【C#】一个方便计算多级指针的辅助函数

本帖最后由 Lensual 于 2017-7-27 11:29 编辑

遇到了一个6级指针,于是写了一个方便计算地址的函数。
需要用到WindowsAPI ReadProcessMemory

返回Int64类型的变量地址,不是指针地址。为了兼容64位地址,所以用Int64。
lpProcess,目标进程句柄,要求已经OpenProcess,并且可读权限。
BaseAddr,基址,要从这里计算偏移,一般是模块基址(ProcessModule.BaseAddress)
Offsets,多级指针偏移,集合成员是Int64类型的偏移量
      public static Int64 CalcAddr(IntPtr lpProcess, Int64 BaseAddr, List<Int64> Offsets){
            if (Offsets.Count > 1)
            {
                byte[] buffer = new byte;
                ReadProcessMemory(lpProcess, (IntPtr)(BaseAddr + Offsets), Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0), 8, IntPtr.Zero);
                Offsets.RemoveAt(0);
                return CalcAddr(lpProcess, BitConverter.ToInt64(buffer,0), Offsets);
            }
            return BaseAddr + Offsets;
      }

例子
-> 0x1
-> 0x2
-> 0x3

变量地址是0x3
偏移分别是0xA,0xB,0xC


List<Int64> offsets = new List<Int64>();
offsets.Add(0xA);
offsets.Add(0xB);
offsets.Add(0xC);
CalcAddr(example.exe进程句柄, example.exe的基址, offsets);

gunxsword 发表于 2017-7-27 11:06

看起来不错,顶一下,习惯了一行一行写了!

KING9115 发表于 2017-7-27 11:10

感谢楼主,学习一下

heverst 发表于 2017-7-27 11:20


感谢楼主,学习一下

优优美 发表于 2018-11-12 13:17

刚开始学习C#,有些还看不懂,继续努力中

sunson 发表于 2018-12-11 12:30

mark一下
页: [1]
查看完整版本: 【C#】一个方便计算多级指针的辅助函数