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

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

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

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

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);

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

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这个结构体。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阿凯的Excel

Python读书笔记24(类修改属性)

上期和大家分享了类的用法,本期和大家分享的内容是如何修改类的属性! 我们继续用人这个类进行分享! 但是本次我们给人增加一个年龄属性!并且默认一个人出生的时候是0...

2917
来自专栏决胜机器学习

正则表达式学习笔记

正则表达式学习笔记 (原创内容,转载请注明来源,谢谢) 首先,学习正则表达式,很推荐一篇博客,http://www.cnblogs.com/deerchao...

36112
来自专栏Laoqi's Linux运维专列

shell中的函数+数组+数组分片

44510
来自专栏前端进阶之路

尾调用和尾递归

尾调用是函数式编程中一个很重要的概念,当一个函数执行时的最后一个步骤是返回另一个函数的调用,这就叫做尾调用。

1381
来自专栏Java技术栈

一张图搞清楚Java异常机制

下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的。 ? Throwable Throwable是Java异常的顶级类,所有的异常...

2915
来自专栏余林丰

初识Java反射

要详细的了解Java反射,就得要了解Java的类加载以及何为运行时动态加载等等概念。本文抛开其余概念,简单介绍Java反射,详细介绍会在以后有一个系统而全面的认...

25410
来自专栏运维技术迷

Python时间与时间戳转换

python的datetime转换为UNIX时间戳 #导入time模块(用于转换时间戳) In [1]: import time   # 导入datetime模...

3735
来自专栏搞前端的李蚊子

使用箭头函数的几个注意事项

刚才写一个需要递归操作的函数,在使用arguments.callee的时候,报错undefined,因为arguments.callee在严格模式下会失效,以为...

3776
来自专栏林德熙的博客

dotnet 设计规范 · 抽象类

X 不要定义 public 或 protected internal 访问的构造函数。默认 C# 语言不提供抽象类的公开构造函数方法。

812
来自专栏专注 Java 基础分享

Java并发之synchronized关键字

     上篇文章我们主要介绍了并发的基本思想以及线程的基本知识,通过多线程我们可以实现对计算机资源的充分利用,但是在最后我们也说明了多线程给程序带来的两种典型...

2015

扫码关注云+社区

领取腾讯云代金券