如何使用Frida查询so动态库中的所有导出函数
Frida查询SO动态库全部导出函数的方法
Frida 提供了内置API可以直接枚举SO的所有导出项,不需要手动解析ELF文件结构,操作步骤如下:
核心API说明
使用模块对象的enumerateExports()方法即可获取对应SO的全部导出符号,返回的数组中每个元素包含三个核心字段:
type:导出类型,值为function(函数)或variable(变量)name:导出符号的名称address:导出符号对应的内存地址
完整代码示例
示例1:打印libc.so所有导出符号
// 先获取已加载的libc.so模块对象 const targetSo = Process.getModuleByName("libc.so"); // 枚举所有导出项 const exportList = targetSo.enumerateExports(); // 遍历输出所有导出信息 exportList.forEach(item => { console.log(`[${item.type}] ${item.name} => ${item.address}`); });
示例2:仅过滤导出函数(忽略导出变量)
如果只需要查询函数类导出,增加类型判断即可:
const targetSo = Process.getModuleByName("libc.so"); const exportFunctions = targetSo.enumerateExports().filter(item => item.type === "function"); exportFunctions.forEach(func => { console.log(`函数名:${func.name},内存地址:${func.address}`); });
补充说明
如果你不确定目标SO的准确加载名称,可以先执行以下代码枚举当前进程所有已加载的动态库:
Process.enumerateModules().forEach(mod => { console.log(mod.name); });
你之前使用的Module.findExportByName("libc.so", "fopen")本质是单个导出符号的快捷查询方法,和enumerateExports()的底层逻辑一致,只是返回结果做了单条过滤。
内容的提问来源于stack exchange,提问作者vtable
相关产品推荐
相关产品推荐

