-
-
[求助]如何用frida调用arm64 so中那些返回值放在x8寄存器中的函数?
-
发表于:
2021-10-9 11:24
8099
-
[求助]如何用frida调用arm64 so中那些返回值放在x8寄存器中的函数?
各位大佬好,请教一个问题。
arm64位so,如果一个函数返回值的内容比较长,会在调用函数前将一个地址放在x8寄存器中,函数调用结束后,再从那个地址中取出内容当作函数返回值。
如果想用frida主动调用这一类的函数要怎么弄?
比如ArtMethod类中的PrettyMethod方法,art::ArtMethod::PrettyMethod(bool),导出符号是
_ZN3art9ArtMethod12PrettyMethodEb。
它在汇编代码中被调用时是这样的:
我想用frida调用这一类的函数,该如何实现?
第一次尝试:
1 2 3 4 | var ArtMethod_PrettyMethod = Module.findExportByName( "libart.so" , "_ZN3art9ArtMethod12PrettyMethodEb" );
var prettyMethod = new NativeFunction(ArtMethod_PrettyMethod, "pointer" , [ "pointer" , "bool" ]);
var tempResult = prettyMethod(ptr(artMethod), 1 );
console.log( "tempresult:" , tempResult); / / tempResult不是指针,无法取出内容
|
第二次尝试:
1 2 3 4 5 6 | var ArtMethod_PrettyMethod = Module.findExportByName( "libart.so" , "_ZN3art9ArtMethod12PrettyMethodEb" );
var result = Memory.alloc( 1024 );
this.context.x8 = result;
var prettyMethod = new NativeFunction(ArtMethod_PrettyMethod, "pointer" , [ "pointer" , "bool" ]);
var tempResult = prettyMethod(ptr(artMethod), 1 );
console.log( "result:" , hexdump(result)); / / result内存中全是 0x00 ,没有内容
|
上面两种方法都不行,有没有大佬知道要怎么搞的?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!