วิธีตรวจสอบว่าไบนารีเป็น 16 บิตบน Windows หรือไม่


4

ฉันมี .exe ไฟล์ที่ฉันไม่สามารถเรียกใช้บน Windows 10 ฉันสงสัยว่าเป็นเพราะไบนารีเป็น 16 บิต มีวิธีง่าย ๆ ในการตรวจสอบ? สิ่งที่ต้องการ คำตอบของ Alexander Revo จะดี.

คำตอบ:


7

Windows ได้ขยายรูปแบบไฟล์ปฏิบัติการ DOS เก่าหลายครั้งดังนั้นหากคุณดูไฟล์ปฏิบัติการ Windows 'ทันสมัย' อยู่ใกล้กับจุดเริ่มต้นจะมี MZ (หรืออาจจะเป็น ZM ถ้า executable สำหรับระบบที่ใช้คำสั่ง bit ตรงกันข้าม สิ่งนี้กำหนดส่วนหัวสำหรับ ที่สอง ฟอร์แมตที่เรียกใช้งานได้ของ DOS หรือที่รู้จักในชื่อฟอร์แมต MZ

นอกเหนือจากนั้นคุณจะเห็นบางอย่างซึ่งพูดพล่อยๆไม่ชัดเจนตามด้วยบางสิ่งตามแนวของ 'โปรแกรมนี้ไม่สามารถทำงานในโหมด DOS' ซึ่งพูดพล่อยๆนั้นเป็นจริงโปรแกรม DOS ง่ายมากที่พิมพ์ข้อความเพื่อบอกผู้ใช้ว่าโปรแกรมไม่สามารถทำงานใน DOS

หลังจากนั้นคุณมีส่วนหัวสำหรับปฏิบัติการจริงซึ่งอาจเริ่มต้นด้วยหนึ่งในสี่ตัวอักษร NE, LX, LE, หรือ PE. หากคุณไม่เห็นข้อความใดข้อความหนึ่งข้างต้นและข้อความข้างต้นแสดงว่าเป็นแอปพลิเคชัน DOS แบบ 16 บิต

NE executables (เรียกว่า 'New Executables') ถูกคัดค้านในขณะนี้ พวกเขาเป็นรูปแบบที่ขยายใหม่ 'MZ' รูปแบบแรกและได้รับการพัฒนามาสำหรับ Windows 1.0 พวกมันมักจะใช้งานได้กับ Windows 16 บิตอย่างสม่ำเสมอและถูกใช้อย่างเป็นทางการกับ Windows 1.0-3.x, MS-DOS 4.0 (แต่ไม่ใช่รุ่นที่ใหม่กว่า), OS / 2 1.x และ Windows / OS เวอร์ชัน 2 NT 5.0 (Windows 2000) สิ่งเหล่านี้ไม่สามารถทำงานได้บน Windows 64 บิตและจะไม่แสดงไอคอนแอปพลิเคชันบน Windows รุ่น 32 บิตตั้งแต่ Vista

LX executables (หนึ่งในสองรูปแบบของ 'Linear Executables') คือ executables 32 บิตในรูปแบบที่ใช้โดย OS / 2 2.x และใหม่กว่าและโดย DOS Extenders บางตัว สิ่งเหล่านี้ไม่ได้รับการสนับสนุนภายใต้ Windows รุ่นที่ทันสมัย ​​(และฉันคิดว่าอาจไม่ได้รับการสนับสนุน แต่ฉันไม่แน่ใจ)

LE executables (ประเภทอื่นของ 'Linear Executable') เป็นกรณีที่แปลกและอาจมีเทคนิคในการใช้รหัส 64- บิต พวกเขายังได้รับการแนะนำด้วย OS / 2 2.0 (เช่นเดียวกับ LX executables) แต่ถูกออกแบบมาเพื่อใช้สำหรับไดรเวอร์ฮาร์ดแวร์ รุ่นไดรเวอร์ VxD ที่ใช้ใน Windows 3.x และ 9x ใช้รูปแบบนี้ พวกเขาไม่เคยใช้สำหรับแอปพลิเคชันผู้ใช้ดังนั้นจึงไม่รองรับ Windows รุ่นใหม่ทั้งหมด

PE executables หรือที่รู้จักกันทั่วไปว่า 'Portable Executables' เป็นรูปแบบที่ใช้โดยระบบ Windows ที่ทันสมัยและได้รับการออกแบบมาสำหรับรหัส 32 บิต (ดังนั้นจึงไม่รองรับรหัส 16 บิต) นอกจากนี้ยังมีส่วนขยายที่เรียกว่า 'PE32 +' ซึ่งใช้สำหรับไบนารี Windows 64 บิต,. NET CIL ไบนารี (ซึ่งเป็นผู้ไม่เชื่อเรื่องพระเจ้าที่มีความกว้างบิต) และอีกหลายสิ่งที่ใช้ส่วนขยายอื่น (ตัวอย่างเช่นไดรเวอร์ UEFI และ แอปพลิเคชั่นซึ่งใช้ .efi นามสกุลเป็นรูปแบบ PE32 +)

การใช้ข้อมูลนี้คุณสามารถใช้การตรวจสอบทั่วไปแบบเดียวกับที่แนะนำในคำตอบที่คุณเชื่อมโยงกับคำถามของคุณ ถ้าคุณเพิ่งเห็น MZ และไม่ใช่ข้อความสั้น ๆ ตามมาซึ่งพูดพล่อยๆแล้วหนึ่งในสี่ตัวอักษรข้างต้นคู่ภายใน 4kB แรกของไฟล์มันเป็นเพียงปฏิบัติการ DOS มิฉะนั้นมันเป็นหนึ่งในสี่รูปแบบเหล่านั้น รูปแบบเดียวเท่านั้นที่ควรทำงานบน Windows 10 คือรูปแบบ PE

ตัวอย่างเช่นนี่คือ hexdump ของ 512 ไบต์แรกของปฏิบัติการ Windows 64 บิต (โดยเฉพาะหนึ่งในองค์ประกอบของซอฟต์แวร์ไคลเอ็นต์ BOINC):

00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000  MZ..............
00000010: b800 0000 0000 0000 4000 0000 0000 0000  ........@.......
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 1801 0000  ................
00000040: 0e1f ba0e 00b4 09cd 21b8 014c cd21 5468  ........!..L.!Th
00000050: 6973 2070 726f 6772 616d 2063 616e 6e6f  is program canno
00000060: 7420 6265 2072 756e 2069 6e20 444f 5320  t be run in DOS 
00000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000  mode....$.......
00000080: c88d b31c 8cec dd4f 8cec dd4f 8cec dd4f  .......O...O...O
00000090: 8594 4e4f 9aec dd4f e39a 414f 88ec dd4f  ..NO...O..AO...O
000000a0: 1fa2 454f 8eec dd4f e39a 434f 8eec dd4f  ..EO...O..CO...O
000000b0: e39a 774f 9fec dd4f e39a 764f 89ec dd4f  ..wO...O..vO...O
000000c0: 8594 5e4f 8dec dd4f 8594 594f 8dec dd4f  ..^O...O..YO...O
000000d0: 9771 414f 85ec dd4f 8cec dc4f 14ed dd4f  .qAO...O...O...O
000000e0: 9771 764f d0ec dd4f 9771 474f 8dec dd4f  .qvO...O.qGO...O
000000f0: 9771 404f 8dec dd4f 5269 6368 8cec dd4f  .q@O...ORich...O
00000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000110: 0000 0000 0000 0000 5045 0000 6486 0600  ........PE..d...
00000120: 4c88 ea5a 0000 0000 0000 0000 f000 2200  L..Z..........".
00000130: 0b02 0a00 00fe 0a00 0092 0b00 0000 0000  ................
00000140: c0e4 0800 0010 0000 0000 0040 0100 0000  ...........@....
00000150: 0010 0000 0002 0000 0500 0200 0000 0000  ................
00000160: 0500 0200 0000 0000 0020 1b00 0004 0000  ......... ......
00000170: 489f 1700 0300 4081 0000 1000 0000 0000  H.....@.........
00000180: 0010 0000 0000 0000 0000 1000 0000 0000  ................
00000190: 0010 0000 0000 0000 0000 0000 1000 0000  ................
000001a0: 0000 0000 0000 0000 8cc6 0e00 6801 0000  ............h...
000001b0: 0030 1400 9cd6 0600 00a0 1300 a884 0000  .0..............
000001c0: 0094 1600 2019 0000 0010 1b00 2001 0000  .... ....... ...
000001d0: e01c 0b00 1c00 0000 0000 0000 0000 0000  ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

ขอให้สังเกตก่อน MZ ในสองไบต์แรกตามด้วยข้อมูลสำหรับโปรแกรม DOS ที่บอกคุณว่าไม่สามารถทำงานภายใต้ DOS ได้หากคุณพยายามเรียกใช้ที่นั่นตามด้วย PE ลายเซ็นเป็นไบต์ 280 และ 281 นอกจากนี้คุณยังสามารถเห็นองค์ประกอบเฉพาะเหล่านี้ในโปรแกรมแก้ไขข้อความแม้ว่าจะอ่านได้ยากกว่ามาก

โปรดทราบว่ายังมีความเป็นไปได้ที่แท้จริงที่ไม่ใช่ Windows ที่สามารถเรียกใช้งานได้และบางคนเพิ่งตั้งชื่อผิด Windows มักจะรู้จักบางสิ่งบางอย่างว่าเป็นแบบปฏิบัติการ 16 บิตและบอกว่านั่นเป็นสาเหตุที่มันไม่สามารถทำงานได้


"ใกล้ถึงจุดเริ่มต้นจะมี MZ" คุณเห็นสิ่งนี้อย่างไร ตัวแก้ไข Hex
Moab

@Moab อย่างใดอย่างหนึ่งถึงแม้ว่าตัวแก้ไขข้อความจะง่ายขึ้นเล็กน้อยเนื่องจากทุกระบบมีหนึ่งตัว ฉันจะอัปเดตคำตอบของฉันในวันพรุ่งนี้ด้วยตัวอย่าง
Austin Hemmelgarn

2

หาก Windows ไม่สามารถเรียกใช้แอปพลิเคชันของคุณได้เนื่องจากเป็น 16 บิตระบบจะแจ้งให้คุณทราบอย่างชัดเจน ไม่จำเป็นต้องเดา

Windows 10 ยังคงนโยบายความเข้ากันได้เดิมกับรุ่นก่อนหน้า รุ่น 64 บิตไม่สามารถเรียกใช้ซอฟต์แวร์ 16 บิต เวอร์ชัน 32 บิตสามารถเรียกใช้ซอฟต์แวร์ 16 บิตได้ แต่ไม่เหมือนกับเวอร์ชั่นก่อนหน้าคุณจะต้องเพิ่มการรองรับ NTVDM ผ่านฟีเจอร์ Windows

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.