เป็นไปได้ไหมที่จะเรียกใช้. exe ขนาดใหญ่กว่า 4GB?


10

ฉันสร้างคลังข้อมูล SFX> 4GB (คลังเก็บข้อมูลการคลายตัวเอง) ใน 7-Zip โดยไม่มีการเตือน เมื่อผู้รับพยายามที่จะแยกมันเขาได้รับริบบิ้นข้อผิดพลาดนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันพบว่าเป็นเพราะ.exeมันใหญ่กว่า 4GB หลังจากติดตั้ง 7-Zip เขาก็สามารถแตกไฟล์เก็บถาวรได้ แต่ฉันสงสัยว่าทำไม Windows ไม่สามารถเรียกใช้ไฟล์ปฏิบัติการได้ และเป็นไปได้ที่จะผ่านการแทนที่บางอย่าง?


2
ปกติคุณไม่สามารถใช้กับระบบ 32 บิตได้
Ramhound

1
เพื่อขยายสิ่งที่ Ramhound กล่าวว่าเป็นไปได้ที่ 7-Zip self-extractor เก็บตัวเองใน RAM ซึ่งสำหรับระบบ 32 บิตมีขนาดการเข้าถึงสูงสุด 4 GB นอกจากนี้ยังจะอธิบายว่าทำไม 7-Zip ก็สามารถแตกออกได้เนื่องจากไฟล์เก็บถาวรไม่จำเป็นต้องถูกเก็บไว้ในหน่วยความจำอย่างเต็มที่
Doktoro Reichard

ใช่ฉันคิดว่านั่นเป็นปัญหาในตอนแรก แต่เขาใช้ Win64 พร้อม RAM ขนาด 16GB ฉันใช้มันด้วยเช่นกันกับ 8GB
Louis Waweru

คำตอบ:


10

Windows จะไม่รองรับไฟล์ปฏิบัติการขนาดใหญ่กว่า 4GB ตามเธรดนี้:

http://sourceforge.net/p/sevenzip/discussion/45798/thread/337fc13e/

ผู้แสดงความคิดเห็น "Igor Pavlov" เป็นผู้สร้างและผู้ดูแลระบบของ 7-Zip ในขณะที่ความคิดเห็นนั้นค่อนข้าง จำกัด แต่มีกระทู้อื่น ๆบนฟอรัม sourceforge ซึ่งทำซ้ำคำแนะนำเดียวกัน ฉันไม่เชื่อว่าการรันไฟล์ปฏิบัติการบนระบบปฏิบัติการ 64 บิตจะสร้างความแตกต่างได้เนื่องจากนี่อาจเป็นข้อ จำกัด ขนาดของไฟล์ที่ปฏิบัติการได้ของ windows นั่นคือข้อ จำกัด ของรูปแบบ Windows PEเอง

นี้บทความเกี่ยวกับการเขียนโปรแกรม 64 บิตแสดงให้เห็นว่า:

"อิมเมจ" ที่เรียกใช้งานได้ (รหัส / ข้อมูลตามที่โหลดในหน่วยความจำ) ของไฟล์ Win64 นั้น จำกัด ขนาดไว้ที่ 2GB นี่เป็นเพราะโปรเซสเซอร์ AMD64 / EM64T ใช้การกำหนดที่อยู่แบบสัมพันธ์สำหรับคำแนะนำส่วนใหญ่และที่อยู่แบบสัมพันธ์จะถูกเก็บไว้ใน dword dword สามารถเก็บค่าสัมพัทธ์ของ± 2GB เท่านั้น

สันนิษฐานว่าอิกอร์มีวิธีใช้± 2GB เพื่อให้ได้ 4GB


1
dword ที่ลงนามแล้วมีช่วงของ 2,147,483,647 dword ที่ไม่ได้ลงนามมีช่วง 4,294,967,295 และหมายเลขนั้นเป็นแหล่งที่มาของข้อ จำกัด ส่วนใหญ่ใน Windows และในระบบ 32 บิตนอก
Hashim

@Hashim ถูกต้องอย่าง จำกัด 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytesคือ ฉันสามารถตรวจสอบได้บน Windows 10 64- บิตโดยสร้างคลังข้อมูลแบบขยายตัวเองด้วย WinRAR ในรูปแบบของ. EXE-files ไฟล์เรียกทำงานที่มีขนาด4GiBจะไม่เปิด แต่4GiB - 1Bทำงานได้ดี
Robin Hartmann

0

การมีไฟล์บีบอัดที่เรียกทำงานได้เองที่มีขนาดใหญ่กว่า 4GB นั้นอยู่ในระดับสูงเนื่องจากมีขีด จำกัด 4GB สำหรับไฟล์ปฏิบัติการ Windows เช่น * .exe, * .dll เป็นต้นสำหรับ PE32 และรุ่น 64 บิต PE32 + (ใช้กับ 32- บิตและ 64 รุ่นบิต)

ข้อที่สองไฟล์ที่เรียกใช้งานจะถูกโหลดลงใน RAM อย่างสมบูรณ์ก่อนที่จะดำเนินการและแม้ว่าคุณจะไม่ได้ถูก จำกัด โดย Windows (แต่คุณ) คุณอาจถูก จำกัด ได้อย่างง่ายดายจากฮาร์ดแวร์ซึ่งเป็นจำนวนจริงของ RAM ในกรณีดังกล่าว


ที่ฉันรู้ว่ามีวิธีที่จะบอกให้ Windows โหลดเฉพาะบางส่วนของไฟล์ exe ไม่ใช่ไฟล์ทั้งหมดที่มีทรัพยากร ผมคิดว่าหลายโปรแกรม DOS ขนาดใหญ่ใช้เคล็ดลับนี้มากเกินไปเนื่องจากขีด จำกัด ใน 86 x 16 บิตมีขนาดเล็กเกินไป
phuclv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.