0

我正在尝试在 Linux 下为 read() 编写一个包装函数。

请放轻松,因为这是我第一次使用 Wrappers :)

给定my_wrappers.c文件的代码:

#include "my_wrappers.h"
#include <unistd.h>
#include <sys/types.h>

ssize_t my_read (int fd, void *buf, size_t count)
{
  long ret;
  extern int errno;

  __asm__ __volatile__ ("pushl %%ebx\n\t"
                        "movl %%esi,%%ebx\n\t"
                        "int $0x80\n\t"
                        "popl %%ebx"
                      : "=a" (ret)
                      : "0" (SYS_read), "S" ((long) fd),
                        "c" ((long) buf) "d" ((long) count): "bx");
  if (ret >= 0)
  {
    return (int) ret;
  }
  errno = -ret;
  return -1;
}

my_wrappers.h文件:

#ifndef __MY_WRAPPERS_H_
#define __MY_WRAPPERS_H_

#include <unistd.h>
#include <sys/types.h>


int my_open(const char *pathname, int flags, mode_t mode);
ssize_t my_write(int fd, const void *buf, size_t count);
ssize_t my_read(int fd, void *buf, size_t count);
int my_close(int fd);

pid_t my_fork(void);

#endif

我只允许使用调用libc包装器,即,我不允许调用 open()、read() 等。

这段代码有什么问题?也许是因为我没有使用系统调用表的编号?

来自 Eclipse 的错误:-‘SYS_read’ undeclared (first use in this function)

问候

罗恩

4

1 回答 1

3

你需要#include <syscall.h>或可能#include <sys/syscall.h>

于 2012-04-20T04:46:25.160 回答