陈铁 + 原创作品转载请注明出处 + 《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进行系统调用过程简析相关推荐

  1. Nutch学习笔记二——抓取过程简析

    在上篇学习笔记中http://www.cnblogs.com/huligong1234/p/3464371.html 主要记录Nutch安装及简单运行的过程. 笔记中 通过配置抓取地址http://b ...

  2. Android 启动过程简析

    首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...

  3. Linux: 设备节点创建移除过程简析

    文章目录 1. 前言 2. 分析背景 3. 设备节点的创建和移除 3.1 通过 devtmpfs 创建移除设备节点 3.1.1 devtmpfs 初始化 3.1.2 通过 devtmpfs 创建设备节 ...

  4. Android 启动过程简析(一)之 init 进程

    问题 在进入到 Android 启动过程之前先让我们思考以下几个问题 Android 系统的启动过程是怎样的? init .zygote 进程是什么?在系统启动的过程中各自发挥了什么作用? AMS.P ...

  5. Andriod广播注册接收过程简析

    为了利于各个进程应用之间的通信,android提供了一个很方便的处理方式:广播机制.广播机制顾名思义,就是广播发送者无需判断具体某个接收者的存在,把广播发送出去,任务即完成.这样保证了有效通信的同时又 ...

  6. DirectShow程序运行过程简析

    这段时间一直在学习陆其明老师的<DirectShow开发指南>一书,书中对DirectShow的很多细节讲解清晰,但是却容易让人缺少对全局的把握.在学习过程中,整理了关于DirectSho ...

  7. RAP开发入门-运行过程简析(三)

    今天通过标准的RAP程序来简单分析下RAP的启动过程 1.新建一个标准的rap plugin-in 项目: 得到的项目结构大概如下: run confi..->..add bundle(配置好b ...

  8. 移动通信:1G到5G发展过程简析 -- 什么是5G?

    未来,5G,或将是一切的基础~ 一.什么是5G? 5G的全称是:第五代移动通信技术.英文对应翻译为"5th generation mobile networks"或"5t ...

  9. NXP芯片 i.MX系列Uboot 移植过程简析

    我们拿到芯片厂商提供的软件,经常要根据自己的需要移植到自己设计的板子上,因为自己设计的开发板难免会与官方给出的存在差异.在这里我简单地介绍下,uboot的移植过程,在这里还是以NXP i.MX 的芯片 ...

  10. Springsecurity之认证过程简析

    2019独角兽企业重金招聘Python工程师标准>>> 注:分析的Springsecurity版本是4.3.x,源码可自行到github上去下载. 先上一张图,如下图1.1所示: 图 ...

最新文章

  1. 浅析校园安防视频监控设备发展趋势
  2. java 取绝对值_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性
  3. 你爱我吗? | 今日最佳
  4. Python中print函数的使用
  5. 2018年华尔街高盛、花旗等投行业绩创新高!
  6. matlab对主动悬架的仿真分析,运用MatlabSimulink对主动悬架力学仿真与分析.doc
  7. Bilibili 2000W用户信息爬取
  8. hpsocket错误码对照表
  9. oracle 12c的PDB数据库未打开
  10. 计算机专业立项课题研究,计算机类课题研究选题参考
  11. Sun jdk、Open jdk、Icedtea jdk 之间的关系
  12. bluefish编辑器的配置
  13. 快门光圈感光度口诀_基础教程之单反设置篇:60秒让你设置好快门光圈以及感光度...
  14. 基于docker的redis4.0单机集群搭建
  15. AI人工智能毕业设计课题:动物识别系统
  16. iOS组件化中xib转nib
  17. 纯CSS3制作漂亮的价格表
  18. 教程篇(7.2) 11. 安全架构 FortiGate安全 ❀ Fortinet网络安全专家 NSE4
  19. webdriver启动chrome浏览器后打不开URL
  20. 《HarmonyOS开发 - IPC Camera开发笔记》第2章 HiSpark IPC Camera开发环境搭建(基于V1.1.4)

热门文章

  1. python一定要有主函数_Python 为什么没有 main 函数?为什么我不推荐写 main 函数?...
  2. wget ip_图解IP防护等级
  3. 标签生成html怎么转换,如何进行HTML到XML转换以生成封闭标签?
  4. python通过什么对象连接数据库_介绍Python 数据库的Connection、Cursor两大对象
  5. datanode启动后闪退_网友吐槽12306 App:不同意获取个人信息就会“闪退”
  6. ffmpeg 推流同时录像命令_使用FFmpeg将rtsp流摄像头视频转码为rtmp播放
  7. python 数据库框架peewee_Python:轻量级 ORM 框架 peewee 用法详解之——增删改查
  8. 待更新内容mongodb
  9. cpu(s)和%CPU的的区别
  10. van-cell 取消点击_支付宝平安好医保怎么样?怎么报销?靠谱吗?怎么取消?_保险测评...