在使用IDA静态反汇编时,如果正在逆向的文件中有动态链接库函数(比如调用了程序自定义so库中的函数),IDA只会显示一个地址,跟进去会发现是延迟绑定中关于plt的代码,无法知道具体调用了哪个函数,对于逆向起来很是麻烦,本文介绍如何识别这样的函数。

按道理讲,虽然不能动态调试,静态分析不能看到运行时绑定的地址,但是具体动态链接的过程一定也是根据文件中的信息,所以静态也一定可以知道调用的是哪个函数,但是我没有发现如何使用IDA自动确定(如有高手麻烦留言告诉我),于是通过查阅《程序员的自我修养》动态链接相关内容,找到了识别动态链接库中函数的方法。需要识别的函数是sub_412160,如图所示:

从汇编代码点进去会发现是plt相关代码,在ARM64中,@page是取页440000(4kb整数),@PAGEOFF是取页内偏移20,简单来讲这段应该是取出440020地址存储的数据放X17,然后跳转过去,到了got.plt中。

这里面存的全是一样的地址,正如书中写的那样,都还没绑定具体运行时的地址,再跟两步发现到了地址是0的地方,就不理解了,可能是链接器的地址?

走了这么多弯路,跟完了延迟绑定的过程,下面来看如何识别出sub_412160。

ELF文件中存储了导入的所有函数符号信息,在IDAi的mport窗口中可以看到,不过IDA没有自动显示出来这些函数的地址,但在Linux下使用

readelf -sD 文件名| grep 小写地址

查看该文件可以看到地址动态符号的地址,grep查找一下就是所需要的识别的函数名。

ELF文件中还存储了needed的动态链接库,IDA中写在了该文件的最开始,向上拉窗口可以看到,我们只要从这些so库中找识别出的函数名即可。使用

grep -rn “函数名”

即可找到调用的哪个库中的哪个函数。

此外,还有这种形式的动态链接调用,再次挖坑做以记录碰到再研究。

https://reverseengineering.stackexchange.com/questions/9033/how-to-recognize-the-function-call-in-a-dynamic-lib

By Ascii0x03,转载请注明出处:http://www.cnblogs.com/ascii0x03/p/8313451.html

ida如何识别linux内核函数,如何识别IDA反汇编中动态链接库中的函数相关推荐

  1. 【Linux 内核】进程优先级与调度策略 ② ( 获取调度策略对应的进程优先级函数 | sched_get_priority_max 函数 | sched_get_priority_min 函数 )

    文章目录 一.获取进程优先级函数 二.调度策略参数 三.进程优先级说明 在上一篇博客 [Linux 内核]进程优先级与调度策略 ① ( SCHED_FIFO 调度策略 | SCHED_RR 调度策略 ...

  2. 【Linux 内核】调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )

    文章目录 一.yield_task 函数 ( 放弃 CPU 执行权限 ) 二.check_preempt_curr 函数 ( 检查进程是否可以被抢占 ) 三.task_struct 函数 ( 选择运行 ...

  3. Linux内核 eBPF基础:ftrace源码分析:过滤函数和开启追踪

    Linux内核 eBPF基础 ftrace基础:过滤函数和开启追踪 荣涛 2021年5月12日 本文相关注释代码:https://github.com/Rtoax/linux-5.10.13 上篇文章 ...

  4. 【Linux 内核 内存管理】mmap 系统调用源码分析 ④ ( do_mmap 函数执行流程 | do_mmap 函数源码 )

    文章目录 一.do_mmap 函数执行流程 二.do_mmap 函数源码 调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 & ...

  5. linux 内核 时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 图 1 RT-Linux结构 RT -Linux的关键技术是通过软件来模拟硬件的中断控制器.当Linux系统要封锁CPU的中断时时,RT-Linux中的实 ...

  6. 虹软人脸识别linux移植,虹软人脸识别的应用开发过程分享

    虹软的人脸识别是应用与离线开发的,因为不需要网络,所以它的识别速度较快. 好了,废话不多说,接下来就开始教大家怎样使用了. 首先就是去官网申请APPKEY,各种密匙,然后在下载jar包,这些就不一一给 ...

  7. 【Linux 内核】Linux 内核源码几个重要的入口源文件及函数介绍 ( 系统初始化 | 内存管理 | 虚拟文件系统 | 网络管理 )

    文章目录 一.系统初始化 二.内存管理 三.虚拟文件系统 四.网络管理 一.系统初始化 系统初始化 的入口源码是 " linux-5.6.18\init\ " 目录下的 main. ...

  8. linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统

    一./etc/fstab文件的作用 某些时候当Linux系统下划分了新的分区后,需要将这些分区设置为开机自动挂载,否则,Linux是无法使用新建的分区的. /etc/fstab 文件负责配置Linux ...

  9. linux内核mount过程超复杂的do_mount()、do_loopback()、attach_recursive_mnt()、propagate_mnt()函数详解

    linux内核mount过程复杂的do_loopback().attach_recursive_mnt().propagate_mnt()函数详解 本文对mount过程流程做了较详细的解释.首先以mo ...

最新文章

  1. Windows通过VNC访问Kylin桌面环境
  2. 密度聚类(Density peaks Clustering)Python实现
  3. .net mvc mssql easyui treegrid
  4. Requests 2.18.1文档
  5. html表格宽度拖拽,Js拖拽实现改变Table的列宽解决方案
  6. 猎豹MFC--CFile类家族介绍ADO连接数据库 打开数据库 关闭数据库 连接字符串
  7. asp.net js 提示信息封装函数
  8. 关于计算机组件游戏,Windows系统运行库/游戏运行库组件怎么补全?
  9. java安装后在哪里打开_java安装后怎么打开教程
  10. 回顾经典: AlexNet, CaffeNet — Winner of ILSVRC 2012
  11. 计算机仿真软件multisim,电路仿真软件哪个好?2019电路仿真软件推荐
  12. 打开我的收藏夹 -- Python时间序列分析篇
  13. 制作和删除软RAID
  14. 我的2018:微信朋友圈的24个瞬间
  15. 写在2022的尾巴上
  16. 中文分词多领域语料库
  17. 接口隔离原则:接口里的方法,你都用得到吗?
  18. 大数据学前准备--zookeeper详解与集群搭建(保姆级教程)
  19. 2021UpdateC#.NET笔试题高级进阶篇
  20. HelloGitHub 开源月刊(第 55 期):终端“百战天虫”,来战?

热门文章

  1. 吉林大学2021计算机专业考研方向,注意!2021计算机考研这些院校专业有变更
  2. (linux-x86-ARM)麒麟V10安装DBeaver21.3通用的数据库管理工具和 SQL 客户端
  3. 个人网络信息安全管理方法
  4. Android权限详解,权限整理
  5. 编写一个单科学生成绩处理程序
  6. Ubuntu 20.04.2.0 LTS 下安装Geany 1.36的命令列表
  7. 电商APP首页楼层架构设计详解
  8. MongoDB单机集群搭建
  9. 一位工作一年的程序员的2021年度总结
  10. 技嘉电脑怎么开启vt模式?