【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); 看起来不错,顶一下,习惯了一行一行写了! 感谢楼主,学习一下
感谢楼主,学习一下 刚开始学习C#,有些还看不懂,继续努力中 mark一下
页:
[1]