如何在没有标准库(libc)的情况下打印到控制台(Linux)

时间:2017-08-14 22:10:53

标签: c linux gcc

我没有使用标准库,因为我的目标x86 Linux发行版非常有限。

#include <unistd.h>

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

我想将文本打印到控制台,但我不能,还有其他方法可以做到这一点。 上面的代码不起作用,因为它依赖于标准库 gcc Test.cpp -o Test -nostdlib

1 个答案:

答案 0 :(得分: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;
}