RAM จำนวนเล็กน้อยและอุปกรณ์จัดเก็บข้อมูลระยะยาวในคอมพิวเตอร์ส่วนบุคคลในอดีตได้กำหนดข้อจำกัดที่เข้มงวดมากเกี่ยวกับขนาดของโปรแกรม ปัญหานี้ไม่มีอยู่ในปัจจุบัน อย่างไรก็ตาม ในบางครั้ง การลดขนาดของโมดูล exe ของแอปพลิเคชันที่พัฒนาขึ้นให้น้อยที่สุดก็เป็นสิ่งสำคัญในบางครั้ง
จำเป็น
- - แหล่งที่มา;
- - คอมไพเลอร์, ลิงเกอร์;
- - คอมเพรสเซอร์ของโมดูล PE เช่น UPX, Themida
คำแนะนำ
ขั้นตอนที่ 1
สร้างเวอร์ชันที่เผยแพร่ของแอปพลิเคชันที่ปฏิบัติการได้ เลือกการกำหนดค่าที่เหมาะสมในการตั้งค่าโครงการใน IDE หากไม่มีการกำหนดค่าดังกล่าว ให้สร้างตามการกำหนดค่าที่มีอยู่ แก้ไขรายการตัวเลือกตัวเชื่อมโยงโดยลบและเพิ่มคำสั่งที่เหมาะสม ดังนั้น เมื่อใช้แพ็คเกจการพัฒนาจาก Microsoft คุณควรลบตัวเลือก / debug คุณยังสามารถเพิ่มคำสั่งต่อไปนี้ในซอร์สโค้ด: ความคิดเห็น #pragma (ตัวลิงก์ "/ RELEASE")
ขั้นตอนที่ 2
กำหนดค่าโปรเจ็กต์เพื่อหลีกเลี่ยงการเชื่อมโยงไฟล์สั่งการกับไลบรารีแบบสแตติกให้มากที่สุด ใช้เวอร์ชันที่ใช้ร่วมกันของไลบรารีที่เกี่ยวข้อง ตัวอย่างเช่น คุณสามารถยกเว้นโค้ดของไลบรารีรันไทม์ C และ C ++ ได้โดยการแทนที่ตัวเลือกตัวเชื่อมโยง / ML หรือ / MT (ไลบรารีแบบซิงเกิ้ลและมัลติเธรดแบบคงที่) ด้วย / MD (CRT DLL แบบมัลติเธรด)
ขั้นตอนที่ 3
พิจารณารวมส่วนต่างๆ ของโมดูล exe เป็นหนึ่งเดียว วิธีนี้จะไม่ให้ผลลัพธ์ที่เห็นได้ชัดเจนหากไฟล์มีขนาดใหญ่พอ แต่ด้วยขนาดโมดูลเริ่มต้นที่ 20-30 กิโลไบต์ การได้รับอาจมีนัยสำคัญ ตัวเลือก / merge linker ช่วยให้คุณสามารถรวมส่วนต่างๆ ได้ คุณสามารถตั้งค่าผ่านพารามิเตอร์โครงการได้: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data หรือใช้คำสั่ง Pragma ในซอร์สโค้ด: #pragma comment (ตัวเชื่อมโยง "/ ผสาน:.text =.data ") # ความคิดเห็น Pragma (ตัวเชื่อมโยง" /merge:.reloc=.data")#pragma ความคิดเห็น (ตัวเชื่อมโยง "/merge:.rdata=.data")#pragma ความคิดเห็น (ตัวเชื่อมโยง" / ผสาน:.idata =.data ") นอกจากนี้ยังเหมาะสมที่จะกำหนดคุณสมบัติของส่วนผลลัพธ์: ความคิดเห็น #pragma (ตัวเชื่อมโยง" /section:.data, rwe ")
ขั้นตอนที่ 4
ลดขนาดของ exe โดยการตั้งค่าขั้นต่ำของขนาดของบล็อกตามขอบเขตที่ส่วนต่างๆ ถูกจัดแนว ใช้ตัวเลือก / filealign linker ที่ระบุโดยแก้ไขคุณสมบัติของโปรเจ็กต์หรือคำสั่ง Pragma: #pragma comment (linker, "/ filealign: 0x200") วิธีนี้เหมาะสำหรับโมดูลขนาดเล็ก
ขั้นตอนที่ 5
พยายามลดขนาดของไฟล์ exe โดยสร้างด้วยตัวเลือกการเพิ่มประสิทธิภาพเพื่อลดจำนวนรหัสเครื่อง แทนที่ตัวเลือกคอมไพเลอร์ / O2 หรือ / Od ด้วย / O1
ขั้นตอนที่ 6
แทนที่ stub DOS มาตรฐานใน exe-module ด้วยของคุณเอง ซึ่งจะมีขนาดต่ำสุด ใช้ตัวเลือก / ตัวเชื่อมโยง stub: #pragma ความคิดเห็น (ตัวเชื่อมโยง "/stub:mystub.exe") ที่นี่ mystub.exe เป็นชื่อของไฟล์เรียกทำงานของ DOS ที่จะเพิ่มลงในโมดูล exe เป็น stub
ขั้นตอนที่ 7
พิจารณาระบุจุดเริ่มต้นของคุณเองในการสมัคร สิ่งนี้จะกำจัดรหัสเริ่มต้นของไลบรารีรันไทม์แบบคงที่ ใช้ตัวเลือกตัวเชื่อมโยงรายการ / ตัวอย่างเช่น: ความคิดเห็น #pragma (ตัวเชื่อมโยง "/ รายการ: MyStartup") ถือเป็นโมฆะ MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
ขั้นตอนที่ 8
ใช้ยูทิลิตี้บรรจุภัณฑ์ เช่น UPX, ASPack, Themida, PECompact กับไฟล์ exe ที่เสร็จสิ้น ข้อมูลโมดูลจะถูกบีบอัด พวกเขาจะถูกคลายลงในหน่วยความจำหลังจากเปิดแอปพลิเคชัน วิธีนี้ให้ผลลัพธ์ที่ดีสำหรับไฟล์ exe ขนาดใหญ่ที่มีข้อมูลสแตติกจำนวนมากที่มีเอนโทรปีต่ำ (เช่น แรสเตอร์ DIB ในส่วนทรัพยากร)