连续三个“push eax”这样的游戏物品交易call如何调用?

datouxia888 2020-05-30 12:21:50


请大虾们看看上述OD的截图,我按照上市逻辑,调用脚本如下所示,只是成功了交易粮食/水/木材/炮弹,其他物品和船只都没有交易成功。因此想请教一下,问题出在哪里?

dm.AsmClear
dm.AsmAdd "mov ebp,esp"

dm.AsmAdd "push 0xA" //模拟堆栈地址环境
dm.AsmAdd "push 0x6" //模拟堆栈地址环境,提交物品的种类(比如 1种,2种)
dm.AsmAdd "push 0x00DF0100" //所要提交物品的编号、ID、数量指针
dm.AsmAdd "push 0x00E95898" //所要提交物品数据标识
dm.AsmAdd "mov eax,esp"

dm.AsmAdd "push 0x0" //模拟堆栈地址环境
dm.AsmAdd "push 0x0" //模拟堆栈地址环境,提交船只的种类(比如 1种,2种)
dm.AsmAdd "push 0x0" //所要提交船只的编号、ID指针
dm.AsmAdd "push 0x00FA3D98" //所要提交船只数据标识
dm.AsmAdd "mov eax,esp"

dm.AsmAdd "push 0x78" //模拟堆栈地址环境
dm.AsmAdd "push 0x0" //模拟堆栈地址环境
dm.AsmAdd "push 0x00010002" //木材、炮弹的数量
dm.AsmAdd "push 0x00030004" //粮食、水的数量

dm.AsmAdd "mov eax,esp"

dm.AsmAdd "push eax"
dm.AsmAdd "push eax"
dm.AsmAdd "push eax"

dm.AsmAdd "mov ecx,eax"
dm.AsmAdd "call 0x004D4CA0

dm.AsmAdd "mov esp,ebp"
dm_ret = dm.AsmCall (hwnd,1)
...全文
453 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
datouxia888 2020-05-31
  • 打赏
  • 举报
回复
多谢大佬指点,按照这个方法写,还是出错。不知道是什么原因?难道是大漠插件不支持这样的汇编指令? dm.AsmClear dm.AsmAdd "mov ebp,esp" //dm.AsmAdd "push 0x0" 可以不用 dm.AsmAdd "push 0xA" //模拟堆栈地址环境 dm.AsmAdd "push 0x6" //模拟堆栈地址环境,提交物品的种类(比如 1种,2种) dm.AsmAdd "push 0x00DF0100" //所要提交物品的编号、ID、数量指针 dm.AsmAdd "push 0x00E95898" //所要提交物品数据标识 dm.AsmAdd "lea eax,[ebp-0x38]" dm.AsmAdd "push eax" dm.AsmAdd "push 0x0" //模拟堆栈地址环境 dm.AsmAdd "push 0x0" //模拟堆栈地址环境,提交船只的种类(比如 1种,2种) dm.AsmAdd "push 0x0" //所要提交船只的编号、ID指针 dm.AsmAdd "push 0x00FA3D98" //所要提交船只数据标识 dm.AsmAdd "lea eax,[ebp-0x60]" dm.AsmAdd "push eax" dm.AsmAdd "push 0x78" //模拟堆栈地址环境 dm.AsmAdd "push 0x0" //模拟堆栈地址环境 dm.AsmAdd "push 0x00010002" //木材、炮弹的数量 dm.AsmAdd "push 0x00030004" //粮食、水的数量 dm.AsmAdd "lea eax,[ebp-0x1C]" dm.AsmAdd "push eax" dm.AsmAdd "push 0x0" //模拟堆栈地址环境 dm.AsmAdd "push 0x000186A0" //金钱的数量 dm.AsmAdd "lea ecx,[ebp-0x24]" dm.AsmAdd "call 0x004D4CA0" dm.AsmAdd "mov esp,ebp" dm_ret = dm.AsmCall (hwnd,1)
zara 2020-05-30
  • 打赏
  • 举报
回复
它们前面不是分别有 lea eax, 指令吗,应该是局部变量存储的什么内容吧,把它们的地址传过去,所以,你也得把相关地址给过去啊,直接的 push eax 可能不行的。那些地址应该是:
; 下面的 -0x38 = 前面指令里的 0xC8,local.14 应是第 14个局部变量(以dword分)14*4=56=0x38
lea eax, [ebp-0x38]
push eax
lea eax, [ebp-0x60]
push eax
lea eax, [ebp-0x1c]
push eax
lea ecx, [ebp-0x24]
call ....

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧