簡體   English   中英

write()的包裝函數無法正常工作

[英]Wrapper function for write() doesn't work as expected

給定系統調用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;
 }

但是它不起作用。 知道為什么嗎?

謝謝

您的約束已關閉,文件描述符需要放入EBX,ECX中的緩沖區(而不是像您分別的EDI / ESI)。

嘗試:

__asm__ volatile
    ("int $0x80"
            : "=a" (__res)
            : "0" (4),"b" ((long)(fd)),"c" ((long)(buf)), "d" ((long)(count))
            : "memory");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM