使用GDB进行系统调用过程简析
陈铁 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
作业的难度在增加,实验楼的虚拟机不太稳定,经常用着用着就不能操作了。没有细致研究,于是就在VirtualBox下新建了虚拟机,还算顺利。下载了Ubuntu的mini.iso,结果界面全是Debian的,选择高级里的Xfce,虽然全部下载使安装过程有点长,不过安装完之后没有太多的问题,就达到了实验楼同样的效果。于是下载了最新的kernel,git clone了老师的最小linux的menuos。加上自己的系统程序。环境就打好了。
有图有真相。
系统运行起来了:
重新启动GDB,设置断点sys_getuid.
(gdb) break sys_getuid
Breakpoint 1 at 0xc1054340: file kernel/sys.c, line 857.
代码如下:
SYSCALL_DEFINE0(getuid)
{
/* Only we change this so SMP safe */
return from_kuid_munged(current_user_ns(), current_uid());
}
执行GDB命令finish,结果如下:
Run till exit from #0 sys_getuid () at kernel/sys.c:859
<signal handler called>
Value returned is $1 = 0
返回当前用户的ID存在变量中是0;
显示一下代码
(gdb) list
424 sysenter_do_call:
425 cmpl $(NR_syscalls), %eax
426 jae sysenter_badsys
427 call *sys_call_table(,%eax,4)
428 sysenter_after_call:
429 movl %eax,PT_EAX(%esp)
430 LOCKDEP_SYS_EXIT
431 DISABLE_INTERRUPTS(CLBR_ANY)
432 TRACE_IRQS_OFF
433 movl TI_flags(%ebp), %ecx
由于getuid命令直接调用的sys_getuid系统调用例程,所以可以直接中断到相应的函数,但是getuid-asm直接使用的中断int 0x80.所以可以使用break sysenter_do_call。
总结,通过自己利用老师的代码,套用一下,就可以在最小的linux系统下编写底层的命令,虽然无法完全分析明白运行的机制,但是粗略的可以懂得系统调用的大致过程,内核将经常使用的和硬件交互的代码封装为服务例程,并且对用户提供系统调用表,只要知道相应的编号对应什么样的系统功能,就可以通过传入编号给eax寄存器,使用系统调用的中断号int0x80就可以的到想要的结果。进一步,甚至可以将自己的特定代码保存为内核例程,编译在内核中,随时供用户调用。
转载于:https://blog.51cto.com/swordautumn/1627866
使用GDB进行系统调用过程简析相关推荐
- Nutch学习笔记二——抓取过程简析
在上篇学习笔记中http://www.cnblogs.com/huligong1234/p/3464371.html 主要记录Nutch安装及简单运行的过程. 笔记中 通过配置抓取地址http://b ...
- Android 启动过程简析
首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...
- Linux: 设备节点创建移除过程简析
文章目录 1. 前言 2. 分析背景 3. 设备节点的创建和移除 3.1 通过 devtmpfs 创建移除设备节点 3.1.1 devtmpfs 初始化 3.1.2 通过 devtmpfs 创建设备节 ...
- Android 启动过程简析(一)之 init 进程
问题 在进入到 Android 启动过程之前先让我们思考以下几个问题 Android 系统的启动过程是怎样的? init .zygote 进程是什么?在系统启动的过程中各自发挥了什么作用? AMS.P ...
- Andriod广播注册接收过程简析
为了利于各个进程应用之间的通信,android提供了一个很方便的处理方式:广播机制.广播机制顾名思义,就是广播发送者无需判断具体某个接收者的存在,把广播发送出去,任务即完成.这样保证了有效通信的同时又 ...
- DirectShow程序运行过程简析
这段时间一直在学习陆其明老师的<DirectShow开发指南>一书,书中对DirectShow的很多细节讲解清晰,但是却容易让人缺少对全局的把握.在学习过程中,整理了关于DirectSho ...
- RAP开发入门-运行过程简析(三)
今天通过标准的RAP程序来简单分析下RAP的启动过程 1.新建一个标准的rap plugin-in 项目: 得到的项目结构大概如下: run confi..->..add bundle(配置好b ...
- 移动通信:1G到5G发展过程简析 -- 什么是5G?
未来,5G,或将是一切的基础~ 一.什么是5G? 5G的全称是:第五代移动通信技术.英文对应翻译为"5th generation mobile networks"或"5t ...
- NXP芯片 i.MX系列Uboot 移植过程简析
我们拿到芯片厂商提供的软件,经常要根据自己的需要移植到自己设计的板子上,因为自己设计的开发板难免会与官方给出的存在差异.在这里我简单地介绍下,uboot的移植过程,在这里还是以NXP i.MX 的芯片 ...
- Springsecurity之认证过程简析
2019独角兽企业重金招聘Python工程师标准>>> 注:分析的Springsecurity版本是4.3.x,源码可自行到github上去下载. 先上一张图,如下图1.1所示: 图 ...
最新文章
- 浅析校园安防视频监控设备发展趋势
- java 取绝对值_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性
- 你爱我吗? | 今日最佳
- Python中print函数的使用
- 2018年华尔街高盛、花旗等投行业绩创新高!
- matlab对主动悬架的仿真分析,运用MatlabSimulink对主动悬架力学仿真与分析.doc
- Bilibili 2000W用户信息爬取
- hpsocket错误码对照表
- oracle 12c的PDB数据库未打开
- 计算机专业立项课题研究,计算机类课题研究选题参考
- Sun jdk、Open jdk、Icedtea jdk 之间的关系
- bluefish编辑器的配置
- 快门光圈感光度口诀_基础教程之单反设置篇:60秒让你设置好快门光圈以及感光度...
- 基于docker的redis4.0单机集群搭建
- AI人工智能毕业设计课题:动物识别系统
- iOS组件化中xib转nib
- 纯CSS3制作漂亮的价格表
- 教程篇(7.2) 11. 安全架构 FortiGate安全 ❀ Fortinet网络安全专家 NSE4
- webdriver启动chrome浏览器后打不开URL
- 《HarmonyOS开发 - IPC Camera开发笔记》第2章 HiSpark IPC Camera开发环境搭建(基于V1.1.4)
热门文章
- python一定要有主函数_Python 为什么没有 main 函数?为什么我不推荐写 main 函数?...
- wget ip_图解IP防护等级
- 标签生成html怎么转换,如何进行HTML到XML转换以生成封闭标签?
- python通过什么对象连接数据库_介绍Python 数据库的Connection、Cursor两大对象
- datanode启动后闪退_网友吐槽12306 App:不同意获取个人信息就会“闪退”
- ffmpeg 推流同时录像命令_使用FFmpeg将rtsp流摄像头视频转码为rtmp播放
- python 数据库框架peewee_Python:轻量级 ORM 框架 peewee 用法详解之——增删改查
- 待更新内容mongodb
- cpu(s)和%CPU的的区别
- van-cell 取消点击_支付宝平安好医保怎么样?怎么报销?靠谱吗?怎么取消?_保险测评...