$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

results matching ""

    No results matching ""