我想在对象实例上调用非静态MyClass :: SomeMethod()。为此,我需要具有对象实例的地址,以便将其作为隐式“ this”参数传递给方法。
是否可以监视MyClass创建的实例的地址?
还是可以通过其他方法来调用已实例化的对象的SomeMethod()方法?
更新:
我试图简单地记录通过Frida(args [0])传递给构造函数的第0个参数,但是我只能访问
this
指针第一个“真实”参数(由调用方显式传递)。 我可以想到两件事:
Frida不在乎隐式
this
参数,或者由于Windows程序中使用了thiscall方案(我正在32位Windows上进行实验)。我想不出办法用Frida来获得ECX的价值...
#1 楼
构造函数的第一个参数是为对象分配的内存。(通常存储在r0上,用于ARM和thumb)。
因此,监视它的方法很简单:对类的所有构造函数进行检测并观察第一个构造函数参数。
评论
谢谢您的回答。不幸的是,这不适合我的问题,我正在用有关原因的详细信息更新我的问题。
–鼓风机
2014年2月20日下午13:33
#2 楼
我一直在为此苦苦挣扎,直到我意识到该函数是否使用自定义调用约定。 args [n]采用默认的调用约定。对于自定义调用约定,在本例中为__thiscall方案,指向它的指针在ecx寄存器上(可通过this.context.ecx访问)。希望对任何人都有帮助!
评论
@DCoder正确