echo72 发表于 2022-2-25 22:29

读一个基于dll偏移的地址

地址是
xxx.dll + 0x40DF480, 偏移是offsets=

我用python的pymem读xxx.dll的地址是 0x7ffccac40000

1.怎么会有这么大的物理地址?已经12位16进制了。
2.基于那个地址去读取的时候会报错,Int too long.

import pymem
# from ReadWriteMemory import ReadWriteMemory

pm = pymem.Pymem("abc.exe")
baseAddress = pymem.process.module_from_name(pm.process_handle, "assembly.dll").lpBaseOfDll

print(hex(baseAddress))   # 0x7ffccac40000

# rwm = ReadWriteMemory()
# process = rwm.get_process_by_id(17056)
# process.open()
# hp_pointer = process.get_pointer(0x7ffccac40000 + 0x40DF480, offsets=)
# hp = process.read(hp_pointer)
# print(hp)

黎昕 发表于 2022-2-25 23:29

64进程 地址就是这么大

echo72 发表于 2022-2-25 23:36

黎昕 发表于 2022-2-25 23:29
64进程 地址就是这么大

不知道怎么ce读出来的地址和pymem不一样

quandu 发表于 2022-2-25 23:52

这个不是物理地址,这个是虚拟地址{:1_925:}
int too long的意思是不是int只有4字节,读64位的可能需要long(8)字节这种

echo72 发表于 2022-2-25 23:59

本帖最后由 echo72 于 2022-2-26 00:04 编辑

quandu 发表于 2022-2-25 23:52
这个不是物理地址,这个是虚拟地址
int too long的意思是不是int只有4字节,读64位的可能需要lon ...
cheat engine的第一个地址是 xxx.dll + 0x040d f480 = 0x 1f7 7ae2 0a80

用pymem读xxx.dll的 地址是 0x7ffccac40000 + 0x040df480 = 0x 7FFC CED1 F480

然后我就蒙蔽了,是差开一次地址转换么

黎昕 发表于 2022-2-26 14:09

echo72 发表于 2022-2-25 23:59
cheat engine的第一个地址是 xxx.dll + 0x040d f480 = 0x 1f7 7ae2 0a80

用pymem读xxx.dll的 地址是 0 ...

0x7ffccac40000 + 0x040df480 = 0x 7FFC CED1 F480 这个地址是对的 , 你还没读 要读这个地址的值才是

echo72 发表于 2022-2-26 20:57

黎昕 发表于 2022-2-26 14:09
0x7ffccac40000 + 0x040df480 = 0x 7FFC CED1 F480 这个地址是对的 , 你还没读 要读这个地址的值才是

是的 ,谢谢 。你说的没错
我之前以为第一个第一个偏移不需要读来着。

现在还有一个问题就是,我这个多层偏移的指针,一直在抖动是怎么回事,有时候中间某一层会变不可读

黎昕 发表于 2022-2-26 22:28

echo72 发表于 2022-2-26 20:57
是的 ,谢谢 。你说的没错
我之前以为第一个第一个偏移不需要读来着。



因为你最终的地址是动态地址,一直循环读就是了,比如新开一局游戏 这个地址就不是上一局的动态地址了 ,需要从你上面的偏移重新读才能得到你想要的最终动态地址

echo72 发表于 2022-2-26 23:50

黎昕 发表于 2022-2-26 22:28
因为你最终的地址是动态地址,一直循环读就是了,比如新开一局游戏 这个地址就不是上一局的动态地址了 , ...

嗯,我知道是动态地址,但是在一局游戏里,那些中间偏移值的内存地址的读数也一直在变化,这样正常么。

address4 + offset = the value
address3 + offset -> address 4
address2 + offset -> address3
address1 + offset -> address2
xxx.dll + offset1 -> address1

就虽然 最终值是不变的,但是 address2,3,4 一直在变化(在一局游戏中),而且有时候会不可读。这就导致最终那个我想要的值,一直在反复出现又消失,虽然值是正确的。这种情况是正常的么?

谢谢

echo72 发表于 2022-2-26 23:53

本帖最后由 echo72 于 2022-2-26 23:58 编辑

黎昕 发表于 2022-2-26 22:28
因为你最终的地址是动态地址,一直循环读就是了,比如新开一局游戏 这个地址就不是上一局的动态地址了 , ...
噢噢,你让我一直while True读到为止是吧? 我写了个连读20次循环,读不出再报错。读失败的机率还是很大。我怕写多了会死循环
因为我看别人视频里那些地址都没有这样”闪烁“,所以有点疑问
页: [1]
查看完整版本: 读一个基于dll偏移的地址