ตรวจสอบให้แน่ใจว่าโปรแกรมโหลดต่ำกว่า 4 GB โดยใช้ --image-base ใน Linux

ฉันกำลังพยายามตรวจสอบให้แน่ใจว่าไบนารี่นั้นโหลดภายในหน่วยความจำกายภาพขนาด 4 GB ในตัวเลือก LD ฉันเห็น --image-base เอกสารระบุว่า: [ตัวเลือกนี้เฉพาะกับพอร์ตเป้าหมาย i386 PE ของตัวเชื่อมโยง]

บน Linux หากฉันใช้ตัวเลือกนี้ จะมีข้อความระบุว่าตัวเลือกที่ไม่รู้จัก '--image-base'

มีวิธีใดบ้างที่เราสามารถมั่นใจได้ว่าไบนารี่นั้นโหลดต่ำกว่า 4 GB บน Linux?


person asmprogrammer    schedule 13.07.2012    source แหล่งที่มา


คำตอบ (1)


ฉันกำลังพยายามตรวจสอบให้แน่ใจว่าไบนารี่นั้นโหลดภายในหน่วยความจำกายภาพขนาด 4 GB

สมมติว่าคุณกำลังพูดถึงโค้ดระดับผู้ใช้ (แอปพลิเคชัน) และไม่เกี่ยวกับเคอร์เนล Linux คุณสามารถมั่นใจได้ว่า ไม่มีอะไร เกี่ยวกับหน่วยความจำ ฟิสิคัล คุณสามารถมั่นใจได้เพียงบางอย่างเกี่ยวกับหน่วยความจำ เสมือน

คำถามของคุณไม่สมเหตุสมผลหากคุณใช้ระบบ 32 บิต เนื่องจากหน่วยความจำ ทั้งหมด ในระบบดังกล่าวมีขนาดต่ำกว่า 4GB

ดังนั้น คำถามของคุณจึงเป็น: "ฉันจะเชื่อมโยงไฟล์ปฏิบัติการบนระบบ Linux 64 บิตได้อย่างไร เพื่อให้โหลดต่ำกว่า 0x100000000"

สมมติว่าคุณกำลังใช้ x86_64 คำตอบคือ: ตัวเลือกลิงก์เริ่มต้นจะ แล้ว ทำเช่นนั้นกับไฟล์ปฏิบัติการหลัก (แม้ว่าจะไม่ใช่สำหรับไลบรารีที่แชร์) ดังนั้นคุณไม่จำเป็นต้องทำอะไรเป็นพิเศษ หากคุณต้องการให้โค้ด ทั้งหมด โหลดภายใต้ขอบเขต 4GB ให้เชื่อมโยงแอปพลิเคชันของคุณกับแฟล็ก -static (แต่ระวัง: การทำเช่นนี้อาจไม่ทำงานด้วยเหตุผลหลายประการ และกำหนดข้อจำกัดใบอนุญาตในไบนารีของคุณด้วย) .

person Employed Russian    schedule 15.07.2012
comment
ขออภัยหากฉันไม่ได้เจาะจงประเภทของโปรแกรมหรือประเภทของสถาปัตยกรรม รายละเอียดเพิ่มเติมบางส่วนมีดังนี้: 1. ฉันกำลังพยายามโหลดโมดูลเคอร์เนล (ไดรเวอร์) ภายใต้หน่วยความจำกายภาพขนาด 4 GB 2. ฉันกำลังลองสิ่งนี้บนเคอร์เนล PAE 32 บิต โดยที่ที่อยู่โหลดโมดูลสามารถอยู่ระหว่าง 4 GB ถึง 5 GB (แม้ว่าระบบจะมี 4GB) สิ่งนี้ทำได้โดย BIOS สำหรับการรีแมปหน่วยความจำจาก 3 GB เป็น 4 GB - person asmprogrammer; 16.07.2012