KingGod 发表于 2025-10-14 00:47:29

火线精英内存梓瞄问题解决

本帖最后由 KingGod 于 2025-10-14 00:50 编辑

相信大家在写火线精英内存梓瞄的时候会发现一个问题,鼠标的XY坐标数据各有2条,修改鼠标XY坐标时,XY坐标并不会进行变化,必须要在游戏中移动一下鼠标才会更新XY坐标,那么有2种解决办法

1.在梓瞄代码段使用让鼠标移动的api函数来移动1个像素点
2.分析判断逻辑,修改内存

今天要讲的也是第2种,也是全网最简单的方法,那么话不多说,直接上鼠标逻辑汇编代码段(在游戏中找到鼠标XY坐标后,右键查找访问,走动一下,出来的第一条就是)

相信大家看到这里就知道为什么鼠标XY各有2条数据了,那么这里我们来一点点分析
首先函数初始是先将eax+58和eax+48分别放入了xmm0和xmm1寄存器,+58和+48就是我们的鼠标Y坐标,然后使用ucomisd进行了浮点数的比较,正是因为使用了ucomisd,所以结果将会直接保存到CPU标志位,下面的逻辑判断为了大家能看的更清楚,我会逐步拆解
sete cl:如果鼠标Y和鼠标Y相等,那么cl=1
setnp ch:如果鼠标Y和鼠标Y都不为nan,那么ch=1
and cl,ch:如果他们既相等,也都不为nan,则为真
movzx ecx, cl:就不用我多说了把c1 8->32,用作后续的test
test ecx, ecx:这里就是用作更新标志,ecx=0,ZF=1,ecx!=0,ZF=0
sete cl:cl = ZF的意思
其实这里的代码可以理解为在做取反,结果为0,cl就等于1,最后将结果存到ebp-28中
下面的比较和跳转意思就是只有在xmm0和xmm1寄存器相等时才继续比较eax+50和eax+40,+50和+58就是我们鼠标的X坐标,意思就是只有鼠标Y和鼠标Y相等时才进行鼠标X的比较
防止大家看不懂,我将这里的汇编代码翻译为了易语言代码


那么如何让他直接更新鼠标坐标而不进行任何判断呢,答案就在最终的判断处
79B6E393 - 8B 4D D8          mov ecx,
79B6E396 - 85 C9             test ecx,ecx
79B6E398 - 0F84 59030000   je 79B6E6F7
此时已经将判断结果存到了ecx中,下面的test便是决定是否更新鼠标坐标的关键,此时有2种办法,第一种就是直接给ecx赋值,让他永远为更新状态,第二种方法就是直接nop 掉 test或je



1670122140 发表于 2025-10-14 14:30:08

有成品吗
页: [1]
查看完整版本: 火线精英内存梓瞄问题解决