داخل الملف التنفيذى بعد محتويات IMAGE_DOS_HEADER يقع DOS STUB، يقوم الـ Linker الخاص بميكروسوفت بإضافة الـ Stub التاليه :
0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00
الـ OpCodes السابقه تماثل الكود التالي:
PUSH CS PUSH DS MOV DX, OFFSET msg MOV AH, 9h INT 21h MOV AX, 4C01h INT 21h msg db 'This program cannot be run in DOS mode.', 0Dh, 0Dh, 0Ah, '$'
للعلم فإن الـ Stub السابقه مساحتها 64 بايت تماما و تبدأ مباشرة بعد IMAGE_DOS_HEADER عند الموقع 40h.
الذى شد انتباهي جزء من الـ OpCodes السابق و هو :
00 B4 09
القيمه B4 09 تقابل التعليمه MOV r8, imm8 و الـ OpCode هي B0+ rb و المسجل AH قيمته 4 لذا تنتج التعليمه B4 09 و تعني MOV AH, 9
السؤال هو: لماذا تم إضافة صفر قبل هذه الـ OpCode؟ و ماذا سيكون تأثيره؟؟
و الله ولي التوفيق