Làm thế nào để bạn biên dịch một chương trình C vào một giá trị định dạng ELF (hoặc định dạng RAW) để nó có thể được thực hiện trực tiếp từ RAM mà không cần bất kỳ OS? Giả sử rằng bộ tải khởi động tồn tại có khả năng tải mã tới bất kỳ vị trí nào trong RAM và bắt đầu thực thi tại địa chỉ đó. Để chính xác, cờ biên dịch (GCC) là gì? Có cần cho một tập tin bản đồ?Thực hiện mà không cần hệ điều hành
Một ứng dụng mẫu helloworld sẽ là nhất chào đón :)
Chỉ cần để xây dựng quan điểm của tôi,
phép phương thức main() là một vô hạn rỗng trong khi vòng lặp để đảm bảo rằng không OS cuộc gọi thư viện cụ thể hoặc tiêu chuẩn được sử dụng. Các o/p mong muốn là một hang. Với các tùy chọn GCC tùy chọn, bộ tải khởi động chắc chắn sẽ không tải được tệp thực thi cho biết nó không hợp lệ Định dạng ELF. Tuy nhiên, bằng cách chuyển tùy chọn -dN cho trình liên kết sẽ làm cho nó hợp lệ ELF. Thêm các tùy chọn trình biên dịch/liên kết được yêu cầu để làm cho nó treo và không sụp đổ !! Chính xác thì các tùy chọn biên dịch này là gì?
file.c:
int main()
{
while(1);
}
Compilation
gcc -c -nostdinc file.c -fno-BUILTIN
ld -dN -nostdlib file.o
Bootloader tải a.out vào bộ nhớ RAM và thực thi.
Cảm ơn ... Các liên kết rất nhiều hữu ích :) – AIB