《Linux内核分析》 week4作业-使用嵌入式汇编调用一个系统调用

一.fork的嵌入式汇编执行

#include <stdio.h>
#include <unistd.h>

int main(){
    pid_t pid;

    asm volatile(
        "mov $0,%%ebx\n\t"
        "mov $0x2,%eax\n\t"
        "int 0x80\n\t"
        "mov %%eax,%0\n\t"
        :"=m"(tt)
    );

    if(pid==0){
        printf("child is running..\n");
    }
    else{
        printf("father is running...\n");
    }
}

二.read的系统调用(带参数的系统调用)

int read(int fd,char buf[],int len){
     int ret;
     asm volatile(
         "mov %3,%%edx\n\t" //count->edx
         "mov %2,%%ecx\n\t" //buf->ecx
         "mov %1,%%ebx\n\t" //fd->ebx
         "mov $0x3,%%eax\n\t"
         "int $0x80\n\t"
         :"=m"(ret)
         :"b"(fd),"c"(buf),"d"(count)
     );
     return ret;
}

三.实验总结

通过这次实验,让我更加深刻地理解了系统调用的执行原理。当我们应用程序调用一个系统调用时,会触发一个int $0x80中断,由用户态进入内核态,同时由eax传入系统调用号,来最终使内核确定执行相应的内核程序。

时间: 2024-10-12 22:42:15

《Linux内核分析》 week4作业-使用嵌入式汇编调用一个系统调用的相关文章

LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 黄韧(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 回顾: [计算机三个法宝] 1)存储程序计算机 2)函数调用堆栈 3)中断 [操作系统两把宝剑] 1)中断上下文的切换:保存现场和恢复现场 2)进程上下文的切换 一.使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开

《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS

构造一个简单的Linux系统MenuOS 一.linux内核源代码简介 三大法宝(存储程序计算机.函数调用堆栈.中断)和两把宝剑(中断上下文的切换:保存现场和恢复现场.进程上下文的切换) 1.在linux内核源码里面arch占有的代码量相当庞大.arch/x86目录下的代码是我们重点关注的. 2.内核启动相关的代码基本都在init目录下(main.c). start_kernel是初始化linux内核的起点. start_kernel相当于c程序中的main函数 3.linux内核的核心代码在k

Linux内核分析期中总结

Linux内核分析期中知识点总结 1.计算机是如何工作的? 存储程序计算机工作模型 X86汇编基础 汇编一个简单的C程序分析其汇编指令执行过程 2.操作系统是如何工作的? 函数调用堆栈 借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断 在mykernel基础上构造一个简单的操作系统内核 3.构造一个简单的Linux系统MenuOS Linux内核源代码简介 构造一个简单的Linux系统 跟踪调试Linux内核的启动过程 4.扒开系统调用的三层皮(上) (一)用户态.内核态和中断处

Linux内核分析期中知识点总结

Linux内核分析期中知识点总结 1. 计算机是如何工作的 存储程序计算机工作模型:冯诺依曼体系结构 X86汇编基础 会变一个简单的C程序分析其汇编指令执行过程 2. 操作系统是如何工作的 函数调用堆栈 模拟存储程序计算机工作模型和时钟中断 在mykernel基础构建一个简单的操作系统 3.构造一个简单的Linux系统 Linux内核源代码 构造一个简单的Linux系统 跟踪调试Linux内核的启动过程 4. 系统调用 用户态.内核态和中断 系统调用概述 使用库函数API和C代码中嵌入汇编代码触

魏昊卿——《Linux内核分析》第二周作业:了解操作系统是怎样工作的

魏昊卿——<Linux内核分析>第二周作业:了解操作系统是怎样工作的 一.实验部分 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单的时间片轮转多道程序内核代码 mymain.c myinterr

Linux内核分析第五周作业

分析system_call中断处理过程 这次的目标是通过gdb来跟踪上周选择的uname系统调用.因为系统调用是通过中断在内核态实现的,gdb无法调试本机的系统调用.所以必须像之前的内核跟踪那样,用gdb远程连接至qemu虚拟机进行跟踪. 1. 首先修改之前的MenuOS,添加一个myuname函数通过API的方式调用uname系统调用,直接复制了上周的代码,注意要在main函数中把这个函数添加到菜单中 用make命令编译以后,会生成一个test的可执行文件,可以先在本地运行试一试 可以看到命令

[Linux内核分析第一周课程] 由C语言程序的汇编表示观察CPU寄存器与内存的互动

孟宁<Linux内核分析>第一周实验 作者:Zou Le 原创作品转载请注明出处. 课程信息: <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ---------------------------实验正文--------------------------- 本实验在实验楼64位LIinux虚拟机下进行. C代码如下: int increment5(int x) { return x + 5; }

魏昊卿——《Linux内核分析》第三周作业:Linux系统启动过程

魏昊卿——<Linux内核分析>第三周作业:Linux系统启动过程 一.实验部分 实验指导 使用实验楼的虚拟机打开shell 1 cd LinuxKernel/ 2 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 内核启动完成后进入menu程序(<软件工程C编码实践篇>的课程项目),支持三个命令help.version和quit,您也可以添加更多的命令,对选修过<软件工程C编码实践篇>

Linux内核分析作业(1)——计算机是如何工作得?

根据163MOOC学院中国科学技术大学孟宁孟老师课程所写得博客 作者:肖冲冲 原创作品请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,计算机的工作过程 计算机的基本原理是存储程序和程序控制(冯﹒诺依曼体系),简单来说,我们需要先把需要进行操作的指令(程序)和数据先输入到计算机的存储设备中,然后计算机将严格执行需要执行的指令,包括从那个地址取数(或指令),进行什么操作(加减移位等),然后再送回到什