Module32First中
MODULEENTRY32
结构里modBaseAddr就是主程序模块的起始地址
最简单的方法是使用进程快照CreateToolhelp32Snapshot,列举所有的进程,然后枚举找到你所需要的进程,用Module32First获取其起始地址,然后用Module32Next获取下一个进程的
也就是上一个进程的结束地址。
具体还是自己查一下MSDN,或者
百度一下
枚举所有进程的方法
例如:
版本 2
支持库 spec
子程序 实时信息读取
局部变量 测试1, 整数型
局部变量 人名地址, 整数型
局部变量 人物名1, 字节集
读取整数 (pHandle, 人物基址 + 912, 取变量地址 (人名地址), 4, 0)
人物名1 = 取空白字节集 (16)
读取字节 (pHandle, 人名地址, 人物名1, 16, 0)
Rm = 取空白文本 (16)
字符转换 (#CP_ACP, 0, 人物名1, 16, Rm, 16, 0, 0)
如果 (删全部空 (Rm) ≠ “”)
分组框1标题 = 删全部空 (Rm)
否则
分组框1标题 = “人物信息”
如果结束
' --------------------------------------------------------------------人名相关--------------------------------
读取整数 (pHandle, 人物基址 + 596, 取变量地址 (H1), 4, 0)
读取整数 (pHandle, 人物基址 + 620, 取变量地址 (H2), 4, 0)
' ----------------------------------------------------------------------HP相关--------------------------------
读取整数 (pHandle, 人物基址 + 600, 取变量地址 (M1), 4, 0)
读取整数 (pHandle, 人物基址 + 624, 取变量地址 (M2), 4, 0)
' ----------------------------------------------------------------------MP相关-----------------------------------
读取整数 (pHandle, 人物基址 + 588, 取变量地址 (DJ), 4, 0)
' ----------------------------------------------------------------------等级相关-----------------------------------
读取整数 (pHandle, 人物基址 + 604, 取变量地址 (JY), 4, 0)
读取整数 (pHandle, 9218168 + 4 + DJ × 4, 取变量地址 (JY1), 4, 0)
' ----------------------------------------------------------------------经验相关-----------------------------------
读取整数 (pHandle, 人物基址 + 724, 取变量地址 (JQJ), 4, 0)
读取整数 (pHandle, 人物基址 + 724, 取变量地址 (JQY), 4, 0)
读取整数 (pHandle, 人物基址 + 724, 取变量地址 (JQT), 4, 0)
JQ金 = JQJ ÷ 10000
JQ银 = (JQY % 10000) \ 100
JQ铜 = 到数值 (取文本右边 (到文本 (JQT), 2))
' ----------------------------------------------------------------------金钱相关-----------------------------------
读取整数 (pHandle, 人物基址 + 280, 取变量地址 (辅助状态1), 4, 0)
' ----------------------------------------------------------------------辅助相关-----------------------------------
读取整数 (pHandle, 人物基址 + 964, 取变量地址 (X), 4, 0)
读取整数 (pHandle, 人物基址 + 972, 取变量地址 (Y), 4, 0)
' 输出调试文本 (四舍五入 (X, 0))
' ------------------------------------------s----------坐标相关------------------------------------------------------
如果真 (自动打怪Y选中 = 假)
读取整数 (pHandle, 人物基址 + 224, 取变量地址 (怪物死亡), 4, 0) ' 0为攻击中,不为0则表示没有攻击
如果 (怪物死亡 = 0)
捡物判断 = 真
否则
捡物判断 = 假
如果结束
如果真 (捡物判断 = 真)
查找并按键 (捡物按键)
读取整数 (pHandle, 捡物ESI + 20, 取变量地址 (捡次数), 4, 0)
如果真 (捡次数 ≤ 0)
打怪时钟时钟周期 = 500
返回 ()
如果真结束
计次循环首 (捡次数, )
置随机数种子 ()
捡物间隔 = 取随机数 (1, 499)
延时 (捡物间隔)
查找并按键 (捡物按键)
计次循环尾 ()
捡物判断 = 假
如果真结束
如果真结束
如果真 (统计功能开启选中 = 真 且 经验标题 ≠ 到文本 (JY))
如果真 (挂机初始经验 = 0)
挂机初始经验 = JY
如果真结束
如果 (挂机初始经验 > JY)
增加经验 = JY
否则
增加经验 = JY - 挂机初始经验
前一次经验 = 前一次经验 + 增加经验
如果结束
挂机经验标题 = 到文本 (前一次经验)
挂机初始经验 = JY
增加经验 = 0
' -----------------------------------------------------------统计经验部分--------------------------
如果真 (挂机初始金币金 = 0 且 挂机初始金币银 = 0 且 挂机初始金币铜 = 0)
挂机初始金币金 = JQJ ÷ 10000
挂机初始金币银 = (JQY % 10000) \ 100
挂机初始金币铜 = 到数值 (取文本右边 (到文本 (JQT), 2))
如果真结束
增加金币金 = JQ金 - 挂机初始金币金
增加金币银 = JQ银 - 挂机初始金币银
增加金币铜 = JQ铜 - 挂机初始金币铜
如果真 (增加金币银 < 0)
增加金币金 = 增加金币金 - 1
增加金币银 = 增加金币银 + 100
如果真结束
如果真 (增加金币银 ≥ 100)
增加金币金 = 增加金币金 + 1
增加金币银 = 增加金币银 - 100
如果真结束
如果真 (增加金币铜 < 0)
增加金币银 = 增加金币银 - 1
增加金币铜 = 增加金币铜 + 100
如果真结束
如果真 (增加金币铜 ≥ 100)
增加金币银 = 增加金币银 + 1
增加金币银 = 增加金币铜 - 100
如果真结束
挂机金钱标题 = 到文本 (增加金币金) + “金” + 到文本 (增加金币银) + “银” + 到文本 (增加金币铜) + “铜”
' ---------------------------------------------统计金钱--------------------------------------
如果真结束
HP标题 = 到文本 (H1) + “/” + 到文本 (H2)
MP标题 = 到文本 (M1) + “/” + 到文本 (M2)
等级标题 = 到文本 (DJ)
经验标题 = 到文本 (JY) + “/” + 到文本 (JY1)
金钱标题 = 到文本 (JQ金) + “金” + 到文本 (JQ银) + “银” + 到文本 (JQ铜) + “铜”
坐标标题 = 到文本 (取整 (X)) + “/” + 到文本 (取整 (Y))
人物游戏状态标题 = “[” + 当前状态X + “]”
' -------------------------------------------------------实时显示-----------------------------------------------------
如果真 (自动打怪Y选中 = 真 且 M1 = M2 且 H1 = H2 且 是否打坐 = 真) ' 打坐人物血和魔法补满,启动打怪
打怪时钟时钟周期 = 1000
是否打坐 = 假
如果真结束
如果真 (自动打怪Y选中 = 假) ' 关闭自动打怪功能,停止打怪时钟
打怪时钟时钟周期 = 0
如果真结束
' ------------------------------以下代码为重启打怪时钟代码----------------------------------------------------------
如果真 (自动打怪Y选中 = 真)
读取整数 (pHandle, 人物基址 + 224, 取变量地址 (站立状态1), 4, 0) ' 双数为行动状态,单数表示在站立中
' 用求余数运算来定状态
站立状态 = 站立状态1 % 2 ' 0为跑步中,1为站立中
如果 (站立状态 = 1)
是否重启打怪 = 是否重启打怪 + 1
如果真 (是否重启打怪 = 5)
打怪时钟时钟周期 = 500
是否重启打怪 = 0
如果真结束
否则
是否重启打怪 = 0
如果结束
8月
关键的问题是你是需要DLL在目标进程中的基址,而且你自己的写的程序并没有加载那个DLL,所以你总是得到0,所以你需要把自己的程序注入到进程中,才能得到你所要的DLL在目标进程中的基地址。
DLL注入比较常用的方法是利用OpenProcess得到目标进程的句柄,然后利用CreateRemoteThread调用LoadLibrary函数,加载你自己的DLL,在这个DLL的DLLMain里面遍历所有的DLL找到你想要的。这个程序在网上很多,你自己Google就可以找得到了。
以上就是关于API怎么获取外部进程的起始内存地址全部的内容,包括:API怎么获取外部进程的起始内存地址、找到游戏基址如何用C来编写代码、如果获取其它进程的DLL内存地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)