zoukankan      html  css  js  c++  java
  • 20135202闫佳歆--week4 两种方式使用同一个系统调用--实验及总结

    实验四 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    在这里我选择的是第20号系统调用,getpid。

    1.使用库函数API:

    代码如下:

    /* getpid.c */
    #include <unistd.h>
    #include <stdio.h>
    
    int main()
    {
    	pid_t pid;
    	pid = getpid();
    	printf("pid = %d 
    ",pid);
    	return 0;
    }
    

    返回的是目前进程的进程识别码。运行结果如下:
    enter description here

    2.嵌入汇编:

    代码如下:

    /* getpid_asm.c */
    #include <unistd.h>
    #include <stdio.h>
    
    int main()
    {
    	pid_t pid;
    	pid = getpid();
    	asm volatile(
                "mov $0x14,%%eax
    	" /* 将系统调用号20放入eax中。 */
                "int $0x80
    	" /* 中断向量号0x80,即128。int 128 执行系统调用。 */
                "mov %%eax,%0
    	" /* 返回值保存在eax中,将它赋值给pid */
                : "=m" (pid)   
            );  
    	printf("pid = %d 
    ",pid);
    	return 0;
    }
    

    汇编原理:
    getpid系统调用是第20号,所以首先要将这个系统调用号放入eax寄存器中,然后使用int 128指令执行系统调用,这时就会执行eax中的第20号系统调用。返回值是保存在eax寄存器中,所以把它赋值给0号也就是pid。

    运行结果:
    enter description here

    3.系统调用的工作机制学习总结

    请走链接→week4学习笔记

  • 相关阅读:
    在Windows服务器上开启SNMP代理程序
    动态哈希
    redis 配置文件详解
    查询优化原则
    索引建立原则
    Oracle执行计划详解
    Oracle start with connect by prior 用法
    正则表达式--特殊需求表达式
    正则表达式--检验数字的表达式
    正则表达式--检验字符的表达式
  • 原文地址:https://www.cnblogs.com/20135202yjx/p/5281233.html
Copyright © 2011-2022 走看看