易语言 汇编 CALL 调用
发布网友
发布时间:2022-04-25 12:01
我来回答
共4个回答
热心网友
时间:2024-10-30 09:10
不知道你的游戏是哪个 也没办法测试
我用一个龙之谷的 动作CALL 举例 你自己参考下:
CALL调试工具代码:
mov ecx,[9c5db4]
push 0
push 1
call 004944e0
用易语言代码:
.版本 2
.子程序 _动作按钮_被单击
.局部变量 寄存器, 寄存器
.局部变量 地址, 整数型
.局部变量 变量, 整数型, , "2"
内存_读整数型 (进程句柄, 十六到十 (“009c5db4”), 地址, )
寄存器.ECX = 地址
变量 [1] = 1
变量 [2] = 0
CALL (进程句柄, 十六到十 (“004944e0”), 变量, 寄存器, )
这个转换 测试是成功的。
你的代码 改过如下:
.版本 2
.局部变量 寄存器, 寄存器
.局部变量 地址, 整数型
.局部变量 变量, 整数型, , "4"
内存_读整数型 (进程句柄, 十六到十 (“006BFC26”), 地址, )
寄存器.ESI = 地址
变量 [4] = 寄存器.ESI
寄存器.EAX = 十六到十 (“00000330”)
变量 [3] = 寄存器.EAX
寄存器.EDX = 十六到十 (“00000EB0”)
变量 [2] = 寄存器.EDX
内存_读整数型 (进程句柄, 十六到十 (“00ACF654”), 地址, )
寄存器.EAX = 地址
变量 [1] = 寄存器.EAX
CALL (进程句柄, 十六到十 (“006cc7b0”), 变量, 寄存器, )
行不行自己测试吧 呵呵 不敢保证能行。
不行时 push也就是变量 顺序对调一下再试试
热心网友
时间:2024-10-30 09:07
call (走路CALL.地址)
call的偏移计算错误.,
如果是模块,似乎还没有计算call偏移的模块,
[大多汇编模块是生成汇编代码,申请内存,写入代码,然后创建线程去执行,]
看看上面过程,还未先申请内存,就开始计算call偏移,,接过call到错误地址,
或者,那些模块内的call只是个装饰,,不然也不会出现,
===================
mov eax,xxxx
call eax 的写法,
===================
模块内部向游戏申请内存,写入汇编代码,创建线程执行,
代码在 =====号内,2行.,
热心网友
时间:2024-10-30 09:05
我不会写call 不过应该是先把整个call重复的写下来 然后运行代码
热心网友
时间:2024-10-30 09:05
不是你想的那么简单。如果要注入代码的话就涉及到重定位的问题了。
易语言不能做到。要使用win32汇编。call的地址如果是已经编译的子程序(不在DLL中),就直接和16位汇编的偏移算法一样。如果在dll内的话更麻烦。要用到GetProcAddress函数。