2.3 模块 (Module)
由Module.load()和Process.enumerateModules()返回的对象。
name: 字符串,模块的标准名base:NativePointer,基地址size: 数字,大小,单位字节path: 字符串,完整的系统路径enumerateImports(): 枚举导入模块,返回一个对象数组,其中每个对象包含以下属性: *type: 字符串,function或variable*name: 字符串,导入名称 *module: 字符串,模块名 *address:NativePointer,模块的绝对地址 *slot:NativePointer,导入模块的内存位置 对于所有的导入,只有name属性是保证一定存在的。其他的属性会尽可能的解析,但不保证一定成功。enumerateExports(): 枚举导出模块,返回一个对象数组,其中每个对象包含以下属性: *type: 字符串,function或variable*name: 字符串,导出名 *address:NativePointer,绝对地址enumerateSymbols(): 枚举模块中的所有符号,返回一个对象数组,其中每个对象包含以下属性: *isGloable: 布尔值,指明该符号是否全局可见 *type: 字符串:unknown,section,undefined(Mach-O),absolute(Mach-O),prebound-undefined(Mach-O),indirect(Mach-O),object(ELF),function(ELF),file(ELF),common(ELF),tls(ELF)*section: 如果存在,则包含: *id: 字符串,包含节索引,段名,节名 *protection: 保护策略,和Process.enumerateRanges()里类似 *name: 字符串,符号名 *address:NativePointer,绝对地址 *size: 数字,符号的大小,单位字节enumerateRanges(protection): 和Process.enuerateRanges一样,不过范围是模块findExportByName(exportName),getExportByName(exportName): 返回导出的绝对地址,其中该导出的名称和exportName一致。若没有该导出,find类函数会返回null,get类函数会抛出异常Module.load(path): 从文件系统中加载指定模块,并返回一个模块对象。若目标对象无法加载,则会抛出异常Module.ensureInitialized(name): 确保指定模块的初始化部分被运行了。在早期注入中非常重要,这里的早期是指进程生命周期的早期。一个典型案例是与指定模块中ObjC类进行交互时使用。Module.findBaseAddress(name),Module.getBaseAddress(name): 返回指定名称的模块的基地址。若没有找到指定模块,find类函数会返回null,get类函数会抛出异常Module.findExportByName(moduleName|null, exportName),Module.getExportByName(moduleName|null, exportName): 返回模块ModuleName中exportName的导出的绝对地址。若你不知道具体是哪个模块,你可以传入null,不过这样搜索的开销会非常大,尽量不要这么做。若没有目标模块,find类函数会返回null,get类函数会抛出异常
Last updated