3

可能重复:
包装函数的内联汇编器由于某种原因不起作用

我被要求为read , write , close , open & fork.

我已经为read , write , close , open.

我的问题是:

  1. 如何fork使用我为其编写的 4 个包装函数编写包装函数read , write , close & open

  2. 如何检查我编写的包装器是否正确?这是read-的包装函数的代码my_read

ssize_t my_read(int fd, void *buf, size_t count)   
{    
      ssize_t res;

      __asm__ volatile(
        "int $0x80"        /* make the request to the OS */
        : "=a" (res),       /* return result in eax ("a") */
          "+b" (fd),     /* pass arg1 in ebx ("b") */
          "+c" (buf),     /* pass arg2 in ecx ("c") */
          "+d" (count)      /* pass arg3 in edx ("d") */
        : "a"  (5)          /* passing the system call for read to %eax , with call number 5  */
        : "memory", "cc"); 

      /* The operating system will return a negative value on error;
       * wrappers return -1 on error and set the errno global variable */

      if (-125 <= res && res < 0)
      {
        errno = -res;
        res   = -1;
      }

      return res;
}

备注:我不允许直接使用open ,close ,read , write & fork命令。

如果需要,我可以附上其他 3 个包装器的其余代码。以上是read.

问候

罗恩

4

1 回答 1

0

fork 应该是系统调用 2,所以

    __asm__ volatile ("int $0x80" : "=a" (res) : "0" (2)); 

应该管用。请记住,fork 返回两次,res分别是子进程的 pid(在父进程中)和 0(在子进程中)。

于 2012-05-04T11:45:16.257 回答