前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >aardio调用汇编代码获取返回值的方法

aardio调用汇编代码获取返回值的方法

作者头像
用户2135432
发布2018-10-11 11:21:19
2K0
发布2018-10-11 11:21:19
举报
文章被收录于专栏:猛牛哥的博客猛牛哥的博客

aardio编程软件可以对外部进程注入汇编代码,并且转换成aardio函数很方便的调用。有时候需要获取汇编代码内的某些数据,把这个数据作为aardio函数的返回值。要让注入代码的aardio函数有返回值,需要注意2点。

1、声明函数返回值必须是void,声明为其他类型时,该函数都不会有返回值。

2、声明的函数参数内必须有一个指针类型的参数,这个指针指向的内存数据就是aardio函数的返回值。注意:注入的汇编代码必须把数据写入该指针内存。示例代码:

代码语言:javascript
复制
func = app.asmCdecl(
	"void(INT call_addr,int &result)",
	'\x8B\x4C\x24\x04', //mov ecx, [esp+0x4]
	'\x8B\x54\x24\x08', //mov edx, [esp+0x8]
	'\xFF\xD1', //call ecx
	'\x89\x02', //mov [edx], eax,把结果写入指针内存
	'\xC3', //ret
)
result=func(0x415E20,0);

另外,如果汇编代码内有多个数据需要返回,可以使用结构体指针,例如:

代码语言:javascript
复制
func = app.asmCdecl(
	"void(INT call_addr,struct &result)",
	'\x8B\x4C\x24\x04', //mov ecx, [esp+0x4]
	'\x8B\x54\x24\x08', //mov edx, [esp+0x8]
	'\xFF\xD1', //call ecx
	'\x89\x02', //mov [edx], eax
	'\xB9\xE0\x56\x41\x00', //mov ecx, 0x4156e0
	'\xFF\xD1', //call ecx
	'\x89\x42\x04', //mov [edx+0x4], eax
	'\xC3', //ret
)
data={int result=0;int result2=0};
func(0x415E20,data);

这样的代码执行后,data.result和data.result2就是汇编代码内2个call的返回值。同时,func这个函数的返回值也是data这个结构体。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018 年 9 月 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档