C#中遍历遇到的问题

wqq370063 2010-06-17 09:13:24
遍历工具遍历游戏:[[[[[[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
要这么写?
希望我说的够明白
...全文
242 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqq370063 2010-06-20
  • 打赏
  • 举报
回复
把帖结了,LS的LS是对的,是我的错误。谢谢帮组
小夏天~ 2010-06-19
  • 打赏
  • 举报
回复
没太明白。学习..
wqq370063 2010-06-19
  • 打赏
  • 举报
回复
unsafe
显示错误:不安全代码只会在在使用/unsafe 编译下错误
wqq370063 2010-06-18
  • 打赏
  • 举报
回复
汗就是 对比下,把想要的 byte是0的全取出来
jianuMan 2010-06-18
  • 打赏
  • 举报
回复
不太明白 楼主想干什么?
wqq370063 2010-06-18
  • 打赏
  • 举报
回复
没人了?
wqq370063 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 knowkjava 的回复:]
引用 1 楼 wuyq11 的回复:
[DllImport( "kernel32 ")]
public static extern void CopyMemory(System.IntPtr Dest, System.IntPtr Source, int32 Length);
可以解释下吗?。
而下面这个例子,基本没帮助,只是注入和写,没有删除其他的不用的数组啊
changjin642 2010-06-18
  • 打赏
  • 举报
回复
学习了。
KnowKjava 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
[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.htm……
[/Quote]up
wqq370063 2010-06-18
  • 打赏
  • 举报
回复
有没有大哥帮忙下
kolosi 2010-06-18
  • 打赏
  • 举报
回复

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;
}
}
}
wqq370063 2010-06-18
  • 打赏
  • 举报
回复
我调试游戏,LS应该没用过遍历工具吧,用过就知道我说什么了,可惜这里不能发图片
ledmhcc 2010-06-18
  • 打赏
  • 举报
回复
buffer=0 肯定是错的。。。我想是LZ buffer==0的手误吧
wqq370063 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kolosi 的回复:]
C# code

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




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

// 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);
kolosi 2010-06-18
  • 打赏
  • 举报
回复
大概是OpenProcess的时候没加read权限,你光加write了。
wqq370063 2010-06-17
  • 打赏
  • 举报
回复
写到这里,我想要得到数组里面 byte 是0 的,不知道要这么写
wqq370063 2010-06-17
  • 打赏
  • 举报
回复
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);
捷哥1999 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wqq370063 的回复:]

win32API.API.ReadProcessMemory(openprocess, 五级基址 + 0x16, 区分01, 4, 0);
byte[] 区分01 = new byte[32];

我是这样写,但是不好判断,判断了也是错误。我自己也不太懂,资料也很难找到
[/Quote]

不太明白你的意思,你取到地址了吗,现在?
wqq370063 2010-06-17
  • 打赏
  • 举报
回复
win32API.API.ReadProcessMemory(openprocess, 五级基址 + 0x16, 区分01, 4, 0);
byte[] 区分01 = new byte[32];

我是这样写,但是不好判断,判断了也是错误。我自己也不太懂,资料也很难找到
加载更多回复(2)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧