Các nhà phát triển LLVM đề xuất xử lý bộ đệm an toàn trong C ++

Biểu trưng LLVM

LLVM là một khuôn khổ để phát triển các trình biên dịch cũng như giúp xây dựng các ngôn ngữ lập trình mới và cải thiện các ngôn ngữ hiện có.

Các các nhà phát triển của dự án LLVM đã đề xuất một số thay đổi nhằm tăng cường an ninh của các proyects C + + nhiệm vụ quan trọng và cung cấp một phương tiện để loại bỏ các lỗi do vượt quá bộ đệm.

Do đó, đề xuất mà họ đưa ra tập trung vào công việc trong hai lĩnh vực cụ thể: cung cấp một mô hình phát triển cho phép làm việc an toàn với bộ đệm và làm việc để tăng cường bảo mật của thư viện hàm tiêu chuẩn libc ++.

Nó được đề cập rằng mô hình lập trình an toàn được đề xuất cho C ++ «là sử dụng các lớp được cung cấp bởi thư viện chuẩn khi làm việc với bộ đệm thay vì thao tác với con trỏ thô ». Ví dụ, đề xuất sử dụng các lớp std :: array, std :: vector và std :: span, sẽ được thêm vào với kiểm tra thời gian chạy cho bộ nhớ được cấp phát ngoài giới hạn.

Mục tiêu của chúng tôi là cải thiện tính bảo mật của các cơ sở mã C ++ quan trọng. Đối với điều này, chúng tôi dự định làm việc trên hai ý tưởng.

Thư viện chuẩn C ++ cứng
Công cụ áp dụng và mô hình lập trình bộ đệm an toàn C ++
Hardened libc ++ nhằm mục đích làm cho các giao diện thư viện chuẩn C ++ nói chung an toàn hơn.

Mô hình lập trình bộ đệm an toàn của C ++ cùng với libc ++ cứng giúp giảm thiểu thời gian chạy của việc truy cập bộ nhớ ngoài giới hạn. Các công cụ áp dụng sẽ tự động hóa việc di chuyển mã sang mô hình lập trình mới này.

Ngoài ra, nó cũng đề cập đến để chống lại các phương pháp lập trình "nguy hiểm" trong tiếng vang, nếu đề xuất đưa ra cảnh báo trình biên dịch cho tất cả các phép toán số học con trỏ, tương tự như cảnh báo linter clang-slim khi sử dụng cờ "cppcoreguidelines-pro-bounds-pointer-arithmetic", hỗ trợ sẽ xuất hiện trong LLVM 16. Để bật các cảnh báo như vậy, một cờ riêng sẽ được thêm vào clang, không hoạt động theo mặc định .

Nó được lên kế hoạch triển khai một chế độ bảo vệ tùy chọn trong libc ++, mà khi được bật, sẽ phát hiện một số tình huống dẫn đến hành vi không xác định trong thời gian chạy. Ví dụ, trong các lớp học std :: span và std :: vector, một truy cập ngoài giới hạn sẽ được giám sát, trong trường hợp đó, chương trình sẽ bị lỗi.

Các kiểm tra thời gian chạy bổ sung này sẽ được nhóm thành một số danh mục có thể được kiểm soát riêng biệt. Mục đích là nhà cung cấp vận chuyển libc ++ trên nền tảng của họ có thể quyết định kích hoạt kiểm tra nào trong thư viện vận chuyển (nếu có), tùy thuộc vào mức độ bảo mật mong muốn.

Các nhà phát triển tin rằng việc thêm các thay đổi như vậy sẽ giữ libc ++ tuân thủ các tiêu chuẩn C ++, vì lựa chọn cách xử lý các trường hợp hành vi không xác định thuộc về các nhà phát triển thư viện, những người có thể coi hành vi không xác định như một khóa yêu cầu chương trình lối ra.

các kiểm tra thời gian chạy trong libc ++ được lên kế hoạch chia thành các loại có thể được bao gồm riêng lẻ. Một số kiểm tra được đề xuất không dẫn đến các hoạt động phức tạp hơn hoặc thay đổi ABI đã được triển khai trong chế độ an toàn của libc ++ (chế độ an toàn).

Để nhắc lại, mục tiêu cuối cùng là để thư viện được vận chuyển có thể cho phép các kiểm tra này trong quá trình sản xuất; đây không phải là tính năng "chỉ gỡ lỗi", mặc dù cuối cùng nó sẽ thay thế "chế độ gỡ lỗi" bị hỏng từ lâu.

Bên cạnh đó, nó được lên kế hoạch chuẩn bị một bộ công cụ sửa mã điều này sẽ cho phép các biến được thay thế bằng con trỏ thô trong vùng chứa và áp dụng các trình xử lý thay thế trong các trường hợp vùng chứa không thể thay thế trực tiếp con trỏ (ví dụ: cấu trúc "if (array_pointer)" có thể được chuyển đổi thành "if (span.data ( ) »). Cài đặt có thể được áp dụng không chỉ cho các biến cục bộ, mà còn để nhập các tham số với con trỏ.

Nó cũng được đề cập rằng đang xem xét một "trình kiểm tra máy phân tích tĩnh" tuyến đường nhạy cảm cảnh báo nếu std :: span được xây dựng từ một vùng chứa nhỏ hơn kích thước được chỉ định trong phương thức khởi tạo của span. Trình kiểm tra đã nói là độc lập và hữu ích, nếu mọi việc suôn sẻ, nó sẽ được bật theo mặc định cho tất cả người dùng

Cuối cùng nếu bạn muốn biết thêm về nó, bạn có thể kiểm tra các chi tiết trong liên kết theo dõi.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: AB Internet Networks 2008 SL
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.