易语言 汇编 CALL 调用
push03618F60push000005B0push00000EB0push00ACF654call006cc7b0CALL地址绝对没问题,参数也绝对可以用,外部工具...
push 03618F60
push 000005B0
push 00000EB0
push 00ACF654
call 006cc7b0
CALL地址绝对没问题,参数也绝对可以用,外部工具调试N遍没有一点问题
只求易语言怎么实现这段汇编代码。
.版本 2
置代码 ({ })
pushad ()
push_ (走路CALL.参数 [4])
push_ (走路CALL.参数 [3])
push_ (走路CALL.参数 [2])
push_ (走路CALL.参数 [1])
call (走路CALL.地址)
popad ()
ret ()
运行汇编代码 (_取代码 ()) //调用函数(进程ID,_取代码())
都测试过了 一调用游戏就直接关闭.
找不到哪错了.
另外我调试的时候用的是郁金香代码注入器~其他的CALL调试工具也一调试就崩溃了
一楼的大哥~可以说的详细点么。CALL地址是我直接在OD上找到的。
mov esi,03618F60|006BFC26(基址)
push esi
mov eax,00000330 // 寻路Y坐标
push eax
mov edx,00000EB0 // 寻路X坐标
push edx
mov eax,00ACF654
push eax
call 006cc7b0
源码大概是这个样子的~
我不太明白CALL的偏移计算是什么意思~
还有我找了好多例子~没看到说要申请内存空间还要~ 是不是我写完代码以后根据代码长度申请一个这么大小的空间? 展开
push 000005B0
push 00000EB0
push 00ACF654
call 006cc7b0
CALL地址绝对没问题,参数也绝对可以用,外部工具调试N遍没有一点问题
只求易语言怎么实现这段汇编代码。
.版本 2
置代码 ({ })
pushad ()
push_ (走路CALL.参数 [4])
push_ (走路CALL.参数 [3])
push_ (走路CALL.参数 [2])
push_ (走路CALL.参数 [1])
call (走路CALL.地址)
popad ()
ret ()
运行汇编代码 (_取代码 ()) //调用函数(进程ID,_取代码())
都测试过了 一调用游戏就直接关闭.
找不到哪错了.
另外我调试的时候用的是郁金香代码注入器~其他的CALL调试工具也一调试就崩溃了
一楼的大哥~可以说的详细点么。CALL地址是我直接在OD上找到的。
mov esi,03618F60|006BFC26(基址)
push esi
mov eax,00000330 // 寻路Y坐标
push eax
mov edx,00000EB0 // 寻路X坐标
push edx
mov eax,00ACF654
push eax
call 006cc7b0
源码大概是这个样子的~
我不太明白CALL的偏移计算是什么意思~
还有我找了好多例子~没看到说要申请内存空间还要~ 是不是我写完代码以后根据代码长度申请一个这么大小的空间? 展开
4个回答
展开全部
不知道你的游戏是哪个 也没办法测试
我用一个龙之谷的 动作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也就是变量 顺序对调一下再试试
我用一个龙之谷的 动作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也就是变量 顺序对调一下再试试
参考资料: http://www.jdw8.com
展开全部
call (走路CALL.地址)
call的偏移计算错误.,
如果是模块,似乎还没有计算call偏移的模块,
[大多汇编模块是生成汇编代码,申请内存,写入代码,然后创建线程去执行,]
看看上面过程,还未先申请内存,就开始计算call偏移,,接过call到错误地址,
或者,那些模块内的call只是个装饰,,不然也不会出现,
===================
mov eax,xxxx
call eax 的写法,
===================
模块内部向游戏申请内存,写入汇编代码,创建线程执行,
代码在 =====号内,2行.,
call的偏移计算错误.,
如果是模块,似乎还没有计算call偏移的模块,
[大多汇编模块是生成汇编代码,申请内存,写入代码,然后创建线程去执行,]
看看上面过程,还未先申请内存,就开始计算call偏移,,接过call到错误地址,
或者,那些模块内的call只是个装饰,,不然也不会出现,
===================
mov eax,xxxx
call eax 的写法,
===================
模块内部向游戏申请内存,写入汇编代码,创建线程执行,
代码在 =====号内,2行.,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-08-28
展开全部
不是你想的那么简单。如果要注入代码的话就涉及到重定位的问题了。
易语言不能做到。要使用win32汇编。call的地址如果是已经编译的子程序(不在DLL中),就直接和16位汇编的偏移算法一样。如果在dll内的话更麻烦。要用到GetProcAddress函数。
易语言不能做到。要使用win32汇编。call的地址如果是已经编译的子程序(不在DLL中),就直接和16位汇编的偏移算法一样。如果在dll内的话更麻烦。要用到GetProcAddress函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我不会写call 不过应该是先把整个call重复的写下来 然后运行代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询