2017-08-14 69 views
2

我沒有使用標準庫,因爲我的目標x86 Linux發行版非常有限。如何在沒有標準庫的情況下打印到控制檯(Linux)(libc)

#include <unistd.h> 

void _start() { 
     const char msg[] = "Hello world"; 
     write(STDOUT_FILENO, msg, sizeof(msg) - 1); 
} 

我想打印文本到控制檯,但我不能,是否有任何其他方式來做到這一點。 上述不會工作的代碼,因爲它依賴於標準庫 的gcc -o Test.cpp的測試-nostdlib

+0

有什麼理由不與你在你的問題包含代碼的工作? – payne

+0

它不會工作,因爲它需要libc。 – nGs2225

+1

它不需要'libc';它需要執行'write()'的系統調用。如果你不能使用標準庫,你必須創建你自己的,包含你需要的系統調用,然後鏈接它。不過,這感覺像是艱苦的工作。你確定你要這麼做嗎? –

回答

2

如果你沒有的libc,那麼你需要手藝從頭write()系統調用寫入標準輸出。從上面的鏈接http://weeb.ddns.net/0/programming/c_without_standard_library_linux.txt

代碼示例:

詳情請參見本資源

void* syscall5(
    void* number, 
    void* arg1, 
    void* arg2, 
    void* arg3, 
    void* arg4, 
    void* arg5 
); 

typedef unsigned long int uintptr; /* size_t */ 
typedef long int intptr; /* ssize_t */ 

static 
intptr write(int fd, void const* data, uintptr nbytes) 
{ 
    return (intptr) 
     syscall5(
      (void*)1, /* SYS_write */ 
      (void*)(intptr)fd, 
      (void*)data, 
      (void*)nbytes, 
      0, /* ignored */ 
      0 /* ignored */ 
     ); 
} 

int main(int argc, char* argv[]) 
{ 
    write(1, "hello\n", 6); 
    return 0; 
} 
相關問題