วิธีที่ # 4 เกี่ยวข้องกับการเพิ่มจำนวนหน้าที่ถูกจัดสรรภายในเคอร์เนลสำหรับอาร์กิวเมนต์บรรทัดคำสั่งด้วยตนเอง หากคุณดูที่ไฟล์ include / linux / binfmts.h คุณจะพบสิ่งต่อไปนี้ใกล้ด้านบน:
/*
* 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
ในการเพิ่มจำนวนหน่วยความจำเฉพาะสำหรับอาร์กิวเมนต์บรรทัดคำสั่งคุณเพียงแค่ต้องระบุค่า MAX_ARG_PAGES ด้วยจำนวนที่สูงขึ้น เมื่อบันทึกการแก้ไขนี้แล้วให้คอมไพล์ใหม่ติดตั้งและรีบูตในเคอร์เนลใหม่ตามปกติ
ในระบบทดสอบของฉันเองฉันจัดการเพื่อแก้ปัญหาทั้งหมดของฉันโดยการเพิ่มค่านี้เป็น 64 หลังจากการทดสอบที่ครอบคลุมฉันไม่ได้พบปัญหาเดียวตั้งแต่เปลี่ยน สิ่งนี้คาดว่าจะเกิดขึ้นทั้งหมดแม้จะMAX_ARG_PAGES
ตั้งไว้ที่ 64 บรรทัดคำสั่งที่ยาวที่สุดที่ฉันสามารถผลิตได้จะใช้หน่วยความจำระบบ 256KB เท่านั้นซึ่งไม่มากตามมาตรฐานฮาร์ดแวร์ระบบในปัจจุบัน
ข้อดีของวิธีที่ # 4 ชัดเจน ตอนนี้คุณสามารถเรียกใช้คำสั่งได้ตามปกติและทำสำเร็จ ข้อเสียมีความชัดเจนเท่าเทียมกัน หากคุณเพิ่มจำนวนหน่วยความจำที่มีให้กับบรรทัดคำสั่งเกินจำนวนหน่วยความจำระบบที่มีอยู่คุณสามารถสร้างการโจมตี DOS บนระบบของคุณเองและทำให้ระบบล่ม โดยเฉพาะอย่างยิ่งในระบบผู้ใช้หลายคนแม้การเพิ่มขึ้นเล็กน้อยอาจมีผลกระทบอย่างมีนัยสำคัญเพราะผู้ใช้ทุกคนจะได้รับการจัดสรรหน่วยความจำเพิ่มเติม ดังนั้นควรทดสอบอย่างกว้างขวางในสภาพแวดล้อมของคุณเองเนื่องจากนี่เป็นวิธีที่ปลอดภัยที่สุดในการพิจารณาว่าวิธีที่ # 4 เป็นตัวเลือกที่ทำงานได้หรือไม่สำหรับคุณ