Phương pháp # 4 liên quan đến việc tăng thủ công số lượng trang được phân bổ trong kernel cho các đối số dòng lệnh. Nếu bạn nhìn vào tệp bao gồm / linux / binfmts.h, bạn sẽ tìm thấy phần sau gần đầu:
/*
* MAX_ARG_PAGES defines the number of pages allocated for arguments
* and envelope for the new program. 32 should suffice, this gives
* a maximum env+arg of 128kB w/4KB pages!
*/
#define MAX_ARG_PAGES 32
Để tăng dung lượng bộ nhớ dành riêng cho các đối số dòng lệnh, bạn chỉ cần cung cấp giá trị MAX_ARG_PAGES với số cao hơn. Khi chỉnh sửa này được lưu, chỉ cần biên dịch lại, cài đặt và khởi động lại vào kernel mới như bạn vẫn làm bình thường.
Trên hệ thống kiểm tra của riêng tôi, tôi đã cố gắng giải quyết tất cả các vấn đề của mình bằng cách nâng giá trị này lên 64. Sau khi thử nghiệm rộng rãi, tôi đã không gặp phải một vấn đề nào kể từ khi chuyển đổi. Điều này hoàn toàn được mong đợi vì ngay cả khi MAX_ARG_PAGES
được đặt thành 64, dòng lệnh dài nhất có thể tôi có thể tạo ra sẽ chỉ chiếm 256KB bộ nhớ hệ thống - không nhiều bằng các tiêu chuẩn phần cứng hệ thống ngày nay.
Ưu điểm của Phương pháp số 4 là rõ ràng. Bây giờ bạn có thể chỉ cần chạy lệnh như bình thường và hoàn thành thành công. Những nhược điểm cũng rõ ràng không kém. Nếu bạn tăng dung lượng bộ nhớ khả dụng cho dòng lệnh vượt quá dung lượng bộ nhớ hệ thống khả dụng, bạn có thể tạo một cuộc tấn công DOS trên hệ thống của riêng bạn và khiến nó bị sập. Trên các hệ thống nhiều người dùng nói riêng, ngay cả một mức tăng nhỏ cũng có thể có tác động đáng kể vì mỗi người dùng sau đó được cấp phát bộ nhớ bổ sung. Do đó, luôn luôn kiểm tra rộng rãi trong môi trường của chính bạn, vì đây là cách an toàn nhất để xác định xem Phương pháp số 4 có phải là một lựa chọn khả thi cho bạn hay không.
Tôi đồng ý rằng giới hạn là gây phiền nhiễu nghiêm trọng.