(mPtr, callBack, TYPENOP = true)
| 8479 | }; |
| 8480 | exports.detachAll = detachAll; |
| 8481 | function replaceFunction(mPtr, callBack, TYPENOP = true) { |
| 8482 | if (typeof mPtr == "number") |
| 8483 | mPtr = ptr(mPtr); |
| 8484 | let src_ptr = mPtr; |
| 8485 | mPtr = checkPointer(mPtr); |
| 8486 | if (String(arr_nop_addr).indexOf(String(mPtr)) == -1) { |
| 8487 | arr_nop_addr.push(String(mPtr)); |
| 8488 | } |
| 8489 | else { |
| 8490 | Interceptor.revert(mPtr); |
| 8491 | } |
| 8492 | let srcFunc = new NativeFunction(mPtr, 'pointer', ['pointer', 'pointer', 'pointer', 'pointer']); |
| 8493 | Interceptor.replace(mPtr, new NativeCallback((arg0, arg1, arg2, arg3) => { |
| 8494 | LOGW("\nCalled " + (TYPENOP ? "Replaced" : "Nop") + " function ---> " + mPtr + " (" + src_ptr.sub(Il2Cpp.module.base) + ")"); |
| 8495 | let ret = callBack(srcFunc, arg0, arg1, arg2, arg3); |
| 8496 | return ret == null ? ptr(0) : ret; |
| 8497 | }, 'pointer', ['pointer', 'pointer', 'pointer', 'pointer'])); |
| 8498 | } |
| 8499 | exports.replaceFunction = replaceFunction; |
| 8500 | const getFunctionAddrFromCls = (clsptr, funcName) => { |
| 8501 | if (typeof clsptr == "string") |
no test coverage detected