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中即可。

  • 相关阅读:
    85. Maximal Rectangle
    120. Triangle
    72. Edit Distance
    39. Combination Sum
    44. Wildcard Matching
    138. Copy List with Random Pointer
    91. Decode Ways
    142. Linked List Cycle II
    异或的性质及应用
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/long3216/p/4374256.html
Copyright © 2011-2022 走看看