linux 汇编2-关于寄存器及系统调用

后续主要在linux操作系统下学习基于X86的32位汇编语言

32位的X86处理器中有8个32位的通用寄存器(EAX、EBX、ECX、EDX、ESI、)EDI、ESP、EBP),由于历史的原因,EAX通常用于计算,ECX通常用于循环变量计数。ESPEBP有专门用途,ESP指示栈指针(用于指示栈顶位置),而EBP则是基址指针(用于指示子程序或函数调用的基址指针)。

主要寄存器如下图所示

如图中所示,EAX、EBX、ECX和EDX的前两个高位字节和后两个低位字节可以独立使用,也就是AX、BX、CX、DX作为16位寄存器使用,其中16位又被独立分为H和L部分,可以作为8位寄存器使用,这样做的原因主要是考虑兼容16位的程序。使用寄存器时,其名称大小写是不敏感的EAXeax没有区别

2. 系统调用

系统调用是用户空间访问内核的唯一手段;除了异常和陷入外,他们是内核唯一的合法入口程序员需要直接操作硬件,拥有的唯一接口是操作系统内核本身。为了使用汇编构建有用的程序,我们需要使用内核提供的linux系统调用(systemcall)。这些系统调用是内置在操作系统中的库,提供例如从键盘读取和输出到屏幕的函数。

在linux中,每个系统调用都被赋予一个独一无二的系统调用号。当用户空间的进程执行一个系统调用的时候,这个系统调用号就用来指明到底是要执行哪个系统调用:进程不会提及调用的名称。

当你调用一个系统调用,内核将立即暂停你的程序的执行。它将通过必要的驱动需要在硬件上执行你请求的任务然后将控制权还给你的程序。

通过将想要执行的函数号(操作码)存入到EAX寄存器以及将想传给系统调用的参数填充到剩余的寄存器,我们可以在汇编中完成系统调用。一个软件被请求INT命令中断,内核接管后使用我们的参数从库调用函数。

X86平台上,Linux在通过软中断指令int 0x80进行系统调用时(在Intel Pentium II 以后又引入了sysenter指令,调用号存在于EAX中,第一个参数存在于EBXECXEDXESiEDI来依次传递最多五个参数

常用调用号如下:

举个例子,请求一个中断,当EAX寄存器为1时,将调用sys_exit,当EAX寄存器为4时将调用sys_write代替。如果函数需要,EBX,ECX和EDX将作为参数传递。

回过头再看第一个汇编helloWorld源程序

图中 1 部分:将使用系统调用sys_write来输出我们的消息到控制台窗口。这个函数在linux系统调用表中的操作码被分配为4,所以代码就是: mov eax,4

这个函数也带有三个参数,在请求中断来执行任务之前,将它们有序的存入EBX、EDX,ECX三个寄存器中。

传递的参数如下:

  • EBX将被存入我们想写入的文件(在本例中为标准化输出STDOUT)
  • ECX将被存入我们在 .data 段创建的变量的地址
  • EDX将被存入字符串的长度

图中 2部分:使用系统调用sys_exit 终止进程来退出程序

每一行都有英文的注释, 通过这次的学习是不是又理解的更清楚了

相关文章

「高频考点」系统软件

系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统,此次教师网对系统软件这一知识点进行了归纳汇总,具体内容如下:...

1.2电脑的软件组成和功能。

软件只运行在电脑硬件上,用于实电脑高级功能的程序。用户通过软件才能对电脑进行控制和实现各种高级功能。电脑只有同时具备软件和硬件才可以正常工作。软件主要储存在外部储存中软件系统一部分操作系统软件。程序设...

学点汇编吧,它让你懂得更多

我是从学foxbase开始接触编程的(当foxbase是编程语言吧)。很容易学,不多久就可以就可以设计自己的数据库,配合简单的菜单来操控数据库:增加、删除、插入、排序、查找、打印都得心应手,觉得编程好...

黄河水利委员会规划部署业务软件统一及仪器设备集成工作

人民网北京3月25日电 (记者王仁宏)近日,黄河水利委员会水文局组织召开新技术统一与新仪器集成安排部署会,规划部署业务软件统一及仪器设备集成工作。会议指出,近年来,黄委水文局强力推进水文测报新技术应用...

UNIX系统简介

Unix是一个操作系统,它是Ubuntu、Solaris、POSIX等所有操作系统的基础。它是在20世纪70年代由肯·汤普森(Ken Thompson)、丹尼斯·里奇(Dennis Ritchie)和...