MethodInfo.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import {NativeStruct} from "./NativeStruct";
  2. import {il2cppApi} from "../il2cppApi";
  3. import {log} from "../../logger";
  4. import {soName} from "../../config";
  5. import {Il2CppClass} from "./Il2CppClass";
  6. import {Il2CppGenericMethod} from "./Il2CppGenericMethod";
  7. const METHOD_INFO_OFFSET_SLOT=76;
  8. export class MethodInfo extends NativeStruct{
  9. getGenericMethod(){
  10. return new Il2CppGenericMethod(this.add(0x38));
  11. }
  12. getFlags(){
  13. return il2cppApi.il2cpp_method_get_flags(this,0);
  14. }
  15. getMethodPointer(){
  16. return il2cppApi.il2cpp_method_get_pointer(this);
  17. }
  18. getMethodPointerOffsetToInt(){
  19. let methodPointer = this.getMethodPointer();
  20. // log("methodPointer:"+methodPointer);
  21. if (methodPointer.isNull()){
  22. return 0;
  23. }
  24. let baseAddr = Module.findBaseAddress(soName);
  25. return methodPointer - baseAddr;
  26. }
  27. getMethodPointerOffset(){
  28. let methodPointer = this.getMethodPointer();
  29. log("methodPointer:"+methodPointer);
  30. if (methodPointer.isNull()){
  31. return "0x0";
  32. }
  33. let baseAddr = Module.findBaseAddress(soName);
  34. let number = methodPointer-baseAddr;
  35. return number.toString(16).toUpperCase();
  36. }
  37. getSlot(){
  38. return this.add(METHOD_INFO_OFFSET_SLOT).readU16();
  39. }
  40. name(){
  41. return il2cppApi.il2cpp_method_get_name(this).readCString();
  42. }
  43. getParamCount(){
  44. return il2cppApi.il2cpp_method_get_param_count(this);
  45. }
  46. getParam(index){
  47. return il2cppApi.il2cpp_method_get_param(this,index);
  48. }
  49. getParamName(index){
  50. return il2cppApi.il2cpp_method_get_param_name(this,index).readCString();
  51. }
  52. /**
  53. * 获取返回类型
  54. * @returns {Il2CppType}
  55. */
  56. getReturnType(){
  57. return il2cppApi.il2cpp_method_get_return_type(this);
  58. }
  59. is_generic(){
  60. return il2cppApi.il2cpp_method_is_generic(this);
  61. }
  62. is_inflated(){
  63. return il2cppApi.il2cpp_method_is_inflated(this);
  64. }
  65. getClass(){
  66. return new Il2CppClass(il2cppApi.il2cpp_method_get_class(this));
  67. }
  68. invoker_method() {
  69. return this.add(0x8).readPointer();
  70. }
  71. }