钟晶晶 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

工作过程

以41号进程dup为例,说明在应用程序如何使用Linux的系统调用。dup()复制一个打开的文件描述符,并返回一个新描述符,二者都指向同一个打开的文件句柄。系统会保证新描述符一定是编号低最低的未使用文件描述符。
使用库函数API调用dup()的程序:

使用C语言嵌入汇编代码来实现调用dup():

第一条汇编语句将立即数复制到寄存器edi,用作dup()的参数,表示要复制的描述符;
第二条汇编语句将立即数41复制到寄存器eax,41是dup()在内核中的系统调用号;
第三条汇编语句执行中断指令int,从用户态切换到内核态,发起系统调用;
第四条汇编语句将寄存器eax中保存的系统调用返回值复制fd,表示复制的新描述符。

可以看出上面两个小程序的功能是等价的,复制得到的新描述符值都是3,因为文件描述符0、1和2分别用作标准输入,标准输出和标准输出。

系统调用的三层皮:

API、中断向量对应的system_call、中断服务程序sys_xyz

当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数,在Linux中是通过执行int $0x80来执行系统调用的,这条汇编指令产生向量为128的编程异常。(Intel Pentium II中引入了sysenter指令(快速系统调用),2.6已经支持)内核实现了很多不同的系统调用,进程必须指明需要哪个系统调用,这需要传递一个名为系统调用号的参数,使用eax寄存器(系统调用号将xyz()和sys_xyz()关联起来了)

系统调用的参数传递方法

system_call是linux中所有系统调用的入口点,每个系统调用至少有一个参数,即由eax传递的系统调用号
一个应用程序调用fork()封装例程,那么在执行int $0x80之前就把eax寄存器的值置为2(即__NR_fork)
这个寄存器的设置是libc库中的封装例程进行的,因此用户一般不关心系统调用号
进入sys_call之后,立即将eax的值压入内核堆栈

寄存器传递参数具有如下限制:
1)每个参数的长度不能超过寄存器的长度,即32位
2)在系统调用号(eax)之外,参数的个数不能超过6个(ebx, ecx,edx,esi,edi,ebp)
超过6个怎么办?

如果超过6个,就把某一个寄存器作为一个指针,指向一块内存,进入到内核态之后可以访问到所有的地址空间,通过内存来传递参数

转载于:https://www.cnblogs.com/yingtaotao/p/6566651.html

实验四:汇编代码调用系统调用的工作过程相关推荐

  1. 20145231熊梓宏 《网络对抗》 实验四 恶意代码分析

    20145231熊梓宏 <网络对抗> 实验四 恶意代码分析 基础问题回答 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操 ...

  2. 20155235 《网络攻防》 实验四 恶意代码分析

    20155235 <网络攻防> 实验四 恶意代码分析 实验目的 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具 ...

  3. 20155222卢梓杰 实验四 恶意代码分析

    实验四 恶意代码分析 1.系统运行监控 实验步骤如下 1.使用批处理监控程序连接网络的状况 在C盘要目录下建一个文件c:\netstatlog.bat,内容如下: date /t >> c ...

  4. 实验四 恶意代码技术

    学   号201421460014 中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学 ...

  5. 实验四 恶意代码技术

    实验报告 四 学   号   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 ...

  6. 实验四 恶意代码

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 冷其航 年级 14级 区队 ...

  7. 实验四恶意代码分析技术 201421430029

    学   号:201421430029   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术   ...

  8. 实验四——恶意代码技术

    学   号   201421430035   中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术 ...

  9. 利用VMware虚拟机,用汇编语言编写代码调用系统调用并输出

    section .datamsg db 'Press any key to continue...', 0section .textglobal _start_start:; 显示消息mov eax, ...

最新文章

  1. 【摘录】GestureDector使用
  2. Vmo前端数据模型设计
  3. PowerDesigner 连接MySQL数据库详细步骤
  4. ImportError: No module named protobuf
  5. 自动以及手动清除手机垃圾文件
  6. 如何优雅地处理 EF Core 异常
  7. Python学习笔记——基础篇【第五周】——模块
  8. WinLicense下载购买地址
  9. vs2019安装python库_vs2019安装和使用详细图文教程
  10. 【论文笔记】基于LSTM的问答对排序
  11. Python3通过Everything SDK访问本地文件
  12. es java 模糊查询_java使用elasticsearch进行模糊查询
  13. Speedoffice(excel)如何根据身份证号计算年龄
  14. 91.v6p.co index.php,海洋cms V6.61
  15. NBSI2内部功能实现大揭谜 1
  16. java程序设计期末考试试题汇总及答案_《JAVA程序设计》期末考试试题汇总及答案...
  17. 用文氏图来理解卷积神经网络如何决定提取哪些特征
  18. iOS开发之音视频边下边播缓存方案
  19. vue中的路由跳转和传参
  20. 当前页面的video只播放一个

热门文章

  1. 路由器配置与管理完全手册(H3C篇)学习感想
  2. vaspkit使用_VASPKIT校正气体分子自由能
  3. Xilinx基于模型的设计工具—Model Composer
  4. Vivado级联Modelsim仿真Re-launch问题
  5. DSP与FPGA间简单通信时序
  6. FPGA开发综合技巧
  7. 网络爬虫---json编码和解码
  8. 自编码之残差和磁力线网络结构
  9. 语音识别|基于CNN+DFSMN(简化版:标量+无步长因子)的声学模型实现及代码开源(keras)
  10. python模块学习(四)