You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:54:06