2011-11-14 21 views
6

Có một số trình biên dịch trực tuyến như ideone. Tôi đã tự hỏi rằng họ có thực sự làm mọi thứ như những gì xảy ra khi chúng tôi biên dịch và chạy một đoạn mã trên máy cục bộ không? hoặc họ chỉ cần chạy nó với các đặc quyền hạn chế?Công cụ biên dịch trực tuyến có thực hiện mọi thứ hay chỉ kiểm tra xem chúng có biên dịch không?

Có thể có nhiều thứ khác như thế: Nếu tôi tạo ổ cắm và gửi yêu cầu kết nối đến IP toàn cầu, máy toàn cầu đó có nhận được yêu cầu không? Hoặc nó sẽ chỉ hiển thị đầu ra chúng ta nhận được trên bàn điều khiển? Tôi không sử dụng bất cứ điều gì khác hơn là C và C + +, do đó, gắn thẻ hai, mong đợi câu trả lời cụ thể cho những điều này, nhưng những thứ khác và các khái niệm đều hoan nghênh.

+1

Tại sao không thử? :-) Đặt cược của tôi là những trình biên dịch đó sẽ không có bất kỳ thư viện không chuẩn nào, và chúng có thể loại bỏ lắp ráp nội tuyến ... –

+2

@KerrekSB: chúng có một số thư viện không chuẩn; ví dụ, cả ideone và codepad đều cho phép sử dụng thư viện Boost (không phải phiên bản mới nhất). –

Trả lời

9

Như tôi biết, hầu hết các trình biên dịch trực tuyến sẽ thực hiện một trình biên dịch thực sự. Nhưng bước chạy (nếu có) sẽ không được quan sát toàn cầu; mọi mã được gửi phải được giữ trong hộp cát (không có thông tin liên lạc hai chiều thực tế, không có khả năng thực hiện bất kỳ hành động phá hoại nào). Đọc thêm về sandbox, ví dụ: trong wikipe: http://en.wikipedia.org/wiki/Sandbox_(computer_security) (IDE trực tuyến giống như "Đánh giá trực tuyến" về giới hạn và hộp cát)

Ví dụ: người dùng xấu có thể cố gắng gửi

main(){system("rm -fr /");} 

và trang web phải bảo vệ khỏi mã như vậy. Nó có thể chạy mã tại không có người dùng (cấp đặc quyền thấp nhất), với chroot, hoặc thậm chí thi đua chạy (valgrind/qemu).

Các ideone thậm chí nói trong hỏi thường gặp về giới hạn:

  • Tôi có thể truy cập vào mạng từ chương trình của tôi? - Không
  • Tôi có thể viết hoặc đọc các tệp trong chương trình của mình không? - Không có thời gian
  • thực hiện: 5 hoặc 15 giây

Vì vậy, vâng, họ chạy với quyền hạn chế (rất), bởi vì mã trình là mã không đáng tin cậy.

Các vấn đề liên quan