Nếu bạn biên dịch mã bằng -nostdlib, bạn sẽ không thể gọi bất kỳ chức năng thư viện C nào (tất nhiên), nhưng bạn cũng không nhận được mã khởi động C thông thường. Đặc biệt, điểm vào thực của một chương trình trên Linux không phải là main(), mà là một hàm có tên _start(). Các thư viện chuẩn thường cung cấp một phiên bản này chạy một số mã khởi tạo, sau đó gọi hàm main().
Cố gắng biên soạn này với -nostdlib gcc:
void _start() {
/* main body of program: call main(), etc */
/* exit system call */
asm("movl $1,%eax;"
"xorl %ebx,%ebx;"
"int $0x80"
);
}
Các _start() chức năng nên luôn luôn kết thúc với một cuộc gọi để thoát (hoặc cuộc gọi hệ thống không trở khác như exec). Ví dụ trên gọi trực tiếp hệ thống gọi với lắp ráp nội tuyến vì lối ra thông thường() không có sẵn.
'-nostdlib' nên làm điều đó, những phiên bản nền tảng/biên dịch bạn đang sử dụng? –
"không giúp" như trong đó đã không vô hiệu hóa các thư viện, hoặc bạn không thể biên dịch bất cứ điều gì với lá cờ đó? –
Bạn cũng có thể muốn -nostartupfiles. –