码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2016-03-20 19:39:28      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

/* getpid.c */
#include <unistd.h>
#include <stdio.h>

int main()
{
    pid_t pid;
    pid = getpid();
    printf("pid = %d \n",pid);
    return 0;
}

上面是使用函数库API

运行结果:

技术分享

下面是嵌入汇编代码:

/* getpid_asm.c */
#include <unistd.h>
#include <stdio.h>

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

运行结果:

技术分享

总结:

1.应用程序、封装例程、系统调用处理程序及系统调用服务例程之间的关系。如图:

技术分享

 

系统调用的参数传递:

  • 函数调用——压栈
  • 用户态到内核态——寄存器传递。
    每个参数长度不能超过32位,个数不能超过6个。
    超过的话?
    使某个寄存器中存储指针,指向内存,内存中存储参数。

 

20135108 李泽源

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

标签:

原文地址:http://www.cnblogs.com/jorilee/p/5299220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!