2012-01-13 35 views
5

Có các trang web giải quyết vấn đề như topcoder.com, SPOJ. Tôi muốn cho trường hợp sử dụng tương tự (mọi người gửi cho tôi các tệp chương trình C++) để thực hiện một số hạn chế.cấm lắp ráp nội tuyến bằng g ++ (gcc) hoặc clang (llvm)

Một trong số đó là:

  • "không được phép sử dụng lắp ráp trong-line"

Làm thế nào tôi có thể thực thi lệnh cấm như vậy? Có cách nào thông minh hơn (như cờ trình biên dịch? - nhưng tôi không tìm thấy bất kỳ hữu ích nào) hơn là chỉ tìm kiếm các cụm từ trong mã nguồn?

Tôi có thể giới hạn mọi người thành g ++ hoặc clang. Mọi thứ đang được thực hiện trên Linux.

+0

Tại sao bạn muốn làm điều đó? Hạn chế asm nội tuyến không giúp gì nhiều nếu bạn lo lắng về bảo mật. – servn

+0

@servn Ok. Nhưng tôi không chỉ lo lắng về an ninh, mà là sự cạnh tranh công bằng C/C++. Tôi muốn ngăn chặn mọi người sử dụng asm, chỉ vì chúng tôi đã quyết định về quy tắc như vậy. Tôi muốn tự động hóa quá trình của chính sách như vậy. Tôi hiểu nó không phải là giải pháp đầy đủ và cần nhiều hơn nữa. Cảm ơn đã chỉ ra điều đó. Có lẽ bạn có thêm một số ý tưởng? Nếu quan tâm đến bảo mật, vui lòng xem các câu hỏi khác của tôi: [Security.SE] (http://security.stackexchange.com/users/4077?tab=questions) –

Trả lời

0

Có vẻ như bạn đang tìm kiếm cờ -fno-asm.

Mặc dù có vẻ như chỉ cần asm thay vì cũng làm __asm__ vì vậy có thể thêm vào số -D__asm__=something_that_will_error.

Đồng thời xem -fno-gnu-keywords để tắt asm bằng C++.

+1

gcc 4.4.6 manpage trong Linux ngụ ý điều này không tắt '__asm__'. – Alnitak

4

Làm thế nào về:

% gcc -Dasm=error -D__asm__=error 
+0

Tính năng này hoạt động như thế nào? Tôi hiểu nó làm cho các macro có tên: 'asm',' __asm__'. Các từ khóa dựng sẵn có được cho phép không? Tôi có thể làm tương tự cho việc cấm các cuộc gọi chức năng (như "hệ thống()") không? Đó có phải là giải pháp an toàn - không có cách nào để giải quyết nó (hack)? –

+1

@GrzegorzWierzowiecki bộ tiền xử lý được đưa tay lên mã trước trình biên dịch và không có kiến ​​thức về từ khóa, do đó, có, nó có thể thay đổi chúng. Nó có thể được làm việc xung quanh - một '#undef asm' đơn giản trong mã sẽ làm điều đó. Điều đó sẽ dễ dàng tìm thấy mặc dù. – Alnitak

+0

Mỗi khi tôi nhìn vào [Cuộc thi mã C bị quấy nhiễu quốc tế] (http://www.ioccc.org/) Tôi càng sợ có nhiều cách để làm xáo trộn mọi thứ, như '#undef asm'. –

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