我已经使用Frida.RE检测了一个应用程序。我可以挂钩自己感兴趣的C ++类的构造函数,我们将其称为MyClass :: MyClass()。

我想在对象实例上调用非静态MyClass :: SomeMethod()。为此,我需要具有对象实例的地址,以便将其作为隐式“ this”参数传递给方法。

是否可以监视MyClass创建的实例的地址?

还是可以通过其他方法来调用已实例化的对象的SomeMethod()方法?

更新:

我试图简单地记录通过Frida(args [0])传递给构造函数的第0个参数,但是我只能访问this指针第一个“真实”参数(由调用方显式传递)。

我可以想到两件事:


Frida不在乎隐式this参数,或者
由于Windows程序中使用了thiscall方案(我正在32位Windows上进行实验)。我想不出办法用Frida来获得ECX的价值...


评论

@DCoder正确

#1 楼

构造函数的第一个参数是为对象分配的内存。
(通常存储在r0上,用于ARM和thumb)。
因此,监视它的方法很简单:对类的所有构造函数进行检测并观察第一个构造函数参数。

评论


谢谢您的回答。不幸的是,这不适合我的问题,我正在用有关原因的详细信息更新我的问题。

–鼓风机
2014年2月20日下午13:33

#2 楼

我一直在为此苦苦挣扎,直到我意识到该函数是否使用自定义调用约定。 args [n]采用默认的调用约定。对于自定义调用约定,在本例中为__thiscall方案,指向它的指针在ecx寄存器上(可通过this.context.ecx访问)。

希望对任何人都有帮助!