You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何单独修改XMM0寄存器[00]和[+04]位置的存储数值

实现方案

你之前使用movsd加载双精度数到XMM0时,双精度占8字节刚好覆盖XMM0低2个连续dword,因此会同时修改前两个值。要实现两个值独立修改,改用单精度向量操作指令即可,修改后的注入代码如下:

newmem:
  ; 自定义修改第一个值(XMM0最低位dword,对应原1973.66)
  movss xmm0, [p_first_val]
  ; 自定义修改第二个值(XMM0 +04偏移位置dword,对应原295.23)
  insertps xmm0, [p_second_val], 01h
code:
  movq [ecx+38],xmm0
  je flashplayer11_7r700_224_win_sa.exe+27845
  jmp return
; 独立配置两个单精度数值
p_first_val:
  dd (float)1973.66 ; 替换为你需要的第一个自定义值
p_second_val:
  dd (float)295.23 ; 替换为你需要的第二个自定义值
INJECT:
  jmp newmem
return:

兼容低版本CPU的替代写法

如果运行环境不支持SSE4.1指令集的insertps,可以用以下通用SSE2指令实现相同效果:

newmem:
  movss xmm0, [p_first_val]
  movss xmm1, [p_second_val]
  unpcklps xmm0, xmm1

逻辑说明

  • movss指令仅操作XMM寄存器的最低4字节,不会影响寄存器其他位置的数值
  • insertps参数01h表示将源单精度值插入到XMM0的第1个dword位(索引从0开始计算,对应+04偏移位置)
  • 后续movq指令依然正常输出XMM0低8字节的两个修改后的值到内存地址[ecx+38],和原有业务逻辑完全兼容

内容的提问来源于stack exchange,提问作者Lith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:36:04