ÐÂÊéÍÆ¼ö32PE½á¹¹DOSÍ·ºÍDO
2025/1/13 À´Ô´£º±¾Õ¾Ô´´ ä¯ÀÀ´ÎÊý£º´ÎÕýÈçÎÒÃÇÔÚ³õʶPEÎļþÒ»½ÚÖп´µ½µÄ£¬PEÎļþÍ·Öаüº¬¼¸¸öÖØÒªµÄ½á¹¹£¬DOSÍ·¡¢DOS¿é£¨DOSStub£©ºÍNTÍ·¡£NTÍ·¾ÍÊÇPEÌØÕ÷Âë+ÎļþÍ·£¨COFFÎļþ±êÍ·£©+À©Õ¹Í·£¨¿ÉÑ¡±êÍ·£©£¬ºÏ³ÆÎªNTÍ·¡£ÕâÒ»½ÚÎÒÃǽ«Ïêϸ½²½âÕ⼸¸öÖØÒªµÄ½á¹¹¡£ÎÒÃǽ«DOSÍ·ºÍDOS¿éºÏ³ÆÎªMS-DOS´æ¸ù¡£COFF¶ÔÏóÎļþ£¨obj£©±êÍ·ÓÉCOFFÎļþ±êÍ·ºÍ¿ÉÑ¡±êÍ·×é³É¡£
±¾½Ú±ØÐëÕÆÎÕµÄ֪ʶµã£º
DOSÍ·
DOS¿é
NTÍ·
3.2.1DOSÍ·DOSÍ·£¨DOSHeader£©ÊÇ¿ÉÖ´ÐÐÎļþÖеÄÒ»¸öÊý¾Ý½á¹¹£¬ËüÊÇÓÃÓÚÖ§³ÖÔçÆÚµÄDOS²Ù×÷ϵͳµÄ±ê×¼¸ñʽ¡£DOSͷλÓÚ¿ÉÖ´ÐÐÎļþµÄ¿ªÍ·£¬°üº¬ÁËһЩ¹ØÓÚÎļþµÄ»ù±¾ÐÅÏ¢ºÍ¿ÉÖ´ÐгÌÐòµÄÈë¿Úµã¡£
MS-DOS´æ¸ùÊÇÔÚMS-DOSÏÂÔËÐеÄÓÐЧӦÓóÌÐò¡£Ëü·ÅÖÃÔÚEXEÓ³ÏñµÄÇ°Ãæ¡£Á´½ÓÆ÷ÔÚ´Ë´¦·ÅÖÃĬÈÏ´æ¸ù£¬µ±Ó³ÏñÔÚMS-DOSÖÐÔËÐÐʱ£¬´Ë´æ¸ù»áÊä³öÏûÏ¢¡°´Ë³ÌÐò²»ÄÜÔÚDOSģʽÏÂÔËÐС±¡£Óû§¿ÉÒÔʹÓÃ/STUBÁ´½ÓÆ÷Ñ¡ÏîÖ¸¶¨²»Í¬µÄ´æ¸ù¡£
ÔÚλÖÃ0x3c£¬´æ¸ù¾ßÓÐPEÇ©Ãû£¨PEÌØÕ÷Âë¡°PE\0\0¡±£©ÎļþÆ«ÒÆÁ¿¡£´ËÐÅϢʹWindowsÄܹ»ÕýÈ·Ö´ÐÐÓ³ÏñÎļþ£¬¼´Ê¹´ËÎļþ¾ßÓÐMS-DOS´æ¸ùÒ²²»ÀýÍâ¡£Á´½ÓÆÚ¼ä£¬´ËÎļþÆ«ÒÆÁ¿·ÅÔÚλÖÃ0x3c¡£
ʵÑé¾Å£ºÔÚwinnt.hÍ·ÎļþÖв鿴DOSÍ·¡¢ÎļþÍ·ºÍÀ©Õ¹Í·µÄ½á¹¹¶¨Òå
ÔÚVSÖÐÊäÈë#include"winnt.h"£¬µã»÷ÓÒ¼ü£¬´ò¿ªÎĵµ¡£È»ºóËÑË÷IMAGE_DOS_HEADER»òÕßÔÚ³ÌÐòÀïÃæÊäÈëIMAGE_DOS_HEADER°´F12תµ½¶¨Òå¡£
¡öIMAGE_DOS_HEADER½á¹¹
typedefstruct_IMAGE_DOS_HEADER{
WORDe_magic;//DOSħÊý
WORDe_cblp;//ÎļþµÄ×îºóÒ»Ò³µÄ×Ö½ÚÊý
WORDe_cp;//ÎļþÖеÄÒ³Êý
WORDe_crlc;//ÖØ¶¨Î»ÏîµÄÊýÁ¿
WORDe_cparhdr;//±êÍ·µÄ¶ÎÊý
WORDe_minalloc;//³ÌÐòËùÐèµÄ×îС¸½¼Ó¶ÎÊý
WORDe_maxalloc;//³ÌÐòËùÐèµÄ×î´ó¸½¼Ó¶ÎÊý
WORDe_ss;//³õʼ¶ÑÕ»¶ÎµÄÏà¶ÔÆ«ÒÆÁ¿
WORDe_sp;//³õʼ¶ÑÕ»Ö¸Õë
WORDe_csum;//ÎļþУÑéºÍ
WORDe_ip;//³õʼָÁîÖ¸Õë
WORDe_cs;//³õʼ´úÂë¶ÎµÄÏà¶ÔÆ«ÒÆÁ¿
WORDe_lfarlc;//ÖØ¶¨Î»±íµÄÎļþÆ«ÒÆÁ¿
WORDe_ovno;//¸²¸ÇºÅ
WORDe_res[4];//±£Áô×Ö¶Î
WORDe_oemid;//OEM±êʶ·û£¨ÓÃÓÚe_oeminfo£©
WORDe_oeminfo;//OEMÐÅÏ¢£»ÓÉe_oemidÖ¸¶¨
WORDe_res2[10];//±£Áô×Ö¶Î
LONGe_lfanew;//еÄPEÍ·µÄÎļþÆ«ÒÆÁ¿
}IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
¡öÏÂÃæÊÇDOSÍ·ÖÐÒ»Ð©ÖØÒª×ֶεÄ˵Ã÷£º
¡ñe_magic£ºÕâÊÇÒ»¸ö16λµÄ×ֶΣ¬ÓÃÓÚ±íʾ¿ÉÖ´ÐÐÎļþµÄ±êʶ·û¡£¶ÔÓÚ±ê×¼µÄ¿ÉÖ´ÐÐÎļþ£¬¸Ã×Ö¶ÎӦΪ5A4DH£¬¼´"MZ"µÄASCIIÂ룬ȡ×Ô΢Èí¿ª·¢ÈËÔ±Ãû×Ö¡£
¡ñe_lfanew£ºÕâÊÇÒ»¸ö32λµÄ×ֶΣ¬Ëü±íʾPEÍ·µÄÆ«ÒÆÁ¿¡£PEÍ·£¨PortableExecutableHeader£©ÊÇÔÚDOSÍ·Ö®ºóµÄÒ»¸öÊý¾Ý½á¹¹£¬°üº¬Á˸üÏêϸµÄ¿ÉÖ´ÐÐÎļþÐÅÏ¢¡£
¡ñe_cblpºÍe_cp£ºÕâÁ½¸ö×ֶηֱð±íʾÎļþµÄ×îºóÒ»¸öÒ³£¨×Ö½Ú£©µÄ×Ö½ÚÊýºÍÎļþÖеÄÒ³Êý¡£
¡ñe_crlcºÍe_cparhdr£ºÕâÁ½¸ö×ֶηֱð±íÊ¾ÖØ¶¨Î»±íÏîÊýÁ¿ºÍ±ê׼ͷµÄ×Ö½ÚÊý¡£
¡ñe_minallocºÍe_maxalloc£ºÕâÁ½¸ö×ֶηֱð±íʾ³ÌÐòËùÐèµÄ×îСºÍ×î´óÄÚ´æÁ¿¡£
¡ñe_ssºÍe_sp£ºÕâÁ½¸ö×ֶηֱð±íʾ³ÌÐòµÄ³õʼ¶ÑÕ»¶ÎºÍ¶ÑÕ»Ö¸Õë¡£
¡ñe_csum£ºÕâÊÇÒ»¸ö16λµÄ×ֶΣ¬ÓÃÓÚ´æ´¢ÎļþµÄУÑéºÍ¡£ÔÚÔçÆÚµÄDOS²Ù×÷ϵͳÖУ¬¿ÉÒÔʹÓøÃ×ֶνøÐмòµ¥µÄÎļþÍêÕûÐÔУÑé¡£ÏÖÔÚÒѾûʲôÓÃÁË£¬¿ÉÒÔËæ±ã¸Ä¡£
¡ñe_ipºÍe_cs£ºÕâÁ½¸ö×ֶηֱð±íʾ³õʼָÁîÖ¸ÕëºÍ´úÂë¶Î¡£
¡ñe_lfarlc£ºÕâÊÇÒ»¸ö16λµÄ×ֶΣ¬±íÊ¾ÖØ¶¨Î»±íµÄÆ«ÒÆÁ¿¡£
¡ñe_ovno£ºÕâÊÇÒ»¸ö16λµÄ×ֶΣ¬ÓÃÓڴ洢һЩ¸½¼ÓÐÅÏ¢¡£
ΪÁË·½±ã¶ÁÕßÔĶÁ£¬ÎÒÃǽ«winnt.hÍ·ÎļþÖÐDOSÍ·½á¹¹¶¨ÒåµÄÓ¢ÎÄ×¢Ê͸ÄΪÖÐÎÄ×¢ÊÍ¡£
DOSÍ·ÊÇ¿ÉÖ´ÐÐÎļþ¸ñʽÖеÄÒ»¸öÖØÒª×é³É²¿·Ö£¬ËüÔÊÐíDOS²Ù×÷ϵͳʶ±ðºÍ¼ÓÔØ¿ÉÖ´ÐÐÎļþ¡£È»¶ø£¬ÏÖ´úµÄWindows²Ù×÷ϵͳÒѾ²»ÔÙÒÀÀµDOSÍ·À´Ö´ÐпÉÖ´ÐÐÎļþ£¬¶øÊÇʹÓÃPEÍ·ºÍÆäËûÏà¹Ø½á¹¹À´½âÎöºÍ¼ÓÔØ¿ÉÖ´ÐÐÎļþ¡£ËäÈ»Èç´Ë£¬WindowsPEÎļþÖл¹ÊDZ£ÁôÁËDOSÍ·½á¹¹¡£
¡ñDOSÍ·½á¹¹IMAGE_DOS_HEADERÖÐ×îÖØÒªµÄ³ÉÔ±ÓÐÁ½¸ö£º
1£®µÚÒ»¸öÊÇe_magicµ±ÎÒÃÇÅжÏÒ»¸öÎļþÊÇ·ñΪPEÎļþʱ£¬ÎÒÃÇÐèÒªÅжÏDOSÍ·½á¹¹µÄµÚÒ»¸ö×Ö¶Îe_magicΪ5A4DH£¨¡°MZ¡±£©£¬Í¬Ê±NTÍ·µÄµÚÒ»¸ö×Ö¶ÎSignatureΪ0x£¨¡°PE/0/0¡±£©¡£
2£®µÚ¶þ¸ö×Ö¶ÎÊÇe_lfanew£¬Õâ¸ö×Ö¶ÎÊÇÒ»¸öÎļþÄ򵀮«ÒƵØÖ·£¬Ö¸ÏòPEÍ·¡£ÎÒÃÇ¿ÉÒÔ¸ù¾ÝDOSÍ·ÖеÄÕâ¸ö×ֶβéÕÒPEÍ·¡£
ÎÒÃÇÒÔnotepad32.exeΪÀý£¬Ê¹ÓÃWinHex´ò¿ªnotepad32.exe£¬ÈçÏÂËùʾ£º
D5AFFFFMZ..........ÿÿ..
0B80?......
.......0020................
0030E............?..
00E1FBA0E00BCD21BCCD..?.???L?Th
00506973FDE6E6Fisprogramcanno
00607420EEFtberuninDOS
00706D6FE0D0D0A2mode....$.......
0080ECBA1A8EF2A8EF2A8EF2ì…[¡¨?ò¨?ò¨??
00906BEB3AF2A9EF26BEB55F2A9EF2k?ò©?òkëUò©??
00A06BEB68F2BBEF2A8EFEF2këhò»?ò¨?òc??
00B06BEB6BF2A9EF26BEB6AF2BFEF2këkò©?òkëjò¿??
00C06BEB6FF2A9EFA8EF2këoò©?òRich¨ä5?
00D0................
00E050454C48PE..L...‡R.H....
00F0EFB70A0078....?.......x..
DOSÍ·½á¹¹IMAGE_DOS_HEADER×îºóÒ»¸ö×Ö¶Îe_lfanewµÄֵΪ0xE0£¬ÔÙ¿´Ò»ÏÂÎļþÆ«ÒÆµØÖ·00E0´¦µÄÖµ¸ÕºÃÊÇPEÌØÕ÷Âë0x£¨¡°PE/0/0¡±£©¡£
¡ñÏÂÃæÊǸø³öÒ»¶ÎÅжÏÊÇ·ñΪPEÎļþµÄ»ã±à´úÂë
;¼ì²âPEÎļþÊÇ·ñÓÐЧ
movesi,
lpMemoryassumeesi:ptrIMAGE_DOS_HEADER;esiÖ¸ÏòDOSÍ·
;ÅжÏÊÇ·ñÓÐMZ×ÖÑù
.if[esi].e_magic!=IMAGE_DOS_SIGNATURE;ÅжÏDOSÍ·ÌØÕ÷
jmp_ErrFormat
.endif
;µ÷ÕûESIÖ¸ÕëÖ¸ÏòPEÎļþÍ·
addesi,[esi].e_lfanew
assumeesi:ptrIMAGE_NT_HEADERS
;ÅжÏÊÇ·ñÓÐPE×ÖÑù
.if[esi].Signature!=IMAGE_NT_SIGNATURE
jmp_ErrFormat
.endif
Á·Ï°
Çë¶ÁÕßʹÓÃWinHex´ò¿ªÈÎÒâÒ»¸öPEÎļþ£¬È»ºó¶ÔÕÕIMAGE_DOS_HEADER½á¹¹£¬Ð´³öÿ¸ö½á¹¹³ÉÔ±µÄÊýÖµ¡£
3.2.2DOSStubÎÒÃǽ«PEÍ·ºÍDOSÍ·Ö®¼äµÄ²¿·Ö³ÆÎªDOS¿é£¨DOSStub£©¡£DOSStub£¨DOSռλ³ÌÐò£©ÊÇ¿ÉÖ´ÐÐÎļþÖеÄÒ»¶Î´úÂ룬λÓÚPEÎļþµÄDOSÍ·ºÍPEÍ·Ö®¼ä¡£ËüÊÇΪÁ˱£³Ö¶ÔÔçÆÚDOS²Ù×÷ϵͳµÄ¼æÈÝÐÔ¶ø´æÔڵġ£
DOSStubÊÇÒ»¸öСÐ͵ijÌÐò»òÒ»¶ÎÖ¸Á£¬Í¨³£ÊÇÓûã±àÓïÑÔ±àдµÄ¡£ËüµÄÖ÷Òª×÷ÓÃÊÇÔÚÔËÐпÉÖ´ÐÐÎļþʱ£¬Èç¹û²Ù×÷ϵͳÎÞ·¨Ê¶±ðPEÎļþ¸ñʽ£¬»òÕßÔÚ·ÇWindows»·¾³ÏÂÖ´ÐУ¬»á½«Ö´ÐÐÈ¨×ªÒÆµ½DOSStubÉÏ£¬ÒÔÌṩһЩÓѺõÄÌáʾÐÅÏ¢»òÖ´ÐÐÏà¹ØµÄ²Ù×÷¡£
DOSStubͨ³£°üº¬Ò»Ð©Îı¾¡¢Í¼ÐλòÆäËûÐÎʽµÄÐÅÏ¢£¬ÀýÈç»¶ÓÐÅÏ¢¡¢°æ±¾ºÅ¡¢×÷ÕßÐÅÏ¢£¬ÉõÖÁ¿ÉÒÔÊÇÒ»¶ÎСµÄ¶¯»Ð§¹û¡£ËüµÄ´óСͨ³£Êǹ̶¨µÄ£¬Îª64×Ö½Ú£¨16λDOSʱ´ú£©»ò×Ö½Ú£¨32λDOSʱ´ú£©¡£¶øÊÂʵÊÇDOS¿éµÄ´óС²¢²»Êǹ̶¨µÄ£¬ÎÒÃÇ¿ÉÒÔÐÞ¸ÄDOSÍ·×îºóÒ»¸ö×Ö¶Îe_lfanewµÄÖµ£¬À©Õ¹DOS¿é¡£DOS¿é±¾Éí¼°À©Õ¹²¿·ÖµÄ¿Õ¼äÊÇ¿ÉÒÔ±»ÎÒÃÇÓÃÀ´´æ´¢ÆäËûÐÅÏ¢µÄ£¨ËäÈ»ÎÒÃǺÜÉÙÕâÑùʹÓã©¡£
µ±ÔÚDOS»·¾³ÏÂÖ´ÐпÉÖ´ÐÐÎļþʱ£¬DOS²Ù×÷ϵͳ»áÊ×ÏȼÓÔØDOSStub²¢Ö´ÐÐËü¡£Èç¹û¿ÉÖ´ÐÐÎļþÊÇÒ»¸öÓÐЧµÄPEÎļþ£¬DOSStub»áÔÚÖ´ÐÐÍê×Ô¼ºµÄÈÎÎñºó£¬Í¨¹ýÌø×ª»òµ÷ÓÃÖ¸Á¿ØÖÆÈ¨×ªÒƵ½PEÍ·£¬½ø¶øÓɲÙ×÷ϵͳ¼ÌÐø½âÎöºÍÖ´ÐÐPEÎļþ¡£
ÔÚÏÖ´úWindows²Ù×÷ϵͳÖУ¬DOSStubµÄ×÷ÓÃÏà¶Ô½ÏС£¬ÒòΪ²Ù×÷ϵͳÒѾÄܹ»Õýȷʶ±ðºÍ½âÎöPEÎļþ¸ñʽ¡£È»¶ø£¬ÎªÁ˱£³Ö¶ÔÔçÆÚDOSÓ¦ÓóÌÐòµÄ¼æÈÝÐÔ£¬PEÎļþÈÔÈ»±£ÁôÁËDOSStub¡£
×¢Òâ
1£®DOSStub²¢·ÇËùÓеÄPEÎļþ¶¼±ØÐë°üº¬¡£ÔÚÒ»Ð©ÌØÊâµÄÇé¿öÏ£¬¿ª·¢ÈËÔ±¿ÉÒÔÑ¡Ôñ²»°üº¬DOSStub£¬´Ó¶øÊ¹µÃPEÎļþ¸ü¼Ó½ô´Õ¡£
2£®µ±PE¼ÓÔØÆ÷¼ÓÔØPEÎļþºó£¬PEÎļþÍ·²¿ËùÔÚµÄÒ³Ãæ±»ÉèÖÃΪֻ¶ÁÊôÐÔ¡£Òò´ËÀ©Õ¹²¿·ÖÖ»ÄÜ´æ·ÅÖ»¶ÁÊý¾Ý¡£Í¨³£ÎÒÃǽ¨ÒéDOS¿éÀ©Õ¹ºóµÄ´óС²»ÄÜʹÕû¸öPEÎļþÍ·²¿µÄ´óС³¬¹ýH£¬·ñÔòÐèÒªÐÞ¸ÄÏÂÃæ¸÷¸ö½ÚÇøÄÚµÄËùÓÐÎļþÆ«ÒÆµØÖ·£¬Ôì³É²»±ØÒªµÄÂé·³¡£
ʵÑéÊ®£ºÔÚDOSϵͳÖÐÔËÐÐ32λPEÎļþ
¡ñµÚÒ»²½£º½«µÚÒ»Õ±àдµÄHelloWorld.exe32λPEÎļþÍÏÈëWinHexÖУ¬¹Û²ìDOS¿éµÄÊý¾ÝÈçÏÂËùʾ£º
00E1FBA0E00BCD21BCCD..?.???L?Th
00506973FDE6E6Fisprogramcanno
00607420EEFtberuninDOS
00706D6FE0D0D0A2mode....$.......
00805D5C6DCDDD]\m?=.?=.?=.?
00909722E3DE51DD?.?=.’å..?=.?
00ADRich.=.?.......
¡ñµÚ¶þ²½£ºÐÞ¸ÄHelloWorld.exe³ÌÐòÃûΪ.exe¡£
32λPEÎļþÐèÒªÐÞ¸ÄÎļþÃû²ÅÄÜÔÚDOSBoxÐéÄâ»úÉÏÔËÐеÄÔÒòÊÇÒòΪDOSBoxÊÇÒ»¸öÄ£ÄâDOS»·¾³µÄÐéÄâ»ú£¬ËüÖ÷ÒªÓÃÓÚÔËÐÐÔçÆÚµÄDOSÓ¦ÓóÌÐòºÍÓÎÏ·¡£DOSBoxÄ£ÄâÁËDOS²Ù×÷ϵͳµÄÐÐΪºÍ»·¾³£¬µ«Ëüʵ¼ÊÉÏÊÇÔÚÏÖ´ú²Ù×÷ϵͳÉÏÔËÐеġ£
DOSBoxÊÇΪÁ˼æÈݾɵÄDOSÓ¦ÓóÌÐò¶øÉè¼ÆµÄ£¬Ëü¶Ô32λPEÎļþµÄÖ§³ÖÏà¶ÔÓÐÏÞ¡£32λPEÎļþͨ³£ÊÇΪWindows²Ù×÷ϵͳÉè¼ÆµÄ£¬²¢Ê¹ÓÃÁËWindowsÌØ¶¨µÄAPIºÍ¹¦ÄÜ¡£¶øDOSBoxÖ÷ҪģÄâµÄÊÇÔçÆÚµÄDOS»·¾³£¬Òò´ËÎÞ·¨Ö±½ÓÔËÐÐ32λµÄWindowsPEÎļþ¡£
ΪÁËÔÚDOSBoxÖÐÔËÐÐ32λPEÎļþ£¬¿ÉÒÔ³¢ÊÔ½«ÎļþÃûÐÞ¸ÄΪ¾ßÓÐDOS¼æÈÝÐÔµÄ8.3¸ñʽ£¨×î¶à8¸ö×Ö·ûµÄÎļþÃûºÍ3¸ö×Ö·ûµÄÀ©Õ¹Ãû£©¡£
DOSBoxÔÚ¼ÓÔØ¿ÉÖ´ÐÐÎļþʱ£¬»á¸ù¾ÝÎļþÃûµÄÀ©Õ¹ÃûÀ´ÅжÏÎļþÀàÐÍ£¬²¢Ê¹ÓÃÏàÓ¦µÄ´¦Àí·½Ê½¡£Í¨¹ý½«32λPEÎļþµÄÎļþÃûÐÞ¸ÄΪDOS¼æÈݵĸñʽ£¬DOSBox»á½«Æäʶ±ðΪDOSÓ¦ÓóÌÐò£¬¾¡¹ÜËüʵ¼ÊÉÏÊÇÒ»¸ö32λµÄWindowsPEÎļþ¡£
×¢Òâ
¼´Ê¹½«ÎļþÃûÐÞ¸ÄΪDOS¼æÈݸñʽ£¬ÈÔÈ»ÎÞ·¨±£Ö¤ËùÓеÄ32λPEÎļþ¶¼ÄÜÔÚDOSBoxÖÐÕý³£ÔËÐС£ÕâÊÇÒòΪDOSBox²¢²»ÊÇΪÔËÐÐ32λWindowsÓ¦ÓóÌÐò¶øÉè¼ÆµÄ£¬ËüµÄ¹¦ÄܺͼæÈÝÐÔÓÐÏÞ¡£ÔÚijЩÇé¿öÏ£¬¿ÉÄÜÐèҪʹÓÃÆäËû¹¤¾ß»òÐéÄâ»úÀ´ÔËÐÐ32λPEÎļþ¡£
¡ñµÚÈý²½£ºÑéÖ¤DOS¿éÄÚµÄÊý¾ÝÊÇʲô£¿
°²×°DOSBoxÐéÄâ»ú£¬´ò¿ªÐéÄâ»úºó£¬ÊäÈëÃüÁ
mountcd:\code\winpe\ch03
c:
½«ÐéÄâ»úCÅ̸ùĿ¼¶ÔÓ¦ÕæÊµ»úHelloWorld.exe³ÌÐòËùÔÚµÄĿ¼¡£
µÚËIJ½£ºÃüÁîÐÐÊäÈë.exeºó£¬»Ø³µÔËÐС£Èçͼ3-3Ëùʾ£¬´°¿ÚÏÔʾһÐÐÌáʾÐÅÏ¢£º¡°ThisprogramcannotberuninDOSmode.¡±¡£ÕâÕýÊÇWinHex¿´µ½µÄ×Ö·û´®¡£
µÚÎå²½£ºÊ¹ÓÃdebug.exeµ÷ÊÔÆ÷¼ÓÔØ.exe£¬È»ºóÊäÈëUÃüÃû£¬²é¿´·´»ã±à´úÂ룬Èçͼ3-4Ëùʾ¡£Ñ§Ï°¹ý16λ»ã±àµÄ¶ÁÕßÒ»¶¨·Ç³£ÊìϤ¡£ÕâÊÇÒ»¶Î»ã±à´úÂëÖп´µ½µÄÄÚÈÝÕýÊÇÎÒÃÇÔÚWinHexÖп´µ½µÄDOS¿éÖеÄÄÚÈÝ¡£Ç°Ãæ14¸ö×Ö½ÚΪһ¶Î»ã±à´úÂ룬µ÷ÓÃint21hµÄ9ºÅ¹¦ÄÜ£¨DXΪÈë¿Ú²ÎÊý£¬AHΪ¹¦Äܺţ©£¬Êä³öÆ«ÒÆµØÖ·0EH´¦µÄ¡¯$¡¯½áβµÄ×Ö·û´®£¬ÕýÊÇÎÒÃÇÔËÐÐ.exe³ÌÐòÔÚ´°¿ÚÏÔʾµÄÌáʾÐÅÏ¢¡£×îºóµ÷ÓÃint21hµÄ4CHºÅ¹¦ÄÜ£¬Èë¿Ú²ÎÊýΪ0£¬½áÊø³ÌÐò¡£
ͼ3-3ÔÚDOSϵͳÉÏÔËÐÐ32λPEÎļþ
ͼ3-4ʹÓÃdebugµ÷ÊÔÆ÷²é¿´·´»ã±à´úÂë
ʵÑéʮһ£ºÊ¹ÓÃIDA·ÖÎö32λPEÎļþµÄDOS¿é
ÎÒÃÇ»¹¿ÉÒÔʹÓÃIDA·ÖÎöHelloWorld.exe³ÌÐòµÄDOS¿é¡£
µÚÒ»²½£º½«HelloWorld.exeÍÏÈëWinHex£¬½«ÎļþÆ«ÒÆµØÖ·0x3C´¦£¨DOSÍ·Ö¸ÏòPEÍ·µÄe_lfanew×Ö¶ÎÐÞ¸ÄΪ0£©£¬ÈçÏÂËùʾ£º
D5AFFFFMZ..........ÿÿ..
0B80?......
.......0020................
0030................
µÚ¶þ²½£º½«Ð޸ĺóµÄHelloWorld.exe³ÌÐòÍÏÈëIDA£¬Ö÷´°¿ÚÏÔʾµÄ·´»ã±à´úÂëÈçÏÂËùʾ£º
seg:;FileName:D:\code\winpe\HelloWorld.exe
seg:;Format:MS-DOSexecutable(EXE)
seg:;BaseAddress:1hRange:1h-hLoadedlength:h
seg:;EntryPoint:1:0
seg:
seg:.p
seg:.mmx
seg:.modellarge
seg:
seg:;===========================================================
seg:
seg:;Segmenttype:Purecode
seg:segsegmentbytepublicCODEuse16
seg:assumecs:seg
seg:assumees:nothing,ss:seg,ds:nothing,fs:nothing,gs:nothing
seg:
seg:;===============SUBROUTINE=======================================
seg:
seg:;Attributes:noreturn
seg:
seg:publicstart
seg:startprocnear
seg:pushcs
seg:1popds
seg:2assumeds:seg
seg:2movdx,0Eh
seg:5movah,9
seg:7int21h;DOS-PRINTSTRING
seg:7;DS:DX-stringterminatedby"$"
seg:9movax,4C01h
seg:Cint21h;DOS-2+-QUITWITHEXITCODE(EXIT)
seg:Cstartendp;AL=exitcode
seg:C
0B80?......
.......0020................
00306802............h...
¶ÁÕß¿ÉÄÜ»áÓÐÒÉÎÊ£¬ÎªºÎÒª¸ÄΪ0x0´óÐ¡ÄØ£¿ÔÚǰÎÄÖÐÓÐÌáµ½£¬ÎÒÃÇ¿ÉÒÔÀ©Õ¹DOS¿éµÄ´óС£¬µ«ÊÇÀ©Õ¹ºóPEÎļþÍ·²¿×îºÃ²»Òª³¬¹ý¸ö×Ö½Ú£¬·ñÔòÎÒÃǽ«¸Ä±äPEÎļþÍ·²¿ºóÃæµÄ¼¸¸ö½ÚÇøÔÚPEÎļþÄ򵀮«ÒÆ£¬Èç´ËÒ»À´¾ÍÐèÒªÐÞ¸ÄËùÓÐÓë´ËÏà¹ØµÄÆ«ÒÆ£¬´øÀ´ºÜ¶àÂé·³¡£
×¢Òâ¹Û²ì£¬½Ú±íºÍµÚÒ»¸ö.text½ÚÇøÖ®¼äµÄ¿Õ°×ÇøÓòÈ«²¿Îª0¡£Õⲿ·Ö¿Õ¼äÔÚÎļþÆ«ÒÆ0H~0HÖ®¼ä£¬.text½ÚÇøµÄÆðʼµØÖ·Îª0H¡£ÎÒÃÇÖ»Òª±£Ö¤.text½ÚÇøµÄÆðʼµØÖ·²»±ä£¬Òò´ËËùÓнÚÇøµÄµØÖ·¶¼²»»á·¢Éú±ä»¯¡£ÄÇôDOS¿é¿ÉÒÔÀ©Õ¹µÄ×Ö½ÚÊý¾ÍÊÇH-H=1A0H¸ö×Ö½Ú£¨Ê®½øÖÆÊý¸ö×Ö½Ú£©¡£
¿ÉÒÔÀ©Õ¹µÄ×î´ó×Ö½ÚÊý¼ÆËã³öÀ´Ö®ºó£¬ÏÂÒ»²½¾ÍÊÇÔÚDOS¿éÄÚÕ³ÌùÁã×Ö½ÚÁË¡£ÎªÁ˲¿ÆÆ»µÔDOS¿éµÄÄÚÈÝ£¬ÎÒÃÇÑ¡ÔñÔÚPEÍ·ÌØÕ÷ÂëµÄǰһ¸ö×ֽڵĵØÖ·´¦Õ³Ìù¸öÁã×Ö½Ú£¨ÒòΪDOS¿éûÓÐʲôÓÃ;£¬ÎÒÃÇÒ²¿ÉÒÔÑ¡ÔÚDOS¿éµÄÈÎÒâλÖã©¡£
¾ßÌå²Ù×÷·½·¨£º
Êó±êÑ¡ÖÐ0xC7µØÖ·´¦£¬µã»÷Êó±êÓÒ¼ü£¬µã»÷¡°±à¼¡±¡°Õ³ÌùÁã×Ö½Ú¡±£¬µ¯³öÒ»¸ö¶Ô»°¿ò´°¿Ú£¬Èçͼ3-5Ëùʾ¡£Ìîд×Ö½ÚÊý£¬µã»÷¡°OK¡±°´Å¥¡£
ͼ3-5Õ³ÌùÁã×Ö½Ú
´Ëʱ£¬ÎÒÃǹ۲ìÒ»ÏÂPEͷλÓÚÎļþ0xÆ«ÒÆµØÖ·´¦¡£ÎÒÃǽ«DOSÍ·µÄ×îºóÒ»¸ö×Ö¶Îe_lfanew£¨Ö¸ÏòPEÍ·µÄÎļþÆ«ÒÆµØÖ·£©0x0C8ÐÞ¸ÄΪ0x0£¬É¾³ý½Ú±íÓë.text½ÚÇø¼ä¶àÓàµÄÁã×Ö½Ú£¬±£³Ö.text½ÚÇøµØÖ·²»±ä¡£È»ºóµã»÷WinHex
¹¤¾ßÀ¸¡°±£´æ¡±°´Å¥¡£
×îºó²âÊÔÒ»ÏÂHelloWorld.exeÊÇ·ñ¿ÉÒÔÕý³£ÔËÐС£
Á·Ï°
Çë¶ÁÕß°´ÕÕÉÏÊöʵÑéÊ®¡¢Ê®Ò»¡¢Ê®¶þµÄ·½·¨·Ö±ð²âÊÔnotepad32.exeºÍnotepad64.exe»òÕ߯äËûÈÎÒâPEÎļþ¡£
½áÂÛ
1£®²»ÂÛ32λ»¹ÊÇ64λPEÎļþ¶¼¿ÉÒÔÀ©Õ¹DOS¿éµÄ´óС£¬·½·¨ÊÇÐÞ¸ÄDOSÍ·½á¹¹µÄ×îºóÒ»¸ö×Ö¶Îe_lfanewµÄÖµ£¬Ö¸ÏòÒ»¸öеÄPEÍ·µÄÎļþÆ«ÒÆµØÖ·¡£
2£®ÎªÁ˲»¸Ä±äPEÎļþÍ·²¿ºóÃæ½ÚÇøµÄÎļþÆ«ÒÆµØÖ·£¬À©Õ¹ºóµÄPEÎļþÍ·²¿µÄ´óС²»³¬¹ýH£¨£©¸ö×Ö½Ú¡£
- ×ªÔØÇë×¢Ã÷£º
- http://www.wqopd.com/ynyys/13758.html