0

システム コール write のラッパー関数を考えると、次のようになります。

ssize_t my_write(int fd, const void *buf, size_t count)
{
    long __res;
    __asm__ volatile
        ("int $0x80"
                : "=a" (__res)
                : "0" (4),"D" ((long)(fd)),"S" ((long)(buf)), "d" ((long)(count))
                : "ebx","memory");

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

      return __res;
}

コードで試してみました( int main() から):

int main() {


     my_write(2,"an read error occured\n",26);


     return 0;
 }

しかし、うまくいきません。理由はありますか?

ありがとう

4

1 に答える 1

3

あなたの制約はオフです.ファイル記述子はEBX、ECXのバッファに入る必要があります(あなたが持っているようなEDI/ESIではありません)。

試す:

__asm__ volatile
    ("int $0x80"
            : "=a" (__res)
            : "0" (4),"b" ((long)(fd)),"c" ((long)(buf)), "d" ((long)(count))
            : "memory");
于 2012-04-22T12:54:25.363 に答える