zoukankan      html  css  js  c++  java
  • 使用嵌入式汇编实现系统调用

    /* 使用嵌入式汇编代码实现fork及getpid系统调用 */
     1 #include <stdio.h>
     2 
     3 int main() {
     4         int my_pid = 0;
     5         int fork_id = 0;
     6 
     7         do {
     8         __asm__ __volatile__ (
     9           "mov $0x02, %%eax
    	"
    10           "int $0x80
    	"
    11           : "=a"(fork_id)
    12         );
    13         } while(my_pid < 0);
    14         __asm__ __volatile__ (
    15           "mov $20, %%eax
    	"
    16           "int $0x80
    	"
    17           : "=a"(my_pid)
    18         );
    19         if(fork_id == 0) {
    20                 printf("child pid : %d
    ", my_pid);
    21         } else {
    22                 printf("parent pid : %d
    ", my_pid);
    23         }
    24 }
    # 执行结果如下
    1
    [local@localhost ~]$ ./a.out 2 child pid : 24168 3 parent pid : 24167 4 [local@localhost ~]$ ./a.out 5 parent pid : 24169 6 child pid : 24170

    说明:

    使用嵌入式汇编实现系统调用的核心在于: 1. 将系统调用的功能号写入%eax寄存器; 2. 调用系统中断'init 0x80'。 如果系统调用带有参数,需在调用系统中断之前, 将参数依次放入%ebx, %ecx, %edx, %esi, %edi中即可。

  • 相关阅读:
    Java核心技术-映射
    Java核心技术-具体的集合
    Java核心技术-继承
    Spring MVC 起步
    最小化Spring XML配置
    装配Bean
    Bean和Spirng模块
    Spring入门
    git学习笔记
    CISCN2018-WP
  • 原文地址:https://www.cnblogs.com/long3216/p/4374256.html
Copyright © 2011-2022 走看看