$new函数
另外有个(看起来,和ctor的$init有点类似的)写法是:
$new- 含义:新建一个Java对象的实例
$new的用法举例
var curThrowableCls = Java.use("java.lang.Throwable")
let newThrowable = curThrowableCls.$new()
后续即可正常使用,此处新建的Throwable的实例对象newThrowable了
比如去打印函数调用堆栈:
var stackElements = newThrowable.getStackTrace()
console.log("genStackStr: stackElements=" + stackElements)
相关的代码:
// generate current stack trace string
static genStackStr(prefix="") {
// let newThrowable = ThrowableCls.$new()
// let newThrowable = this.curThrowableCls.$new()
let newThrowable = FridaAndroidUtil.curThrowableCls.$new()
// console.log("genStackStr: newThrowable=" + newThrowable)
var stackElements = newThrowable.getStackTrace()
// console.log("genStackStr: stackElements=" + stackElements)
if (!JsUtil.strIsEmpty(prefix)){
prefix = prefix + " "
}
const linePrefix = "\n "
var stackStr = prefix + "java Stack:" + linePrefix + stackElements[0] //method//stackElements[0].getMethodName()
for (var i = 1; i < stackElements.length; i++) {
stackStr += linePrefix + "at " + stackElements[i]
}
// stackStr = "\n\n" + stackStr
stackStr = stackStr + "\n"
// console.log("genStackStr: stackStr=" + stackStr)
return stackStr
}
全部代码详见:
https://github.com/crifan/JsFridaUtil/blob/main/frida/FridaAndroidUtil.js