Python Pymem 游戏内存基址读取修改 - 获取游戏DLL模块基址

运行环境

python3.9.0 - 64位

安装pymem

pip install pymem

Pymem 的文档

https://pymem.readthedocs.io/en/latest/

读取游戏模块DLL基址 完整代码

import pymem

Game = pymem.Pymem("hl2.exe") # 游戏进程

def Get_moduladdr(dll): # 读DLL模块基址
    modules = list(Game.list_modules()) # 列出exe的全部DLL模块
    for module in modules:
        if module.name == dll:
            #print(module.name) # 模块名字
            #print(module.lpBaseOfDll) # 模块基址
            #print("找到了")
            Moduladdr = module.lpBaseOfDll
    return Moduladdr

Char_Modlue = Get_moduladdr("server.dll") # 读DLL模块基址
My_addr = Game.read_int(Char_Modlue + 0x4F615C)
My_x = Game.read_float(My_addr + 0x308)
My_y = Game.read_float(My_addr + 0x30C)
My_z = Game.read_float(My_addr + 0x310)
My_hp = Game.read_int(My_addr + 0xE4)
My_camp = Game.read_int(My_addr + 0x1F4)
print("   My |",My_camp, "|",My_hp,"|", My_x, "|", My_y, "|", My_z)

大概的意思就是这样!第一次写文章,希望这篇文章能帮到你

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
### 回答1: 获取模块.dll文件的基址和偏移量通常用于进行动态链接库注入或者修改内存数据等操作。以下是一种常见的方法: 1. 获取目标进程的句柄。 可以使用函数OpenProcess来打开目标进程,获取其句柄。传入参数为目标进程的ID和所需的访问权限。 2. 枚举模块并找到目标模块。 使用函数EnumProcessModules来枚举目标进程的模块获取模块的句柄。传入参数为目标进程的句柄、模块句柄数组和数组的大小。如果函数执行成功,返回值为模块句柄的数量。 3. 获取模块的文件名。 使用函数GetModuleBaseName来获取模块的文件名。传入参数为目标进程的句柄和模块的句柄。 4. 获取模块基址和大小。 使用函数GetModuleInformation来获取模块基址和大小。传入参数为目标进程的句柄、模块的句柄和包含模块信息的结构体。 5. 获取模块的导出表。 使用函数GetProcAddress来获取模块的导出函数的地址。传入参数为模块基址和导出函数的名称。 通过上述方法,就可以获取到目标模块基址和偏移量。不同的编程语言和环境会有相应的函数和方法来实现以上步骤,但基本思路是一致的。 ### 回答2: 要获取一个模块(.dll文件)的基址和偏移,我们可以通过一些编程语言来实现。下面是一个使用C++编程语言的示例: 1. 首先,我们需要加载目标模块。可以使用`LoadLibrary`函数来加载.dll文件,并得到模块的句柄。例如: ```cpp HMODULE hModule = LoadLibrary(TEXT("target.dll")); ``` 2. 然后,我们可以使用`GetModuleInformation`函数来获取模块基址和偏移。该函数需要提供进程的句柄和模块的句柄,并返回一个`MODULEINFO`结构体,其中包含了基址和大小等信息。例如: ```cpp MODULEINFO moduleInfo; GetModuleInformation(GetCurrentProcess(), hModule, &moduleInfo, sizeof(moduleInfo)); ``` 3. 最后,可以通过计算地址偏移来得到具体的地址。例如,要获取某个函数的地址,可以将函数的偏移加上模块基址。示例代码如下: ```cpp DWORD functionOffset = 0x1234; // 假设函数的偏移为0x1234 DWORD functionAddress = moduleInfo.lpBaseOfDll + functionOffset; ``` 总结:通过加载模块获取模块信息,我们可以得到模块基址和偏移。然后,我们可以根据需要进行地址计算来获得具体的地址。需要注意的是,以上示例是使用C++编程语言的示例,其他编程语言也有类似的函数或方法可以实现相同的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值