¦b Windows 98/98 SE ¥H¤Î§ó¦ªº§@·~¨t²Î¤¤¡Aµøµ¡¡B¹ï¸Ü²°¥H¤Î¹ï¸Ü²°¤ºªº±±¨î¶µ³£ºû«ùµÛ¥j¨åªº·®æ¡A¥H²³æ¡B¤è¥¿¬°¥D¡C¨ì¤F Windows XP ®É¡A¶}©l¤Þ¶iµøı·®æ¡]visual styles¡A©Î½Ķ¦¨µøı¼Ë¦¡¡^¡AÅýµøµ¡¡B¹ï¸Ü²°¡B±±¨î¶µ¦³§ó¶ê¼íªº¥~®Ø¡Bº¥Åܦ⪺¼ÐÃDÄæ¡B¨Ï¥ÎªÌ§â·Æ¹«´å¼Ð²¾¨ì«ö¶s¤W®É«ö¶s·|²¤·LÅãµÛ¡K¡Kµ¥®ÄªG¡Cµøı·®æ¨Ï±o§@·~¨t²Î¾ãÅé¥~Æ[§ó¥[²{¥N¤Æ¡A¨Ã»P§@·~¨t²Îªº¨ä¥L³]p¤¸¯À¿Ä¬°¤@Åé¡C
¨ì¤F Windows Vista ®É¡Aµøı·®æ¶i¤@¨Bµo®i¡A±À¥X¤F Aero ¤¶±¡A³o¬O¤@ºØ¥b³z©ú¡B¨ã¦³¬Á¼þ½è·Pªº®ÄªG¡C¨ä«áªº Windows 7 ¤£¶È©µÄò Aero¡A¨Ã¥BÅܱo§ó¥[ºë²Ó©M¦h¼Ë¤Æ
¬Æ¦Ü´£¨Ñ¤F§ó¦h¤¶±ÁÙ¥iÅý¨Ï¥ÎªÌ¦Û¦æ³]p¡C¤U±¹Ï¤¤ªº¤W¤è¨âÓµøµ¡¬O¦b Windows XP ¤U¥Í¦¨ªºµøµ¡¡A¥ªÃ䪺¬O¶}±Òµøı·®æ¡A¥kÃ䪺¨S¦³¶}±Òµøı·®æ¡F¤U±ªº¨âÓµøµ¡¬O¦b Windows 7 ¤U¥Í¦¨ªºµøµ¡¡A¥ªÃ䪺¬O¶}±Òµøı·®æ¡A¥kÃ䪺¨S¦³¶}±Òµøı·®æ¡C
Windows XP ¤Î¨ä«áªº§@·~¨t²Î¬O³z¹L uxtheme.dll »P²Ä¤»ª©ªº comctl32.dll ¨âӰʺA³sµ²µ{¦¡®w¡]Dynamic-Link Library¡A´N¬O DLL ÀÉ¡^¹F¨ì¥þ·sªºµøı·®æ¡A«eªÌ¬O³B²z¦³Ãö§G´º¥DÃDªºµ{¦¡®w¡F¦Ó«áªÌ«h¬O³B²z±±¨î¶µªºµ{¦¡®w¡C¤£¹L¦b³o¤@³¹ùØ¡A¤p¤ì°¸¶È¶È°Q½×±±¨î¶µªº·sµøı·®æ¡A¦]¦¹¤£¹ï uxtheme.dll ¦h°µ´yz¡C©³¤U¹ï¤£¦Pª©¥»ªº Windows ³B²zµøı·®æ©Ò»Ý°ÊºA³sµ²µ{¦¡®w»¡©ú¡G
①¡BWindows 9x/Me §@·~¨t²Î¤£¤ä´©µøı·®æ¡A¨ä±±¨î¶µ¤À¦¨¼Ð·Ç±±¨î¶µ»P³q¥Î±±¨î¶µ¡A«eªÌ¥Ñ user.dll t³d³B²z¡A«áªÌ«h¬O³z¹L 5.x ª©ªº comctl32.dll ³B²z¡C
②¡BWindows XP ¤Î¨ä¥H«áªº§@·~¨t²Î¤ä´©µøı·®æ¡Cµøµ¡ªº¼ÐÃDÄæ¡B³Ì¤j¤Æ«ö¶sµ¥«D¤u§@°Ïªº³¡¤À¡A¤£½×¼Ð·Ç±±¨î¶µ©Î³q¥Î±±¨î¶µ¡A³£¦Û°Ê¥Hµøı·®æÅã¥Ü¡F¤u§@°Ïªº³¡¤À«h¥i¦Û¥Ñ¿ï¾Ü±±¨î¶µ¬O§_¨ã¦³µøı·®æ¡A³o¬O¬°¤FÅýµ{¦¡¤]¯à¦b Windows XP ¤Î¨ä¥H«áªº§@·~¨t²Î¤W°õ¦æ¡C
¬°¤F¹F¨ì³oӥتº¡AWindows XP ªº«D¤u§@°Ï§ï¥Ñ uxtheme.dll ³B²z¡F¤u§@°Ï³¡¤À«h¬O¸û¬°½ÆÂø¡CWindows XP ´£¨Ñ¤F¨â®Mªº comctl32.dll¡A¨äª©¥»¤À§O¬O²Ä¤ª©»P²Ä¤»ª©¡A«eªÌ¦b¡u\WINDOWS\system32\¡v¤l¥Ø¿ý¡A±Mªùt³d³B²z¤£¨ãµøı·®æªº³q¥Î±±¨î¶µ¡F«áªÌ¦b¡u\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_XXX\¡v¤l¥Ø¿ý¡At³d³B²z¨ã¦³µøı·®æªº¼Ð·Ç±±¨î¶µ»P³q¥Î±±¨î¶µ¡F¦Ó¤£¨ãµøı·®æªº¼Ð·Ç±±¨î¶µ¤´¥Ñ user32.dll ³B²z¡C¦³Ãö Windows XP ³B²zµøı·®æªº DLL ¾ã²z¦p¤Uªí¡Aªí¤¤ªº XXX ·|¦³ 6.00 ©Î 6.10 ¦r¼Ë¡Aªí¥Ü²Ä¤»ª©¡G
°Ï°ì | µøı·®æ | DLL |
«D¤u§@°Ï | ¬O | C:\WINDOWS\system32\uxtheme.dll |
¼Ð·Ç±±¨î¶µ | ¬O | C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_XXX\comctl32.dll |
§_ | C:\WINDOWS\system32\user32.dll | |
³q¥Î±±¨î¶µ | ¬O | C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_XXX\comctl32.dll |
§_ | C:\WINDOWS\system32\comctl32.dll |
¤W±»¡ªº¬O 32 ¦ì¤¸ªº±¡§Î¡A¤£¹L Windows XP ¤]µo¦æ¹L 64 ¦ì¤¸ª©¥»¡A¦Ó«áªº Windows Vista/7 ¥H¤Î§ó«á±ªº Windows 8/8.1/10 µ¥§@·~¨t²Î³£¤À¬° 32 ¦ì¤¸ª©»P 64 ¦ì¤¸ª©¨âºØ¡A©Ò¥H±¡§Î«Ü½ÆÂø¡CÁö¬O¦p¦¹¡Aì²z¸ò¤W± 32 ¦ì¤¸ª©ªº Windows XP Ãþ¦ü¡A®t§O¦b©ó 64 ¦ì¤¸ª©¥»ªº DLL ¦ì©ó¡uC:\Windows\winsxs\amd64_microsoft.windows.common-controls_XXX¡v¤l¥Ø¿ý¤º¡A¦Ó 32 ¦ì¤¸ª©¥»ªº¦ì©ó¡uC:\Windows\winsxs\x86_microsoft.windows.common-controls_XXX¡v¤l¥Ø¿ý¤º¡C
¥Ñ¤W±»¡©ú¥iª¾¡A¦b¹w³]ªº±¡§Î¤U¡A«D¤u§@°Ï¦Û°Ê´N·|¨ã¦³·sµøı·®æ¡F¦Ó¦b¤u§@°Ïªº±±¨î¶µ¨É¨ü¤£¨ì³o¼Ëªº¦n³B¡A°£«D§Ú̦bµ{¦¡¤¤¯S§O«ü¥Ü¤~¨ã¦³µøı·®æ¡C
¨º»ò¡An¦bµ{¦¡¤¤¤Þ¤Jµøı·®æ¡A¸Ó«ç»ò°µ©O¡H¨ä¹ê¤£Ãø¡A¹F¦¨©³¤Uªº±ø¥ó§Y¥i¡G
¦b Windows 95/98/Me ®É¥N¡Acomctl32.dll ¦³®É¥]¸Ë¦b Internet Explorer ¨Ñ¨Ï¥ÎªÌ¤U¸ü§ó·s¡A©Ò¥H comctl32.dll ªºª©¥»¤£¤@©w»Pì¨Ó¦w¸Ë¦n Windows ¤ºªº comctl32.dll ¬Û¦P¡A©Ò¥H¦C¥X¤Uªí¨Ñ¨Ï¥ÎªÌ¬d¸ß¡C¨Ò¦p¡AWindows 95 ¤ºì¨Óªº comctl32.dll ¬O 4.00 ª©¡A°²¦p«á¨Ó¤U¸ü¤F Internet Explorer 4.0 ¨Ã¦w¸Ë¦n¤F¡A¨º»ò comctl32.dll ´N¬O¤É¯Å¬° 4.71 ª©¡C
¨Æ¹ê¤W¡A¤]¤£¥Î³o¼Ë³Â·Ð¡A°²¦p¥u¬Onª¾¹D¬O§_¤ä´©µøı·®æ¡A¨£¤Uªí´Nª¾¹D¡A¦Û Windows XP ¶}©l¡Acomctl32.dll ´N¤w¸g¬O 6.00 ª©¤F¡A¤ä´©µøı·®æ¡CWindows XP/Vista/7 ¦³¦hÓª©¥»ªº comctl32.dll¡A§Ú·Q§A¤w¸gª¾¹Dì¦]¤F¡C
comctl32 ª©¥» | Windows | NT | Internet Explorer |
3.51 | Windows NT 3.51 | ||
4.00 | Windows 95 | 3.00 | |
4.70 | Windows 95 OSR2 | Windows NT 4.0 | 3.01, 3.02 |
4.71 | 4.0 | ||
4.72 | Windows 98 | Windows NT 4.0 service packs | 4.01 |
5.80 | Windows 98 SE | 5.0 | |
5.81 | Windows Me | Windows 2000 | 5.01¡B5.5¡B6.0 |
5.82 | Windows XP Windows Vista Windows 7 | ||
6.00 | Windows XP (SxS) | ||
6.10 | Windows Vista (SxS) Windows 7 (SxS) |
¬JµM¦Û Windows XP ¤§«á¡A¤]´N¬O¥Á°ê 90 ¦~¡]¦è¤¸ 2001 ¦~¡^¤§«áµo°âªº§@·~¨t²Î³£¥i¥H¤ä´©µøı·®æ¤F¡C©Ò¥H¹ï©ó«ez²Ä①Ó±ø¥ó¦Ó¨¥¡A²{¦bªº Windows §@·~¨t²Î³£¤wº¡¨¬¤F¡C¨º»òÃö©ó²Ä②Ó±ø¥ó¸Ó¦p¦ó°µ¡A¤~¯à²Å¦X©O¡H
µ{¦¡³]p®v¥i¥H¼¶¼g¡uÀ³¥Îµ{¦¡¸ê°T²M³æ¡v¡]application manifests¡^¨Óº¡¨¬²Ä②Ó±ø¥ó¡C¡uÀ³¥Îµ{¦¡¸ê°T²M³æ¡v¬O¤@ºØ°ÆÀɦW¬° .manifest ªºÀɮסA¨ä¤º®e¥]§t¤F´yzÀ³¥Îµ{¦¡©Ò©I¥sªº DLL ª©¥»¸ê°T¡C©Ò¥H Windows §@·~¨t²Î¦b°õ¦æ§t¦³¦¹Ãþ²M³æªºÀ³¥Îµ{¦¡®É¡A´N¥i¥H®Ú¾Ú²M³æ¤ºªº¸ê®Æ¿ï¾Üþ¤@Óª©¥»ªº DLL¡C¨Ò¦pÀ³¥Îµ{¦¡¤£¥Îµøı·®æ¡A´N¿ï¾Ü©I¥s²Ä¤ª©ªº COMCTL32.DLL¡A¨Ã¦bÀ³¥Îµ{¦¡¸ê°T²M³æùØ«ü©ú¤F²Ä¤ª©ªº comctl32.dll¡A§Y¨Ï¨t²Î¤W¦³§Oªºª©¥»¡A§@·~¨t²Î¤]¤´±N¬°¸ÓÀ³¥Îµ{¦¡¸ü¤J²Ä¤ª©ªº comctl32.dll¡C¡]¨£µù¤@¡^
À³¥Îµ{¦¡¸ê°T²M³æªº»yªk¬O¥H XML ®æ¦¡®Ñ¼g¡AXML ¬Oªñ¦~«Ü¬y¦æªº»y¨¥¡A¦ý¤£¦b¤p¤ì°¸ºô¶°Q½×½d³ò¡A¦bµù¤G¦³ XML ªº·¥Â²¤¶²Ð¡A¥i¥H¤@¬Ý¡CXML Àɮ׳£¬O¯Â¤å¦rÀÉ¡A¥i¥H¨Ï¥Î¡u°O¨Æ¥»¡v©Î¡uUltraEdit 32¡v³oÃþªº¤å®Ñ³B²z³nÅé«Ø¥ß¡C
¤p¤ì°¸¥ý¸ÑÄÀ¦p¦ó»s§@¨ã¦³µøı·®æªº¥i°õ¦æÀÉ¡AµM«á¦A»¡©úÀ³¥Îµ{¦¡¸ê°T²M³æ¤º¦U¦æ©Ò¥Nªíªº·N¸q¡C°²¦pn¨Ï»s§@¦¨ªº¥i°õ¦æÀɨ㦳µøı·®æ¡A¹ê½îªº¨BÆJ¦p¤U¡G
⒜¡B¼¶¼g²Õ¦X»y¨¥ì©lµ{¦¡¡A°²³]ÀɦW¬° my_prog.asm¡A¨ä«á©Ò»s§@¦¨ªº¥i°õ¦æÀɬ° my_prog.exe¡Cnª`·Nªº¬O²Õ¦X»y¨¥ì©lµ{¦¡¥²¶·n¦³©I¥s InitCommonControls API ªº«ü¥O¡C
INCLUDE COMMCTRL.INC INCLUDELIB COMCTL32.LIB ⁝ call InitCommonControls
⒝¡B¼¶¼gÀ³¥Îµ{¦¡¸ê°T²M³æ¡C
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="Company.Product.Name" version="1.0.0.0" processorArchitecture="amd64" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
⒞¡B¼¶¼g¸ê·½´yzÀÉ¡Amy_prog.rc¡A¦bùر¼W¥[¨â¦æ¡G
#define RT_MANIFEST 24 1 RT_MANIFEST MOVEABLE PURE "my_prog.exe.manifest"
⒟¡B¨ä¾l¨BÆJ¸ò¥H«e¤@¼Ë¡A§âì©lµ{¦¡¡B¸ê·½´yzÀÉ¡BÀ³¥Îµ{¦¡¸ê°T²M³æ³£©ñ¦b¦P¤@ӥؿý¤º¡AµM«á½sĶ¸ê·½´yzÀÉ¡B²ÕĶì©lµ{¦¡¡B³sµ²¥ØªºÀɤθ귽ÀÉ¡C¦b½sĶ¸ê·½´yzÀɮɡArc.exe ·|¦Û°Ê§ä¨ìÀ³¥Îµ{¦¡¸ê°T²M³æ¡A±N¨ä½sĶµM«á¯Ç¤J¸ê·½Àɤ¤¡A¥Î link.exe ³sµ²®É¡A´N¯à±N¨ä¤¤ªº¸ê°T¶Ç¤J¥i°õ¦æÀɤº¡C
¦Ü¦¹©Ò»s§@¥X¨Óªº my_prog.exe °õ¦æ®É¡A´N¯à°÷¦³µøı·®æ¤F¡C
©³¤U¤p¤ì°¸¥H«e±´yzªº my_prog.exe.manifest ¨Ó»¡©ú XML ªº³W«h¥H¤ÎÀ³¥Îµ{¦¡¸ê°T²M³æ©Ò¥X²{ªº¤¸¯À»PÄݩʪº·N¸q¡C¦b³o¨à¡A¤p¤ì°¸¥u»¡©ú¦³Ãöµøı·®æªº³¡¤À¡A¤]´N¬O¶À¦â³¡¤À¡A¤£¹L¦pªG©ú¥Õ¤F¶À¦â³¡¤À¡A¨º¥Õ¦â³¡¤À¤]´N¯àIJÃþ®Ç³q¤F¡C
²Ä¤@¦æ¬O
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
¨ä¤¤ version¡Bencoding ³o¨âÓÄݩʨ£µù¤G¡Cstandalone ÄݩʥΨӫü¥Ü¸Ó XML ¬O§_¨Ì¿à¥~³¡¸ê·½¡]¦p¥~³¡ªº DTD ¤å¥ó¡^¨Ó¶i¦æ¸ÑªR¡AÄÝ©ÊÈ¥i¬° yes©Î no¡C¦pªG¬O yes¡Aªí¥Ü³oÓ XML ¤£¨Ì¿à¥~³¡¸ê·½¡A¤]´N¬O»¡¡A¸ÑªR©Ò»Ýªº¸ê®Æ³£¦b³oÓ XML ¤º¡AXML ¥i¥H¿W¥ß¦s¦b¡A³o·N¨ýµÛ¦¹ÀÉ®×¥i¥H³Q Windows ¨t²Îª½±µÅª¨ú¡A¦Ó¤£»Ýn¨ä¥Lªº¥~³¡©w¸q©Î¸ê·½¡C
²Ä¤G¦æ¤Î³Ì«á¤@¦æ¬O
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> ⁝ </assembly>
¦¹³Bªº assembly ¨Ã«D²Õ¦X»y¨¥ªº·N«ä¡A¦Ó¬O²Õ¥ó¡B¤¸¥óªº·N«ä¡C¨ä¤º¦³¨âÓÄÝ©Ê¡Gxmlns¡BmanifestVersion¡Cxmlns «ü©w¤F¦b <assembly> ¨ì </assembly> ½d³ò¤ºªº©R¦WªÅ¶¡¡]XML name space¡^¡A¤]´N¬O»¡³oÓ©R¦WªÅ¶¡¥u¦b³oÓ½d³ò¦³®Ä¡C¦b XML ÀÉ®×ùØ¡A¦³¥i¯à¥]§t¤£¦P¨Ó·½ªº¤¸¯À¡A¨Ò¦p¥i¯à¨Ó¦Û¤£¦P¼Ð·Ç©Î¤£¦P¤½¥q¡C¦]¦¹¦b³oùاi¶D¸ÑªR¾¹¡A³o¨Ç¤¸¯À¬OÄÝ©ó·L³n©w¸qªºÀ³¥Îµ{¦¡´yz³W½d¡Aasm.v1¡A¨Ã¨¾¤î³o¨Ç¤¸¯À¦WºÙ»P¨ä¥L XML À³¥Î¤¤¥i¯à¨Ï¥Îªº¬Û¦P¦WºÙµo¥Í½Ä¬ð¡CmanifestVersion Äݩʧi¶D Windows §@·~¨t²Î¨Ï¥Î¦p¦ó¸ÑªR©M¸ÑÄÀ³oÓ Manifest ¤å¥ó¤¤ªº«H®§¡A¨ì¦¹®É¬°¤î¡A¥u¯à¨Ï¥Î 1.0¡C
<assembly> ¤¸¯À¤º¥i¥H¦³ <noInherit>¡B<dependency> µ¥¤¸¯À¡A¦¹³B¥u¤¶²Ð«áªÌ¡A«eªÌ¥i¦³¥iµL¡C
<dependency> ¤¸¯À¦bÀ³¥Îµ{¦¡¸ê°T²M³æ¤¤¡Aªí¥Ü¦¹µ{¦¡©Ò¨Ì¿àªº¥~³¡µ{¦¡¶°¡]assemblies¡^¡A¥~³¡µ{¦¡¶°¬O«üÀ³¥Îµ{¦¡¦b°õ¦æ¹Lµ{¤¤©Ò»Ýnªº°ÊºA³sµ²¦¨µ{¦¡®w¡]DLL¡^©Î¨ä¥L¸ê·½¡C<dependency> ¨S¦³ÄÝ©Ê¡A¦Ó¨ä¤º³¡¤@©wn¦³ <dependentAssembly> ¤¸¯À¡C¹³³o¼Ë¡A°²¦p¥Ò¤¸¯À¦b¤A¤¸¯À¤§¤º¡AºÙ¥Ò¤¸¯À¬°¤l¤¸¯À¡A¤A¤¸¯À¬°¤÷¤¸¯À¡F©Ò¥H <dependentAssembly> ¬° <dependency> ªº¤l¤¸¯À¡A¦Ó <dependency> ¬° <dependentAssembly> ªº¤÷¤¸¯À¡C
<dependentAssembly> ¤¸¯À¨S¦³ÄÝ©Ê¡A¨Ã¥B¨ä²Ä¤@Ó¤l¤¸¯À¤@©wn¬O <assemblyIdentity>¡C
<assemblyIdentity> ¤¸¯À¤º¤£¯à¥]§t¨ä¥L¤¸¯À¡A¦ý¬O¥¦¦³¤»ÓÄÝ©Ê¡A¦p¤Uªí¡G
ÄÝ©Ê | ¥²n©Ê | »¡©ú |
type | ¥²n | «ü©wÀ³¥Îµ{¦¡©Î²Õ¥óªºÃþ«¬¡A¨äÄÝ©ÊÈ¥u¦³¤@ºØ¡Awin32¡A³£¥²¶·¬O¤p¼g¡C |
name | ¥²n | À³¥Îµ{¦¡©Î²Õ¥óªº¦WºÙ¡A¥²¶·¬O°ß¤@ªº¡A¥H¡uOrganization.Division.Name¡v®æ¦¡®Ñ¼g¡A¤À§Oªí¥Ü²Õ´¦WºÙ¡B³¡ªù¦WºÙ¡Bµ{¦¡¦WºÙ¡A¨Ò¦p¡uMicrosoft.Windows.Common-Controls¡v |
version | ¥²n | À³¥Îµ{¦¡©Î²Õ¥óªºª©¥»¡A¥H¡umm.nn.oo.pp¡v®æ¦¡®Ñ¼g¡Amm¡Bnn¡Boo¡Bpp ³£¬O¼ÆÈ¡A¤À§Oªí¥Ü¥Dnª©¥»¡B¦¸nª©¥»¡B«Ø¸mª©¥»¡B×¥¿ª©¥»¡A¨ä½d³ò¥²¶·¦b 0¡ã65535 ¤§¶¡¡C |
processorArchitecture | ¥i¿ï | «ü©wÀ³¥Îµ{¦¡©Î²Õ¥ó¦bþÓ³B²z¾¹¡]CPU¡^¤W°õ¦æ¡A¥i¯àªºÄÝ©ÊȦ³ x86¡Bamd64¡Barm ©M arm64¡A¤]¥i¥H¥Î * ªí¥Ü¾A¥Î©ó¥ô¦ó CPU¡C¡]x64 CPU ¬O¥H amd64 ªí¥Ü¡^ |
publicKeyToken | ¥i¿ï | ¦Ü¤Ö¬O¥|¦r²Õ©Ò²Õ¦¨ªº¤Q¤»¶i¦ì¼ÆÈ¡A¥NªíÀ³¥Îµ{¦¡©Î²Õ¥óªº¤½Æ_«¢§ÆÈ¡AÂǥѦ¹¤½Æ_«¢§ÆÈ¥iª¾¬O¥ÑþÓµo¦æªÌñ¸pªº¡C¨Ò¦p·L³nñ¸pªº¤½Æ_«¢§Æȳ̫á¤KӦ줸²Õ¬O 6595b64144ccf1df¡C |
language | ¥i¿ï | ³]©wÀ³¥Îµ{¦¡©Ò¨Ï¥Î»y¨¥¡A°w¹ï¥þ²y¨Ï¥ÎªºÀ³¥Îµ{¦¡À³³]¬°¡u*¡v¡A°w¹ï¯S©w»y¨¥»Ý¥Î DHTML ªº»y¨¥®æ¦¡®Ñ¼g¡A¨Ò¦p zh-tw ªí¥Ü¥¿Å餤¤å¡Azh-cn ªí¥Ü²Å餤¤å¡Aen-us ªí¥Ü¬ü¦¡^¤å¡Aen-gb ªí¥Ü^¦¡^¤å¡C |
»¡§¹¤Fì²z¤§«á¡A¹ê§@¤@ÓÀ³¥Îµ{¦¡§@¬°¥»³¹ªº½d¨Ò¡C¦¹À³¥Îµ{¦¡ºÙ¬° RADIXC.EXE¡A°õ¦æ®É¥X²{¹ï¸Ü²°¡A¹ï¸Ü²°¤W¦³½s¿è®Ø¡B«ö¶s¥H¤ÎÀRºA¶s±±¨î¶µ¡A¥¦Ì³£¨ã¦³µøı·®æ¡A¦p¥k¹Ï¡C¨Ï¥ÎªÌ¥i¦b½s¿è®Ø¿é¤º¤J¼ÆÈ¡A«ö¤U¡uÂà´«¡v«ö¶s¤§«á¡ARADIXC pºâ¸Ó¼ÆȦb¤£¦P¶i¦ì¤è¦¡ªºµ²ªG¡A¨Ã¦b¸s²Õ®Ø»PÂà´««ö¶s¤§¶¡¦L¥X¨Ó¡C
RADIXC ³Ì¤j¥u¯à³B²z 0FFFFFFFFH ªº¼ÆÈ¡A¥¦¨S¦³Àˬd¾÷¨î¡A¦pªG¶W¹L¦¹¼ÆÈ¡A©Òpºâªºµ²ªG·|»P¹w´Á¤£²Å¡C¤£¹L RADIXC ·|Àˬd¿é¤Jªº¦r¤¸¦X¤£¦X²z¡A¨Ò¦p¨Ï¥ÎªÌ¿ï©w¿é¤Jªº¬O¤K¶i¦ì¡A¿é¤Jªº¦r¤¸¥u¯à¦b "0"¡ã"7" ¤§¶¡¡A¦pªG¤£¦b¦¹½d³ò·|Åã¥Ü¿é¤J¿ù»~ªº°T®§¡C
©³¤U¬O RADIXC.EXE.MANIFEST ªº¤º®e¡G
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
21 |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="AtHome.Wanker.RadixC"
version="1.0.0.0"
processorArchitecture="amd64"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="amd64"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly> |
©³¤U¬O RADIXC.RC ªº¤º®e¡G
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
37 38 39 40 41 |
#include "RESOURCE.H"
#define MANIFEST 24
#define IDD_DLG 1000
#define IDB_RDXC 1011
#define IDB_QUIT 1012
#define IDS_INPT 1001
#define IDE_INPT 1002
#define IDB_GRP 1003
#define IDB_BIN 1004
#define IDB_OCT 1005
#define IDB_DEC 1006
#define IDB_HEX 1007
#define IDS_BIN 1008
#define IDS_OCT 1009
#define IDS_DEC 1010
#define IDS_HEX 1013
IDD_DLG DIALOGEX 300,200,122,111
CAPTION "¶i¦ìÂà´«"
FONT 12,"Times New Roman",400,0,0
STYLE WS_VISIBLE|WS_OVERLAPPEDWINDOW
BEGIN
DEFPUSHBUTTON "Âà´«",IDB_RDXC,35,96,33,12
PUSHBUTTON "Â÷¶}",IDB_QUIT,71,96,33,12
LTEXT "¿é¤J¼ÆÈ¡G",IDS_INPT,11,3,36,9
EDITTEXT IDE_INPT,47,3,42,9,ES_AUTOHSCROLL
GROUPBOX "±z¿é¤Jªº¼ÆȬO´X¶i¦ì",IDB_GRP,14,15,90,33
AUTORADIOBUTTON "¤G¶i¦ì", IDB_BIN,17,27,36,9
AUTORADIOBUTTON "¤K¶i¦ì", IDB_OCT,17,36,36,9
AUTORADIOBUTTON "¤Q¶i¦ì", IDB_DEC,62,27,36,9
AUTORADIOBUTTON "¤Q¤»¶i¦ì",IDB_HEX,62,36,36,9
LTEXT "",IDS_BIN,2,54,118,9
LTEXT "",IDS_OCT,2,63,118,9
LTEXT "",IDS_DEC,2,72,118,9
LTEXT "",IDS_HEX,2,81,118,9
END
1 MANIFEST "radixc.exe.manifest"
my_icon ICON "bodh.ico" |
¥t¥~ÁÙ¦³ RADIXC.ASM ì©lµ{¦¡¡A¦ý¤p¤ì°¸§â¥¦©ñ¦b«á±ªº»¡©ú³¡¤À¡C§â RADIXC.EXE.MANIFEST¡BRADIXC.RC¡BBIDH.ICO¡BRADIX.CASM ³£©ñ¦b¦P¤@¥Ø¿ý¡AµM«á¨Ì·Ó RADIXC.ASM «e´X¦æªº¨BÆJ»s§@¥X RADIXC.EXE¡C
©³¤U¬O RADIXC.ASM ªº¤º®e¡G
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
37 38 39 40 41 42
43 44 45 46 47 48
49 50 51 52 53 54
55 56 57 58 59 60
61 62 63 64 65 66
67 68 69 70 71 72
73 74 75 76 77 78
79 80 81 82 83 84
85 86 87 88 89 90
91 92 93 94 95 96
97 98 99 100 101 102
103 104 105 106 107 108
109 110 111 112 113 114
115 116 117 118 119 120
121 122 123 124 125 126
127 128 129 130 131 132
133 134 135 136 137 138
139 140 141 142 143 144
145 146 147 148 149 150
151 152 153 154 155 156
157 158 159 160 161 162
163 164 165 166 167 168
169 170 171 172 173 174
175 176 177 178 179 180
181 182 183 184 185 |
;RadixC.ASM¥iÅý¨Ï¥ÎªÌ¿é¤J¤G¶i¦ì¡B¤K¶i¦ì¡B¤Q¶i¦ì©Î¤Q¤»¶i¦ìªº¼ÆÈ¡AµM«á
;¶i¦æÂà´«¦¨¨ä¥L¶i¦ìªº¼ÆÈ¡C¨Ì·Ó¤U±¤è¦¡²ÕĶ¨Ã³sµ²¡G
;uasm64 -win64 radixc.asm
;rc radixc.rc
;link radixc.obj radixc.res /largeaddressaware:no
OPTION CASEMAP:NONE
OPTION WIN64:3
IDD_DLG EQU 1000
IDB_RDXC EQU 1011
IDB_QUIT EQU 1012
IDS_INPT EQU 1001
IDE_INPT EQU 1002
IDB_GRP EQU 1003
IDB_BIN EQU 1004
IDB_OCT EQU 1005
IDB_DEC EQU 1006
IDB_HEX EQU 1007
IDS_BIN EQU 1008
IDS_OCT EQU 1009
IDS_DEC EQU 1010
IDS_HEX EQU 1013
INCLUDE MYFIX.INC
INCLUDE WINDOWS.INC
INCLUDE COMMCTRL.INC
INCLUDELIB KERNEL32.LIB
INCLUDELIB USER32.LIB
INCLUDELIB COMCTL32.LIB
INCLUDELIB MSVCRT.LIB
sprintf PROTO :VARARG
;*********************************************************************
.CONST
szIcon DB "my_icon",0
szFmtO DB "=%oo",0
szFmtD DB "=%ud",0
szFmtH DB "=%xh",0
szCap DB "µo¥Í¿ù»~",0
szErr1 DB "¤£¥i¹w´Áªº¿ù»~¡C",0
szErr2 DB "¿é¤J¿ù»~©Î¨S¿é¤J¼ÆÈ¡C",0
;*********************************************************************
.DATA
hInst DQ ?
hEdit DQ ?
hBtn DQ 4 DUP (?)
;*********************************************************************
.CODE
;---------------------------------------------------------------------
radix_convert PROC hdlg:QWORD,n:WORD
;§â¨Ï¥ÎªÌ¿é¤Jªº¼ÆÈÂà´«¦¨¦UºØ¶i¦ìªº¼ÆÈ¡A¨ÃÅã¥Ü¦b¥|ÓÀRºA±±¨î¶µ¤W
;¦^¶ÇÈ¡G1¡Ð¦¨¥\°õ¦æ¡F0¡Ð¥¢±Ñ¡A¥i¯à¬O¿é¤J¿ù»~©Î¥¼¿é¤J
LOCAL number:DWORD,buffer[30h]:BYTE
;¨ú±o½s¿è®Ø¤º®e¡A¦s©óbuffer°Ï°ìÅܼƤº
invoke GetWindowText,hEdit,ADDR buffer,SIZEOF buffer
mov rcx,rax
jrcxz error
;R11ªí¥Ü¶i¦ì¼Æ¡A¤]¬O¤£¥i¤j©ó©Îµ¥©óªº¼Æ¡A¨Ò¦p¤K¶i¦ì¥u¯à¦b0¡ã7¤§¶¡¡AR11¡×8
.if n==0
mov r11,2
.elseif n==1
mov r11,8
.elseif n==2
mov r11,10
.else
mov r11,16
.endif
lea r8,buffer
xor rax,rax
xor rdx,rdx
next0: movzx r10,BYTE PTR [r8]
cmp r10b,"9" ;Y¤j©ó"9"¡Aªí¥Ü¨Ï¥ÎªÌ¿é¤Jªº¼ÆÈÀ³¬O¤Q¤»¶i¦ì
jbe chk
cmp r11,16 ;YR11¤£¬°16¡Aªí¥Ü¿ù»~
jne error
and r10b,0dfh ;§â¤p¼gªº"a"¡ã"f"Åܬ°"A"¡ã"F"
sub r10b,37h ;§â¦r¤¸"A"¡ã"F"Åܬ°0AH¡ã0FH¼ÆÈ
cmp r10b,r11b
jb ok0
error: xor rax,rax
jmp exit
chk: sub r10b,"0" ;§â¦r¤¸"0"¡ã"9"Åܬ°0¡ã09¼ÆÈ
cmp r10b,r11b ;Y¼ÆȶW¹L©³¼Æ¡Aªí¥Ü¿ù»~
jae error
ok0: mul r11
add rax,r10 ;RAX¡×RAX*R11¡ÏR10¡AR11¬O©³¼Æ
inc r8
loop next0
mov number,eax
invoke sprintf,ADDR buffer,OFFSET szFmtO,number
invoke SetDlgItemText,hdlg,IDS_OCT,ADDR buffer ;¦L¥X¤K¶i¦ì
invoke sprintf,ADDR buffer,OFFSET szFmtD,number
invoke SetDlgItemText,hdlg,IDS_DEC,ADDR buffer ;¦L¥X¤Q¶i¦ì
invoke sprintf,ADDR buffer,OFFSET szFmtH,number
invoke SetDlgItemText,hdlg,IDS_HEX,ADDR buffer ;¦L¥X¤Q¤»¶i¦ì
mov rcx,32
lea rdx,buffer
next1: shl number,1
jc one
mov BYTE PTR [rdx],"0"
jmp short ok1
one: mov BYTE PTR [rdx],"1"
ok1: inc rdx
loop next1
mov WORD PTR [rdx],62h
invoke SetDlgItemText,hdlg,IDS_BIN,ADDR buffer ;¦L¥X¤G¶i¦ì
exit: ret
radix_convert ENDP
;---------------------------------------------------------------------
DlgProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL n:WORD
.if uMsg==WM_INITDIALOG
;³]©w¹ï¸Ü²°¼ÐÃDÄ檺¹Ï¥Ü
invoke LoadIcon,hInst,OFFSET szIcon
invoke SendMessage,hDlg,WM_SETICON,ICON_SMALL,rax
;Àò±o¥|Ó³æ¿ï«ö¶sªº¥N½X¡A¨Ã¦s©óhBtn°}¦C
mov n,0
next2: mov dx,IDB_BIN
add dx,n
invoke GetDlgItem,hDlg,dx
movzx r10,n
mova hBtn[r10*8],rax
inc n
cmp n,4
jb next2
;§â¤Q¶i¦ì³æ¿ï«ö¶s³]¬°¹w³]ªº¡A¥ç§Y³Q¿ï©wªº
invoke SendMessage,hBtn[10h],BM_CLICK,0,0
;Àò±o½s¿è®Ø¥N½X¡A¨Ã¦s©óhEdit¡AµM«á±N¨ä³]¬°³Ì¦h¥u¯à¿é¤J32Ó¦r¤¸
invoke GetDlgItem,hDlg,IDE_INPT
mov hEdit,rax
invoke SendMessage,rax,EM_SETLIMITTEXT,32,0
.elseif uMsg==WM_COMMAND
mov rax,r8 ;R8W¡×ÃѧO½X
shr rax,10h ;AX¡×³qª¾½X
.if ax==BN_CLICKED
.if r8w==IDB_QUIT
jmp quit
.elseif r8w==IDB_RDXC
mov n,0
;Àˬd¨Ï¥ÎªÌ¿ï¾Üþ¤@Ó³æ¿ï«ö¶s
next3: movzx r10,n
mova rcx,hBtn[r10*8] ;¨ú±o³æ¿ï«ö¶sªº¥N½X
invoke SendMessage,rcx,BM_GETSTATE,0,0 ;¨ú±o³æ¿ï«ö¶sª¬ºA
test rax,BST_CHECKED ;YTEST¹Bºâ«á¬°«D¹s¡Aªí¥Ü
jnz found ;¤w§ä¨ì¨Ï¥ÎªÌ¿ï©wªº³æ¿ï«ö¶s¡Anªí¥Ü¿ï©wªº³æ¿ï«ö¶s¡A¦p¤U
inc n ; n | 0 1 2 3
cmp n,4 ;«ö¶s|¤G¶i¦ì ¤K¶i¦ì ¤Q¶i¦ì ¤Q¤»¶i¦ì
jb next3
invoke MessageBox,hDlg,OFFSET szErr1,OFFSET szCap,MB_OK
jmp quit
found: invoke radix_convert,hDlg,n ;pºâ¥|ºØ¶i¦ìªkªº¼ÆÈ
or rax,rax
jnz finish
invoke SetDlgItemText,hDlg,IDS_BIN,OFFSET szErr2
invoke SetDlgItemText,hDlg,IDS_OCT,OFFSET szIcon+7
invoke SetDlgItemText,hDlg,IDS_DEC,OFFSET szIcon+7
invoke SetDlgItemText,hDlg,IDS_HEX,OFFSET szIcon+7
finish:
.endif
.endif
.elseif uMsg==WM_CLOSE
quit: invoke EndDialog,hDlg,0
.else ;¨ä¥L¥¼³B²zªº°T®§ªð¦^ FALSE
xor rax,rax
ret
.endif ;¤w³B²zªº°T®§¡Aªð¦^ TRUE
mov rax,1
ret
DlgProc ENDP
;---------------------------------------------------------------------
main PROC
invoke GetModuleHandle,0
mov hInst,rax
invoke DialogBoxParam,hInst,IDD_DLG,0,OFFSET DlgProc,0
invoke ExitProcess,0
call InitCommonControls
main ENDP
;*********************************************************************
END main |
InitCommonControls ¬O¥Î¨Óªì©l¤Æ³B²z³q¥Î±±¨î¶µªº°ÊºA³sµ²µ{¦¡®w¡Acomctl32.dll¡A¦Ó¼Ð·Ç±±¨î¶µ¦p¨ã¦³µøı·®æ¡A¤]¬O¥Ñ comctl32.dll ³B²z¡A¦]¦¹§Y¨ÏÀ³¥Îµ{¦¡¶È¶È¥u¦³¼Ð·Ç±±¨î¶µ¤£§t³q¥Î±±¨î¶µ¡A¥un¨ã¦³µøı·®æ¤´µMn©I¥s InitCommonControls ªì©l¨ä¸ê®Æ¡CInitCommonControls ¨S¦³¦^¶ÇȤ]¨S¦³°Ñ¼Æ¡A¦]¦¹¥i¥Hª½±µ¥Î¤U±µ{¦¡½X©I¥s¡G
call InitCommonControls
InitCommonControls API ¦b comctl32.dll µ{¦¡®wùر¡A©Ò¥H¦b²Ä 27 ¦æn¥Î INCLUDE §â COMMCTRL.INC ¥]§t¶i¨Ó¡A²Ä 30 ¦æ¥Î INCLUDELIB «ü¥Ü²ÕĶ¾¹¨ì COMCTL32.LIB §ä³sµ²©Ò»Ý¸ê®Æ¡C§A¥i¯à·|°Ý¡A¬°¤°»ò¥]§tÀɬO COMMCTRL.INC ¦Ó¤£¬O COMCTL32.INC¡H¨ä¹ê¤p¤ì°¸¤]¤£ª¾¹D¬°¤°»ò¡A¥i¯à¬O WinInc ¼Ð·s¥ß²§§a¡H¡I
¨£ RADIXC.ASM ²Ä 182 ¦æ¡A°õ¦æ InitCommonControls ¦¨¥\¦A¥[¤WÀ³¥Îµ{¦¡¸ê°T²M³æ¡AÀ³¥Îµ{¦¡¤£¶·¦A°µ¤°»òÃB¥~ªº¨Æ¡A´N¯à¨ã¦³µøı·®æ¡C
main ¥Dµ{¦¡°õ¦æ§¹«á¡A¨t²Î·|§â WM_INITDIALOG °T®§¶Çµ¹¹ï¸Ü²°¨ç¦¡¡C¦b³B²z WM_INITDIALOG °T®§¤¤¡A¨ú±o¥|Ó³æ¿ï«ö¶sªº¥N½X¨Ã¦s©ó hBtn °}¦C¤¤¡C¨ú±o³æ¿ï«ö¶s¥N½X±o©I¥s GetDlgItem¡A¦Ó¥Bn°õ¦æ¥|¦¸¡A³o¬O¦]¬°¦³¥|Ó³æ¿ï«ö¶s¡C¤p¤ì°¸¥Î n ¨Ópºâ¦¸¼Æ¡An ±q 0 ¶}©l¨ì 3¡An °£¤F·í°µ¦¸¼Æ¤§¥~¡A¤]¬O²Ä´XÓ¤¸¯À¡C°Ñ¦Ò¥k¹Ï¡A°²¦p hBtn °}¦C¦b°O¾ÐÅé¦ì§} 0FD5020H ³B¡A³o¤]¬O²Ä¹sÓ¤¸¯À©Ò¦b¤§³B¡A¼g¦¨ hBtn[0]¡Aª`·N¡IhBtn °£¤F¬O°}¦CÅܼƦWºÙ¥~¡A¤]¥Nªí°O¾ÐÅé¦ì§} 0FD5020H¡F²Ä¤@Ó¤¸¯À´N¦b 0FD5028H¡A¼g¦¨ hBtn[8]¡A¨ä¾lÃþ±À¡C§â¥|Ó«ö¶s¥N½X¦s¤J hBtn °}¦C¡A¼g¦¨µ{¦¡½X´N¬O²Ä 123¡ã124 ¦æ¡A¦p¤U¡G
movzx r10,n mova hBtn[r10*8],rax
²Ä 123 ¦æ¨Ï¥Î MOVZX ¬O¦]¬° n ªºªø«×¬O¦r²Õ¡A³o¬O¬°¤F°t¦X²Ä 120¡ã122 ¦æ©I¥s GetDlgItem ®É¡A©Ò»Ýªº³æ¿ï«ö¶sÃѧO½X¡AÃѧO½Xªø«×¬O¦r²Õ¡C¦ý¬O R10 ¼È¦s¾¹ªø¤KӦ줸²Õ¡A¬°¤FÀ±¸É¨âÓ¹Bºâ¤¸¤£¦Pªø«×¡A©Ò¥H¥Î MOVZX ±N R10 ªº²Ä 16¡ã63 ¦ì¤¸³]¬° 0¡C³o¸Ì¤£¯à¥Î MOV «ü¥O¡A¦]¬° MOV «ü¥Oªº¨âÓ¹Bºâ¤¸¥²¶·¤@¼Ëªø«×¡C
²Ä 124 ¦æ¨Ï¥Î mova¡A³o¬O¤p¤ì°¸¦Û¦æ¼¶¼gªº¥¨¶°¡Amova ¥¨¶°¦ì©ó MYFIX.INC ¥]§tÀɤ¤¡A©Ò¥H¦b²Ä 25 ¦æ±N MYFIXI.INC §t¬A¶i¨Ó¡C³o¬O¦]¬° UASM64.EXE µLªk²ÕĶ¹³³oºØ±a¦³¼È¦s¾¹¼¥H¿²vªº MOV «ü¥O¡A©Ò¥H¤p¤ì°¸¼¶¼g¤F mova ¥¨¶°¨Ó׸ɳoÓ¿ù»~¡C¸Ô±¡¨£ªþ¿ý¤G¡C
¦b³B²z WM_COMMAND °T®§®É¡A³Ì«nªº¬O³B²z¨Ï¥ÎªÌÂI«ö¡uÂà´«¡v¤UÀ£¦¡«ö¶s«áªº BN_CLICKED ³qª¾½X¡ARADIXC »Ý±N¨Ï¥ÎªÌ¿é¤Jªº¼Æȶi¦æÂà´«¬°¤G¶i¦ì¡B¤K¶i¦ì¡B¤Q¶i¦ì¥H¤Î¤Q¤»¶i¦ì¼ÆÈ¡C¦Ó¦b¦¹¤§«en¥ý½T©w¨Ï¥ÎªÌ¿é¤Jªº¼ÆȬOþ¤@ºØ¶i¦ì¨î¡A³o¨ú¨M©ó¨Ï¥ÎªÌ¨ì©³¬O¿ï©w¤Fþ¤@Ó³æ¿ï«ö¶s¡A¬O¤G¶i¦ì¡B¤K¶i¦ì¡B¤Q¶i¦ìÁÙ¬O¤Q¤»¶i¦ì«ö¶s¡C¨M©w¨Ï¥ÎªÌ¿ï©w¤FþÓ³æ¿ï«ö¶s¡A¨ä¹ê¦³¨âºØ¤è¦¡¡C
²Ä¤@ºØ¤èªk¬O¥Î¤@ÓÅܼƬö¿ý¨Ï¥ÎªÌÂI¿ïþÓ³æ¿ï«ö¶s¡A¨C¦¸¨Ï¥ÎªÌÂI¿ï³æ¿ï«ö¶s®É¡A³£·|µo¥X BN_CLICKED ³qª¾½X¡A¦Ó¦¹¨èªº wParam ³Ì§C¦r²Õ¥Nªí¤F¨Ï¥ÎªÌ©ÒÂI¿ïªº³æ¿ï«ö¶s¤§ÃѧO½X¡A¥i¥H§Q¥Î³oÓÃѧO½X°O¿ý¦b¸ÓÅܼƸ̡A·í¨Ï¥ÎªÌ«ö¤FÂà´««ö¶s®É¡AŪ¨ú¦¹ÅܼƧY¥i±oª¾þÓ³æ¿ï«ö¶s³Q¿ï©w¡C²Ä¤GºØ¤èªk¬O¦b¨Ï¥ÎªÌ«ö¤FÂà´««ö¶s¤§«á¡A¨Ì¦¸Àˬd¥|Ó³æ¿ï«ö¶sªºª¬ºA¡AþÓ³æ¿ï«ö¶sª¬ºA¬O BST_CHECKED¡A´N¬O¨Ï¥ÎªÌ¿ï©wªº¡CRADIXC ±Ä¥Î²Ä¤GºØ¤èªk¡A²Ä 142¡ã151 ¦æ©Ò°õ¦æªº´N¬O¦¹¨Æ¡C
²Ä 144¡ã146 ¦æ¨ú±o hBtn °}¦C¤¤ªº«ö¶s¥N½X¡AµM«á¦A¥H³o¥N½X¤Î BM_GETSTATE ¬°°Ñ¼Æ©I¥s SendMessage¡A¥H¨ú±o«ö¶sª¬ºA¡C¦P¼Ëªº¡A³o¹Lµ{¥²¶·°õ¦æ¥|¦¸©ÎªÌ§ä¨ì¤FþÓ«ö¶sªºª¬ºA¬O BM_GETSTATE ¤~°±¤î¡C³o¥|¦¸¤¤¡A¨C¦¸³£n±q hBtn °}¦C¨ú¥X«ö¶s¥N½X¡A¤]·|¥Î¨ì mova ¥¨¶°¡C
«ö¶sª¬ºA¦³«Ü¦hºØ¡A¹³¬O§_³Q¿ï©w¡B¬O§_³B©ó«öÀ£¡K¡Kµ¥¡A¨CºØª¬ºA³£¥H¤@Ӧ줸ªí¥Ü¡A¦p¥k¹Ï¡C¨Ò¦p³æ¿ï«ö¶s©Î½Æ¿ï®Ø³Q¿ï©w®É¡A¨äª¬ºA¬° BST_CHECKED¡A¨ä¹ê¬O²Ä¹s¦ì¤¸¬°¤@¡F¦pªG«ö¶s³B©óÀ£¤Uª¬ºA¡Aª¬ºA¬° BST_PUSHED¡A¨ä¹ê´N¬O²Ä¤G¦ì¤¸¬°¤@¡F¨ä¾l¨Ì¦¹Ãþ±À¡C¦bÀˬd³æ¿ï«ö¶s¬O§_³Q¿ï©w®É¡A³Ì¦n¤£n¥Î¤U±ªºµ{¦¡¡G
cmp rax,BST_CHECKED je found
¥Î TEST «ü¥O¤ñ¸û¦n¡A¦]¬°¡uTEST rax,BST_CHECKED¡v¥uÀË´ú²Ä¹s¦ì¤¸¬O§_¬°¤@¡C³o¬O¬°¤F¨¾¤î¥i¯àÁÙ¦³¥t¤@ºØª¬ºA¡AÅý¨ä¥L¦ì¤¸¬°¤@¡A³o¼Ëªº¸Ü¥Î CMP «ü¥O¬OÀË´ú¤£¨ì¡C
²{¦b¨Ï¥ÎªÌ¤w«ö¤U¡uÂà´«¡v«ö¶s¡A¦Ó RADIXC ¤wÀË´ú§¹þÓ³æ¿ï«ö¶s¬O³Q¿ï©wªºª¬ºA¡C°²¦pÀË´ú¨ì¨Ï¥ÎªÌ¿ï©w¤G¶i¦ì¡A¨º»ò n µ¥©ó 0¡F¨Ï¥ÎªÌ¿ï©w¤K¶i¦ì¡An µ¥©ó 1¡F¨Ï¥ÎªÌ¿ï©w¤Q¶i¦ì¡An µ¥©ó 2¡K¡K¡C±µ¤U¨Ó¬O²Ä 154 ¦æ©I¥s radix_convert °Æµ{¦¡¡A§â n ¥H¤Î¹ï¸Ü²°¥N½X¶Ç¤J radix_convert °Æµ{¦¡¡Cradix_convert °Æµ{¦¡¦b²Ä 51¡ã110 ¦æ¡C
radix_convert °Æµ{¦¡t³d§â¨Ï¥ÎªÌ¦b½s¿è®Ø¤º¿é¤Jªº¦r¦ê¡AÂà´«¦¨¼ÆÈ¡AµM«á¦A§â¸Ó¼ÆÈÂà´«¦¨¨ä¥L¶i¦ì¨îÅã¥Ü©ó¥|ÓÀRºA±±¨î¶µ¤W¡Cn¨ú±o¨Ï¥ÎªÌ¿é¤Jªº¦r¦ê¤£Ãø¡A¦b²Ä 57 ¦æ¥Î½s¿è®Ø¥N½X¬°°Ñ¼Æ¡A©I¥s GetWindowText ´N¯à±o¨ì½s¿è®Ø¤ºªº¦r¦ê¡C¦pªG¨Ï¥ÎªÌ¤w¿é¤J¦r¦ê¡A¦^¶ÇÈ´N¬O½s¿è®Ø¤º¦r¦êªø«×¡A¤£§tµ²§Àªº¹s¡F¦ý¤]¦³¥i¯à¨Ï¥ÎªÌ¥¼¿é¤J¦r¦ê¡A´N«ö¤U¡uÂà´«¡v«ö¶s¡A¦pªG¬O³o¼Ëªº¸Ü¦^¶ÇȬ°¹s¡CRADIXC ¥²¶·Àˬd GetWindowText ªº¦^¶ÇȬO§_¬°¹s¡A¨£²Ä 58¡ã59 ¦æ¡CWin64 API ªº¦^¶Çȳ£ÂÇ¥Ñ RAX ¶Çµ¹¤÷µ{¦¡¡A¦ý¬O©¹«á RAX ·|¥Î©ó¼ªkpºâ¡A©Ò¥H§â¦r¦êªø«×¦s©ó RCX¡CÀˬd RCX ¬O§_¬°¹s¡A¥Î©³¤Uªº x86 «ü¥O³Ì¬°¤è«K¡C
JRCXZ¡BJECXZ¡BJCXZ ¬O¤TÓ¤£¦Pªº«ü¥O¡A»yªk¦p¤U¡G
JCXZ ¼Ð°O JECXZ ¼Ð°O JRCXZ ¼Ð°O
JCXZ¡BJECXZ¡BJRXZ ·|Àˬd CX¡BECX¡BRCX ¼È¦s¾¹¬O§_¬°¹s¡AY¬°¹s´N·|¸õÅD¦Ü¼Ð°O³B¡AY¤£¬°¹s´N°õ¦æ¤U¤@¦æ«ü¥O¡C¨Ò¦p©³¤Uªº¨Ò¤l¡A°õ¦æ§¹«á EAX ¬° 7¡G
mov ecx,0 mov eax,2 jecxz ok mov eax,4 ok: add eax,5
¤p¤ì°¸¤£ª¾¹D¦³¨S¦³ Win64 API ¥i¥H§â«ü©w¶i¦ì¨îªº¦r¦êÂàÅܦ¨¼ÆÈ¡A¦ý¦Û¤v¼g¤]¤£¬OÃø¨Æ¡C¥ý¨Ó¬Ý¬Ý§Ú̼ô±xªº¤Q¶i¦ì¼Æ¡A¨ä¥L¶i¦ì¤]¬O¤@¼Ëªºì²z¡C¦b»¡©ú³oì²z¤§«e¡A§ÚÌ¥ýn§ËÀ´´X¥ó¨Æ¡C²Ä¤@¥ó¡A¤@¼ÆÈ¥i¥H¥Î¤G¶i¦ì¡B¤K¶i¦ì¡B¤Q¶i¦ì¡B¤Q¤»¶i¦ìªí¥Ü¡AÁöµMªí²{¥X¨Óªº¼gªk¤£¦P¦ý¼Æ¶q¬O¤@¼Ëªº¡A¨Ò¦p¤Qªº¤G¶i¦ì¡B¤K¶i¦ì¡B¤Q¶i¦ì¡B¤Q¤»¶i¦ìªí¥Ü¤èªk¨Ì§Ç¬O 1010¡B12¡B10¡BA¡F¦ý¨ä¼Æ¶q¬O¤@¼Ëªº¡A´N¬O¤QÓ¡C
¥H¤Q¶i¦ìªº 2934 ¬°¨Ò¡A¦¹³Bªº 2 ¨ä¹ê¤j©ó 9¡A¦]¬°¥¦Ìªº¦ì¼Æ¤£¦P¡A2 ¨ä¹ê¬O 2000¡A9 ¨ä¹ê¬O 900¡C¦]¦¹¦bpºâ¼Æ¶q®É¡A2 n¼¥H 1000¡A9 n¼¥H 100¡A2934 ¥i¥H¼g¦¨¡G
2934¡×2¡Ñ103¡Ï9¡Ñ102¡Ï3¡Ñ101¡Ï4¡Ñ100
¦P®Éª`·N¨ì¡A¦bpºâ¤Q¶i¦ì¼Æ¶q®É¡A³£¬O¼¥H 10 ªº¾¦¸¤è¡A10 ºÙ¬°©³¼Æ¡]base¡^©Î°ò¼Æ¡]radix¡^¡C¦Ó¥B¤Q¶i¦ìªº¨C¦ì¼Æ¤£·|¶W¹L 10¡A¥²©w¦b 0¡ã9 ¤§¶¡¡C¹ï©ó¨ä¥L¶i¦ì¨î¤]¬O¦p¦¹¡A¨Ò¦p¤K¶i¦ìªº¨CÓ¦ì¼Æ¥Ñ¥k¦Ó¥ª¡A¨Ì§Ç¼¥H 80¡B81¡B82¡K¡K¦A¥[°_¨Ó´N¬O¹ê»Ú¼Æ¶q¡A¦Ó¥B¨C¦ì¼Æ³£¤£¯à¶W¹L 8¡A¥²©w¦b 0¡ã7 ¤§¶¡¡C
¦A»¡¦^¨D¥X 2934 ¤§È®É¬Opºâ 2¡Ñ103¡Ï9¡Ñ102¡Ï3¡Ñ101¡Ï4¡Ñ100¡A2 n¼¥H 103¡A9 n¼¥H 102¡K¡Kµ¥¡F¨C¤@¦ì¼Æ³£n¼¥H©³¼Æªº¤£¦P¾¦¸¤è¡A²Õ¦X»y¨¥¤¤¨S¦³pºâ¾¦¸¤èªº«ü¥O¡A¦ý¥i¥H§Q¥Î°j°é¨Ï³oÓ°ÝÃD«Kªï¤b¦Ó¸Ñ¡CÁÙ¬O¥H 2934 ¬°¨Ò¡A°²¦pnÅý³Ì«áµ²ªG¦s¦b RAX ùØ¡A¨º»ò¥ý§â RAX ³]¬° 0¡A¦A¥Ñ³Ì°ª¦ì¼Æ¶}©lpºâ¡C
²Ä¤@¦¸¥Ñ 6FF1F0 ¦ì§}¨ú¥X 2¡A¦s©ó RAX ¤º¡C
²Ä¤G¦¸¥Ñ 6FF1F1 ¦ì§}¨ú¥X 9¡A¥ý§â RAX ¼¥H 10 ÅÜ 20¡A¦A¨Ï RAX ¥[¤Wè¨ú¥Xªº 9¡A´NÅܦ¨ 29¡C
²Ä¤T¦¸¥Ñ 6FF1F2 ¦ì§}¨ú¥X 3¡A¥ý§â RAX ¼¥H 10 ÅÜ 290¡F³o®É 2 ¤w¸g¼¥H 102¡A9 ¤w¸g¼¥H 101¡F¦A¥[¤Wè¨ú¥Xªº 3 ÅÜ 293¡C
²Ä¥|¦¸¥Ñ 6FF1F3 ¦ì§}¨ú¥X 4¡A¥ý§â RAX ¼¥H 10 ÅÜ 2930¡F³o®É 2 ¤w¸g¼¥H 103¡A9 ¤w¸g¼¥H 102¡A3 ¤w¸g¼¥H 101¡F¦A¥[¤Wè¨ú¥Xªº 4¡A´N¤j¥\§i¦¨¡C¦p¤Uªí¡G
¦¸¼Æ | Ū¨úªº¼Æ | ¥»¦¸¶}©l®É RAX ¤§È | ²Ö¿n«áªº RAX ¤§È |
1 | 2 | 0 | 2 |
2 | 9 | 2 | 2¡Ñ101+9 |
3 | 3 | 2¡Ñ101+9 | 2¡Ñ102+9¡Ñ101+3 |
4 | 4 | 2¡Ñ102+9¡Ñ101+3 | 2¡Ñ103+9¡Ñ102+3¡Ñ101+4 |
µ²½×¬O¦b°j°é¤º¡A¨C¦¸¶È±q¨Ï¥ÎªÌ¿é¤Jªº¼ÆÈŪ¨ú¤@¦ì¼Æ¡A§â«e¦¸²Ö¿nªº¼Æ¼¥H©³¼Æ¡A¦A¥[¤WèŪ¨ú¨ìªº¤@¦ì¼ÆÈ¡A¦p¦¹´`Àôª½¨ì©Ò¦³¦ì¼Æ³£³B²z§¹¡C³o¼Ë¥i¥HÁקK¨Ï¥Î¨ìpºâ©³¼Æªº¾¦¸¤èªº«ü¥O¡A¨Æ¹ê¤W¡Ax86 ²Õ¦X»y¨¥¤]¨S¦³³oºØ½ÆÂøªº«ü¥O¡C
²Ä¤G¥ó¨Æ¬O¦b Windows ªº½s¿è®Ø¡BÀRºA±±¨î¶µ¡K¡Kµ¥±±¨î¶µÅã¥Üªº¼ÆÈ¡A¨Ã«D§A·Q¹³ªº¼ÆÈ¡C³oºØ»¡ªk«Ü©_©Ç¡AÁ|Ó¨Ò¤l»¡©ú¦n¤F¡C°²¦p¨Ï¥ÎªÌ¦b½s¿è®Ø¤º¿é¤J¡u2934¡v¡A¨º»ò©I¥s GetWindowText ¨ú±o½s¿è®Ø¤º®e¡A°²³]¸Ó¤º®e¦ì©ó¦ì§} 6FF1F0h ³B¡A¨º»ò±o¨ìªºµ²ªG¬O¥k¹Ï¤¤ªº¥Ò¡A¨Ã«D¤A¡A¤]¤£¬O¤þ¡]¤A¹Ï¤¤ªº 0B76h ¬O¤Q¶i¦ìªº 2934d¡^¡C
¥Ñ½s¿è®Ø¡BÀRºA±±¨î¶µ¡K¡Kµ¥±±¨î¶µ¨ú±oªº¤º®e¡A¬O³sÄòªº¦r¤¸©Ò§Î¦¨ªº¦r¦ê¡F§ÚÌ¥i¥H§â¦r¤¸·Q¦¨´N¬O¤å¦r¡A¦r¦ê·Q¦¨¥y¤l¡C¨ä¤¤ªº¨CÓ¦r¤¸³£¬O¥H¼ÆÈ¥Nªí¡A¨Ò¦p¥H 32h ªí¥Ü¦r¤¸ "2"¡B39h ªí¥Ü¦r¤¸ "9"¡K¡K¡C·íµM¨C¤@¥x¹q¸£³£±o¨Ï¥Î¦P¤@®M¼ÆȪí¥Ü¦r¤¸¡A©Ò¥H¨î©w¤F¼Ð·Çªº½s½X¤è¦¡¡AºÙ¬° ASCII¡A¨£²Ä¤@³¹¡C¦b ASCII ½s½X¤¤¡Aªü©Ô§B¼Æ¦r¬O¦b 30h¡ã39h ¤§¶¡¡A¤ñ¼ÆÈ 0¡ã9 «ê¦n¦h 30h¡A«Ü¦n°O¡Cµ²½×´N¬O¡A¥Ñ½s¿è®Ø¨ú±oªº¦r¦ê¡A¨ä¤º¨CÓ¦r¤¸³£¥H ASCII ½X½s¦¨¡C
²Ä¤T¥ó¨Æ¬O¥H x86 ¬° CPU ªº¹q¸£¤¤¡A¼ÆȬO¥H¤pºÝ§Çªº¤è¦¡Àx¦s¦b°O¾ÐÅé¡C¤]´N¬O°ª¦ìªº¼ÆȦs©ó§C¦ì§}¡A§C¦ìªº¼ÆȦs©ó°ª¦ì§}¡C¨Ò¦p¤W±¥Ò¹Ï¤¤ªº 2934¡A¥Nªí "2" ªº 32h ¦s©ó§C¦ì§}¡A¥Nªí "4" ªº 34h ¦s©ó°ª¦ì§}¡CÁA¸Ñ¤F³o¤T¥ó¨Æ¤§«á¡A¨Ó¬Ý¬Ý radix_convert °Æµ{¦¡¦p¦ó§â¨Ï¥ÎªÌ¿é¤Jªº ASCII ¦r¦êÂà´«¦¨¼ÆÈ¡C
²Ä 60¡ã69 ¦æ¡A¥Î .IF/.ELSEIF/.ENDIF ¨Ì¾Ú¤£¦Pªº¶i¦ì¨î³]©w©³¼Æ¡A¦s©ó R11 ¼È¦s¾¹¤¤¡C¨Ò¦p¨Ï¥ÎªÌ¿ï©w¤Q¶i¦ì¡A¨ä©³¼Æ¬° 10¡AR11 ¬° 10¡F¦pªG¬O¤K¶i¦ì©³¼Æ¬O 8¡AR11 ¬° 8¡CR11 ¤§È´N¬O«Ý·|¨à¥Î©ó°j°é¤¤¼¥H RAX ªº©³¼Æ¡F¥¦¤]¥i¥H¥Î©óÀˬd¨Ï¥ÎªÌ¿é¤Jªº¼ÆȬO§_¦Xªk¡A¨C¤@¦ì¼Æ¥u¯à¤p©ó©³¼Æ R11¡C
²Ä 70¡ã91 ¦æ¡A§â¨Ï¥ÎªÌ¿é¤Jªº¦r¦êÂà´«¦¨¼ÆÈ¡A³Ì«á±N¼ÆȦs©ó number¡Cµ{¦¡½X¦p¤U¡Aº¥ý¨Ï R8 ¼È¦s¾¹«ü¦V¥Ñ½s¿è®Ø¨ú±oªº¦r¦ê¦ì§}¡A¨£²Ä 70 ¦æ¡C²Ä 71¡B72 Åý RAX¡BRDX Âk¹s¡A«Ý·|³o¨âӼȦs¾¹nÀx¦s²Ö¿nªº¼Æ¶q¡C
69 70 71 72 73 74
75 76 77 78 79 80
81 82 83 84 85 86
87 88 89 90 91 92 |
 ⁝
lea r8,buffer
xor rax,rax
xor rdx,rdx
next0: movzx r10,BYTE PTR [r8]
cmp r10b,"9" ;Y¤j©ó"9"¡Aªí¥Ü¨Ï¥ÎªÌ¿é¤Jªº¼ÆÈÀ³¬O¤Q¤»¶i¦ì
jbe chk
cmp r11,16 ;YR11¤£¬°16¡Aªí¥Ü¿ù»~
jne error
and r10b,0dfh ;§â¤p¼gªº"a"¡ã"f"Åܬ°"A"¡ã"F"
sub r10b,37h ;§â¦r¤¸"A"¡ã"F"Åܬ°0AH¡ã0FH¼ÆÈ
cmp r10b,r11b
jb ok0
error: xor rax,rax
jmp exit
chk: sub r10b,"0" ;§â¦r¤¸"0"¡ã"9"Åܬ°0¡ã09¼ÆÈ
cmp r10b,r11b ;Y¼ÆȶW¹L©³¼Æ¡Aªí¥Ü¿ù»~
jae error
ok0: mul r11
add rax,r10 ;RAX¡×RAX*R11¡ÏR10¡AR11¬O©³¼Æ
inc r8
loop next0
mov number,eax
 ⁝ |
²Ä 73 ¦æ¨C¦¸¨ú¥X¤@Ó ASCII ¦r¤¸¦s©ó R10¡A¨Ï¥Î MOVZX «ü¥Oªºì¦]¬O¨CÓ ASCII ¦r¤¸ªø«×¬O¦ì¤¸²Õ¡AR10 ªø«×¬O¥|¦r²Õ¡A©Ò¥H¥Î MOVZX ±N²Ä 16¡ã63 ¦ì¤¸²M°£¨Ï¸Ó¼ÆÈÅÜ¥|¦r²Õ¡F¦Ó¥B«Ý·|³B²z¹L«á R10 ·|Åܦ¨¼ÆÈn¥[¤W RAX¡A°ò©ó³o¨âÓì¦]©Ò¥H¥Î MOVZX «ü¥O¡C
±µ¤U¨ÓnÀˬd¨ú¥Xªº¦r¤¸¬O§_¬O¦Xªkªº¡A°²¦p¨Ï¥ÎªÌ¿ï©w¤K¶i¦ì¡A¨º»ò¨ú±oªº¦r¤¸¥u¯à¦b "0"¡ã"7" ¤§¶¡¡A¦pªG¬O "8"¡A¨º´N¬O¤£¦Xªkªº¡C¦ý¨Ï¥ÎªÌ¦³¥i¯à¿ï¤Q¤»¶i¦ì¡A©Ò¥H¤]¦³¥i¯à¬O^¤å¦r¥À¡CRADIXC Àˬd¤èªk¬O§âÀˬdªü©Ô§B¼Æ¦r©M^¤å¦r¥À¤À¶}¡A¦pªG¶W¹L "9"¡A°²¦p¶W¹Lªí¥Ü¸Ó¦r¤¸¥i¯à¬O^¤å¦r¥À¡A³oÀ³¸Ó¬O¨Ï¥ÎªÌ¿ï©w¤Q¤»¶i¦ì¡A©Ò¥H R11 ¤@©wnµ¥©ó 16¡A¦pªG¤£µ¥©ó´Nªí¥Üµo¥Í¿ù»~¡C¨£²Ä 74¡ã77 ¦æ¡C
¦pªG²Å¦X¡A¨ºÁÙ±o¶i¤@¨BÀˬd¨ú¥Xªº¦r¤¸¬O§_¦b "A"¡ã"F" ©Î "a"¡ã"f" ¤§¶¡¡C¦b³o¤§«e¥ý§â¤p¼gªº^¤å¦r¥ÀÂà´«¦¨¤j¼g¡A¶È¤@Ó¨BÆJ´N¦æ¡A¥un§â¦r¤¸»P 0DFh ¶i¦æ¥B¹Bºâ§Y¥i¡A¨£²Ä 78 ¦æ¡C¦b ASCII ½s½X¤¤¡A"A"¡ã"F" ¦b 41h¡ã46h ¤§¶¡¡A"a"¡ã"f" ¦b 61h¡ã66h ¤§¶¡¡A¦pªG§â¥¦´«¦¨¤G¶i¦ì¡A´N¯àµo²{¤j¼gªº^¤å¦r¤¸²Ä¤¦ì¤¸¬O 0¡A¤p¼g«h¬O 1¡A©Ò¥H¥un§â¦r¤¸ªº²Ä¤¦ì¤¸Åܬ°¹s§Y¥i¡C¨£¥k¹Ï¡C
²Ä 79 ¦æ¡A¨Ï¦s©ó R10B ´î¥h 37h §â¦b R10B ¤ºªº¤j¼g^¤å¦r¥ÀÅܦ¨¼ÆÈ¡A¥Nªí¦r¤¸ "A" ªº¼ÆÈ 41h nÅܦ¨ 0Ah¡A¦r¤¸ "B" ªº¼ÆÈ 42h nÅܦ¨ 0Bh¡A©Ò¥H´î¥h 37h §Y¥i¡C¦pªG¨Ï¥ÎªÌ¿é¤J¶W¹L "F" ªº^¤å¦r¥Àpºâ«á·|¶W¹L 0Fh¡Aªí¥Ü³o¬O¤£¦Xªkªº¦r¤¸¡C«e±¤w´£¹L R11 ¤º¤w¸g¦s¦³©³¼Æ 10h¡A©Ò¥H§â R10B »P R11B ¤ñ¸û¡A¦pªG R10B ¤p©ó R11B¡Aªí¥Ü¿é¤Jªº¦r¤¸¦Xªk¡A¸õ¦Ü ok0: ¼Ð°O³B²z¡C¨£ 80¡ã81 ¦æ¡C
¦b«e¤T¬q´£¨ì¡A¦pªG¨ú±oªº¦r¤¸¶W¹L "9"¡A¨º»ò¨Ï¥ÎªÌ¿ï©w¤Q¤»¶i¦ì¡F¦pªG¨S¶W¹L "9"¡A¨º»ò¨Ï¥ÎªÌ¥i¯à¬O¿ï©w¤Q¶i¦ì¡B¤K¶i¦ì©Î¤G¶i¦ì¡A¬Æ¦Ü¤]¦³¥i¯à¬O¤Q¤»¶i¦ì¡C¤£½×¬Oþ¤@ºØ³£¬Oªü©Ô§B¼Æ¦r¡A´î¥h 30h ´N±o¨ì¼ÆÈ¡A©M¦s©ó R11B ªº©³¼Æ¤ñ¸û¡A¦pªG¤j©ó©Îµ¥©ó´N¥Nªí³o¬O¤£¦Xªkªº¡A¨£²Ä 84¡ã86 ¦æ¡F¦pªG¨S¶W¹L¡Aªí¥Ü¦Xªkªº¦r¤¸¡A±N²Ö¿nªº¼ÆÈ RAX ¼¥H©³¼Æ R11¡A¦A¥[¤W R10¡A¨£²Ä 87¡ã88 ¦æ¡C¨ì¦¹¡A³o¤@¦¸ªº°j°é´X¥G´Nºâ§¹¦¨¤F¡A±N R8 ¥[¤@«ü¦V¤U¤@Ó¦r¤¸ªº¦ì§}¡A¶i¦æ¤U¤@¦¸°j°é¡A¨£²Ä 89¡ã90 ¦æ¡C
²Ä 91 ¦æ§â³Ì«áµ²ªG¡A¦s©ó number °Ï°ìÅܼÆùØ¡C±µ¤U¨Óªºµ{¦¡¬O§â number ¤ºªº¼ÆÈ¥H¤K¶i¦ì¡B¤Q¶i¦ì¡B¤Q¤»¶i¦ìÅã¥Ü¦b¤TÓÀRºA±±¨î¶µ¤W¡A¥i¥H©I¥s sprintf ¨ç¦¡»P SetDlgItemText API §¹¦¨¡C²Ä¥|³¹´£¹Lªº wsprintf ¨Ã¨S¦³¤K¶i¦ìªº®æ¦¡¡A©Ò¥H³o¨à§ï¥Î sprintf¡Cn»¡©ú sprintf ±o¥ý»¡©ú°²«ü¥O PROTO¡C
°²¦pÀ³¥Îµ{¦¡»Ýn©I¥s¬YӨ禡©Î°Æµ{¦¡¡A¦Ó³oӨ禡©Î°Æµ{¦¡«o¥t¤@Óì©lµ{¦¡¤¤¤w¸g©w¸q¹L©Î¦b¶×¤Jµ{¦¡®w¤w¦³³sµ²¸ê®Æ¡A¨º»òÀ³¥Îµ{¦¡´N¤£»Ýn¦A±N¸Ó¨ç¦¡©Î°Æµ{¦¡ªºì©l½X«¼g¤@¹M¡A§Q¥Î PROTO «Å§i¨ç¦¡©Î°Æµ{¦¡»Ýn´XӰѼơA³o¨Ç°Ñ¼Æ¸Ó¦p¦ó¶Ç»¼µ¹¨ç¦¡©Î°Æµ{¦¡§Y¥i¡C©Ò¥H PROTO ¤]¥i¥H¬Ý¦¨¬O¥Î¨Ó«Å§i¨ç¦¡°Æµ{¦¡ªºì«¬¡C©³¤U¬O PROTO ªº»yªk¡G
function PROTO [distance][language-type][°Ñ¼Æ¦Cªí]
¨ä¤¤¡Afunction ¬O¨ç¦¡¦WºÙ¡Cdistance ¥i¥H¬O NEAR ©Î FAR¡A³o¦b DOS µ{¦¡¤¤¤~·|¥Î¨ì¡A¹ï©ó Win64 µ{¦¡¨S¦³¥Î¡AÀ³¸Ó¬Ù²¤¡Clanguage-type ¥i¥H¬O STDCALL¡BSYSCALL¡BC¡BBASIC¡BFORTRAN¡BPASCAL ©Î FASTCALL¡A«e¤»Ó¬O DOS µ{¦¡¤¤¤~·|¥Î¨ì¡F¹ï©ó Win32 µ{¦¡¥u¯à¨Ï¥Î STDCALL¡F¹ï©ó Win64 µ{¦¡¥u¯à¨Ï¥Î FASTCALL¡A¦pªG¦b²ÕĶ®É¤U¹F¡u-win64¡v¿ï¶µ¡A¨Ò¦p¡uuasm64 -win64 filename.asm¡v¡A´N·|¦Û°Ê¨Ï¥Î FASTCALL¡A©Ò¥H¼¶¼g Win64 µ{¦¡³q±`¤]¬Ù²¤ language-type¡A¦Ó¬O¦b²ÕĶ®É¤U¹F¡u-win64¡v¿ï¶µ¡C
°Ñ¼Æ¦Cªí¬O¥Ñ³\¦h²Õªº°Ñ¼Æ»P¸ê®ÆÃþ«¬²Õ¦¨¡A¨C¤@²Õ³£¬O¡u°Ñ¼Æ:¸ê®ÆÃþ«¬¡v¡A¦Ü©ón¦h¤Ö²Õ«hµø¨ç¦¡ªº»Ýn¨M©w¡A¦pªG¨ç¦¡¤£»Ýn°Ñ¼Æ¤]¥i¥H¤@²Õ³£¨S¦³¡C
©³¤UÁ|Ó¨Ò¤l»¡©ú¡A¨Ò¦p gcd ¨ç¦¡¥Î¨Ópºâ¨âÓ¾ã¼Æªº³Ì¤j¤½¦]¼Æ¡A©Ò¥H¦³¨âӰѼơApºâ¤§«áªº¦^¶ÇȬO EAX¡A¦Ó¥B¬YӶפJµ{¦¡®w MATH.LIB ¤w¥]§t gcd ªº³sµ²¸ê®Æ¡C¦pªG¦b¼¶¼gÀ³¥Îµ{¦¡®É¡A»Ýn©I¥s gcd¡A´N¥i¥H¥Î PROTO «Å§i¦p¤U¡G
INVLUDELIB MATH.LIB ⁝ gcd PROTO n1:DWORD,n2:DWORD
¨Æ¹ê¤W¡A°Ñ¼Æ¦WºÙ¨Ã¤£«n¡A¦]¬°¦b gcd ªºì©l½X¤¤·|¦b PROC ¤§«áÃB¥~©w¸q¡A©Ò¥H¤@¯ë°Ñ¼Æ¦WºÙ¥i¥H¬Ù²¤¡AÅܦ¨
INVLUDELIB MATH.LIB ⁝ gcd PROTO :DWORD,:DWORD
¦pªG¨ç¦¡©Î°Æµ{¦¡ªº°Ñ¼ÆӼƤ£©T©w¡A¤]´N¬O»¡¨Ì»Ý¨D¡A°Ñ¼Æ¥i¯à¬O¤@Ó¡B¤]¥i¯à¬O¨âÓ¡B©Î¤TÓ¡K¡K¡A³o®ÉÔ¥i¥H¥Î¡u:VARARG¡v¡Aªí¥Ü¥iÅܪº°Ñ¼ÆӼơC
sprintf ¬O C »y¨¥µ{¦¡®w¤ºªº¼Ð·Ç¨ç¦¡¡A¥¦»P wsprintf «Ü¬Û¦ü¡A³£¬O§â²Ä¤TӤΨä¥H«áªº°Ñ¼Æ¥H®æ¦¡±±¨î¦r¦ê«ü©wªº¤è¦¡¡A¼g¤J½w½Ä°Ï¤¤¡Csprintf ªº»yªk¬O¡G
invoke sprintf,\ lpOut,\ ; pointer to buffer for output lpFmt,\ ; pointer to format-control string ⁝ ; optional arguments
lpOut ¬O¿é¥X¦r¦êªº¦ì§}¡A¿é¥X¦r¦ê´N¬O«e±»¡ªº½w½Ä°Ï¡FlpFmt ¬O®æ¦¡±±¨î¦r¦êªº¦ì§}¡F¡u⁝¡v¬OÅܼƦCªí¡C¨Ò¦p©³¤Uªº¨Ò¤l¡G
sprintf PROTO :VARARG szOut DB 80 DUP (0) szFmt DB "Though %s is merely %d, her daughter is already %02d years old.",0 szName DB "Dora",0 ⁝ lea r8,szName invoke sprintf,OFFSET szOut,OFFSET szFmt,r8,20,4
°õ¦æ§¹ sprintf ¤§«á¡AszOut ¦r¦ê·|Åܦ¨¡u"Though Dora is merely 20, her daughter is already 04 years old.",0¡v¡C
¦b®æ¦¡±±¨î¦r¦ê¤¤¡A¨CÓÅܼƳ£¥H¡u%¡v°_ÀY¡A¦b®æ¦¡¤Æ¦r¦ê¤º¦³¦h¤ÖÓ¡u%¡v¡AÅܼÆӼƴN¦³¦h¤ÖÓ¡C®æ¦¡±±¨î¦r¦êªº¼gªk½Ð°Ñ¦Ò wsprintf ªº»¡©ú¡A³o¨à¥u¤¶²Ð sprintf ¦h¥Xªº¨âӮ榡¡G¤@¬O¡u%o¡v¡F¤G¬O¡u%m.nf¡v¡G
¦b©I¥s sprintf ®É¡AÁÙ¦³©³¤U´XÂI¶·ª`·N¡G①sprintf ªº³sµ²¸ê®Æ¦b MSVCRT.LIB ¤º¡A©Ò¥H¥²¶·¥Î INCLUDELIB §â MSVCRT.LIB ¥]§t¶i¨Ó¡B②¦bì©lµ{¦¡n¥Î PROTO «Å§i¦p¤U¡G
sprintf PROTO :VARARG
¨ä¤¤ªº¡u:VARARG¡v¥Nªí°Ñ¼ÆӼƤ£©T©w¡B③¦pªG°Ñ¼Æ¬O¼ÆÈÅܼơA¨ä¸ê®ÆÃþ«¬³£¬O QWORD¡A¤£½×¬O¯BÂI¼ÆÁÙ¬O¾ã¼Æ¡B④sprintf ªº¦^¶ÇȬO¼g¤J½w½Ä°Ïªº¦r¤¸Ó¼Æ¡C
¤£½×¬O wsprintf ©Î sprintf ³£¨S¦³´£¨Ñ§â¼ÆÈ¥H¤G¶i¦ì¨îªº¤è¦¡¼g¤J½w½Ä°Ïªº¥\¯à¡A©Ò¥H³o¬qµ{¦¡±o¦Û¦æ¼¶¼g¡C³o¬qµ{¦¡¦b²Ä 98¡ã107 ¦æ¡A¦p¤U¡G
97 98 99 100 101 102
103 104 105 106 107 108 |
 ⁝
mov rcx,32
lea rdx,buffer
next1: shl number,1
jc one
mov BYTE PTR [rdx],"0"
jmp short ok1
one: mov BYTE PTR [rdx],"1"
ok1: inc rdx
loop next1
mov WORD PTR [rdx],62h
 ⁝ |
¦]¬° RADIXC ³Ì¦h¥u³B²z 32 ¦ì¤¸ªº¼ÆÈ¡A©Ò¥HÅܦ¨¤G¶i¦ì«á³Ì¦h´N¬O 32 Ó¹s©Î¤@¡A¦]¦¹¦b²Ä 98 ¦æ³]©w RCX ¬° 32¡Aªí¥Ü¥u³B²z 32 ¦¸¡C²Ä 99 ¦æ§â RDX ³]¬° buffer ªº¦ì§}¡A³o 32 Ó¹s©Î¤@±N¦s¦b buffer ¦r¦êùØ¡C
RADIXC §Q¥Î LOOP °j°é¤Î SHL «ü¥O¡A±N¨Ï¥ÎªÌ¿é¤Jªº¼ÆÈ¡]²Ä 91 ¦æ®É¤w§â¦¹¼ÆȦs©ó number ùØ¡^¨C¦¸¦V¥ª²¾¤@Ӧ줸¡A¦pªG²¾¥Xªº¦ì¤¸¬O¤@¡ACPU ·|§â¶i¦ìºX¼Ð³]¬°¤@¡F¦pªG²¾¥Xªº¦ì¤¸¬O¹s¡ACPU ·|§â¶i¦ìºX¼Ð³]¬°¹s¡CRADIXC ¥unÀˬd¶i¦ìºX¼Ð¬O¹sÁÙ¬O¤@¡A´N¯à±o¨ì²¾¥Xªº¦ì¤¸¬O¦h¤Ö¡F§Q¥Î JC «ü¥O§Y¥iÀˬd¶i¦ìºX¼Ð¡A·í¶i¦ìºX¼Ð¬°¤@¡A°õ¦æ JC ®É·|µo¥Í¸õÅD¦Ü one: ¼Ð°O³B¡A¨£²Ä 101 ¦æ¡C
²Ä 102¡B104 ¦æ¡A¤À§O§â "0"¡B"1" ¦s¤J RDX ©Ò«üªº°O¾ÐÅé¦ì§}ùØ¡Cnª`·Nªº¬O¡A"0"¡B"1" ¦³¥Î¡u"¡v±N¥¦Ì¬A¦í¡Aªí¥Ü¥¦Ì¬O¤@Ó¦r¤¸ªº¦r¦ê¡A©Ò¥H "0"¡B"1" ¨ä¹ê¬O 30h¡B31h¡A¤£¬O 0¡B1¡CBYTE PTR ¥Nªí¥u§â¤@Ӧ줸²Õªº¦r¤¸¦s¤J RDX ©Ò«üªº¦ì§}¡C³o¼Ëªº¹Lµ{¤@ª½«½Æ¡Aª½¨ì 32 ¦¸°µ§¹¬°¤î¡C
²Ä 107 ¦æ§â 62h ¦s¤J RDX ©Ò«üªº¦ì§}ùØ¡A¥B¥H WORD ªø«×¦s¤J¡C62h ¨ä¹ê¬O¤p¼gªº^¤å¦r¥À¡ub¡v¡A¥Nªí¤G¶i¦ì¼Æ¡C¬°¦ón¥H¦r²Õªø«×¦s¤J©O¡H³o¬O¦]¬°n¨Ï buffer ¤ºªº¦r¦ê¥H¹s¬°µ²§À¡A³oùتº¹s¨ä¹ê´N¬O¦r²Õªº²Ä 16¡ã31 ¦ì¤¸¡C²Ä 108 ¦æ¡A©I¥s SetDlgItemText §â¦s©ó buffer ¤ºªº¦r¦êÅã¥Ü¦bÀRºA±±¨î¶µ¤W¡C
³o¤@³¹ªº¸Ñ»¡¨ì¦¹µ²§ô¡A¤@¬q®É¶¡¤§«á¡A·q½Ð¾\Ū¤U¤@³¹¡C
§Ú̪¾¹D¡AÀ³¥Îµ{¦¡¦b°õ¦æ®É³£·|©I¥s°ÊºA³sµ²µ{¦¡®w¡]Dynamic-Link Library¡A´N¬O DLL ÀÉ°Õ¡^¥H¬Ù«o³\¦h¤u§@¡A³o¨Ç°ÊºAµ{¦¡®wªº°ÆÀɦW³£¬O .dll¡A¹³ user32.dll¡Bkernel32.dll¡K¡Kµ¥¡A³o¨Ç°ÊºA³sµ²µ{¦¡®w³£¬O¦@¨Éªº¡C©Ò¿×¦@¨É¡A¬O«ü¦b Windows §@·~¨t²Î¤¤°õ¦æªºÀ³¥Îµ{¦¡³£¥i¥H©I¥s°ÊºA³sµ²µ{¦¡®w¡C¦b Windows XP ¤§«eªº Windows 95/98/98 SE/Me ®É¥N¡A¨t²Î¦¤w¤º«Ø³\¦h°ÊºA³sµ²µ{¦¡®w¡A§¡¦s©ñ©ó C:\WINDOWS\SYSTEM32 ¤l¥Ø¿ýùØ¡A¨ÑÀ³¥Îµ{¦¡©I¥s¡C
¦w¸Ë¬YÓÀ³¥Îµ{¦¡®É¡A¦pªGµo²{¸Óµ{¦¡©Ò»Ýªº DLL Àɤw¸g¦w¸Ë¦b¨t²Î¤W¤F¡A¸Óµ{¦¡´N¤£»Ý¦A¦w¸Ë³oÓ DLL ÀɤF¡C¦pªG¸ÓÀ³¥Îµ{¦¡©Ò»Ýnªº DLL »P¨t²Î¤W²{¦³ªº DLL ª©¥»¤£¦Pªº¸Ü¡A¸ÓÀ³¥Îµ{¦¡ªº¦w¸Ëµ{¦¡¥i¯à·|¥H¦Û¨Äâ±aªº DLL Àɨú¥N¨t²Î¤ºªº DLL¡F¨Ò¦p·L³n¦b¤@¨Ç Service Pack ¤]±`§ó´« DLL ÀÉ¡C¤]¥i¯àÀ³¥Îµ{¦¡·|´£¿ô¨Ï¥ÎªÌn¤£n¥HÀ³¥Îµ{¦¡¦Û¨Äâ±aªº DLL Àɨú¥N¨t²Î¤ºªº DLL¡F¨Ò¦p¦b Windows XP ¤W¦w¸Ë OllyDebug 1.10 ª©®É¡AOllyDebug ´N·|´£¿ô¡u¨t²Î¤Wªº PSAPI.DLL ¤ñ OllyDebug ¦Û¦æÄâ±aªºÁÙ·s¡v¡A¸ß°Ý±zn¨Ï¥Î¨t²Î¤WªºÁÙ¬O OllyDebug 1.10 ¦Û¦æÄâ±aªº¡H·íµM¤]¦³À³¥Îµ{¦¡®Ú¥»¤£¸ß°Ý´Nª½±µ§â¨t²Î¤ºªº DLL ´À´«±¼¤F¡C
©Ò¥H¡A¨t²Î¤¤ªº DLL ®É±`¦b¤£ª¾¤£Ä±¤¤´N³Q´À´«¡A°²¦p·sª©ªº DLL »Pª©¤£¬Û®e¡A¦Ó¥B¨t²Î¤¤¥u¯à¦³¤@Óª©¥»ªº¸Ü¡A¨º»ò´N¦³¥i¯à·|µo¥Í쥻°õ¦æ±o«Ü¦nªºµ{¦¡¡A¦b¦w¸Ë¬Y¨Ç³nÅé«áµLªk°õ¦æ©Î¬O·í±¼¡C³o´N¬O¦³¦Wªº DLL Hell¡C¨ì¤F Windows XP ¤Î¨ä¥H«áªº§@·~¨t²Î¡A·L³n¬°¤F¸Ñ¨M³oÓ°ÝÃD¡A´£¨Ñ¤F¨âºØ¤è®×¡Gisolated applications ©M side-by-side assembly sharing¡C
Isolated application ´N¬OÀ³¥Îµ{¦¡¦bµo¦æ®É¡A´N¤wÄâ±a¤F¸Óµ{¦¡©Ò¦³ DLL ªº¹jÂ÷ª©¥»¡]isolated version¡^¡A³o¼Ë´N¤£·|¨ü¨ä¥Lµ{¦¡¼vÅT¤F¡C³q±`³o¨Ç¹jÂ÷ª©¥»ªº DLL ·|¦s©ñ¦bÀ³¥Îµ{¦¡ªº¦w¸Ë¥Ø¿ý¤º¡A¥u¬°¸ÓÀ³¥Îµ{¦¡ªA°È¡C
Side-by-side assembly sharing ¥i¥HÅý¤£¦Pª©¥»ªº DLL ¦@¦s©ó¦P¤@¨t²Î¤¤¡A©Ò¥Îªº¤èªk¬OÅý³o¨Ç¤£¦Pª©¥»ªº DLL ¦s©ñ¦b¡uC:\WINDOWS\WinSxS\¡v¤l¥Ø¿ý¤º¡A¨Ã¥B¤£¦Pª©¥»ªº DLL ¦s©ñ©ó¨ä¤º¤¤¤£¦Pªº¤l¥Ø¿ý¤º¡Cµ{¦¡³]p®v¥i¥H³]pÀ³¥Îµ{¦¡®É¡A¼¶¼g¡uÀ³¥Îµ{¦¡¸ê°T²M³æ¡v¨Ó«ü©w¨Ï¥Î¯S©wªº DLL ª©¥»¡C
XML ¬O extensible markup language ªºÂ²ºÙ¡A¤¤¤å½Ķ¦¨¡u¥i©µ¦ù¼Ð°O¦¡»y¨¥¡v¡C©Ò¿×¼Ð°O»y¨¥¬O«ü¥Î¯S©wªº¼Ð°O¨Ó©w¸q¼ÐÅÒ¡]tags¡^ªºÄÝ©Ê¡B®æ¦¡¡B¼h¦¸µ²ºcµ¥¡C¹³ºô¶¨Ï¥Î HTML ´N¬O¼Ð°O»y¨¥¡A¥¦¥H¤@¹ï¡u<¡v¡B¡u>¡v§@¬°¼Ð°O¡A¨ä¤º¬O¯S©wªº¼ÐÅÒ¡]©ÎºÙ¤¸¯À¦WºÙ©Î¼Ð°O¦WºÙ¡^¡C
¨Ò¦p¤U±¬O HTML Àɮתº®æ¦¡¡A¡u<¡v¡B¡u>¡vºÙ¬°¼Ð°O¡Ahtml¡Bhead¡Bbody ºÙ¬°¤¸¯À¡A<head>¡B<body>µ¥ºÙ¬°¼ÐÅÒ¡G
<html> <head> ⁝ </head> <body> ⁝ </body> </html>
XML ¤]¬O¤@ºØ¼Ð°O»y¨¥¡A¦P¼Ë¤]¬O¥Î¤@¹ï¡u<¡v¡B¡u>¡v§@¬°¼Ð°O¡C·íµM¤]¦³¤£¬O¥Î¡u<¡v¡B¡u>¡v§@¬°¼Ð°Oªº¼Ð°O»y¨¥¡A¨Ò¦p¡@LaTeX¬O¥Î¡u\¡v§@¬°¼Ð°O¡A¥Î©ó¬ì¾Ç¤åÄm±Æª©ªº¼Ð°O»y¨¥¡C
XML ¥Dn¥Øªº¬O´yz¸ê®Æªºµ²ºc©M»y¸q¡A¦Ó¤£¬OÅã¥Ü¸ê®Æ¡CXML ¥i¥Î©ó¦hºØ¥Î³~¡A¥]¬A¸ê®Æ¥æ´«¡B°t¸m¤å¥ó©M¤åÀɮ榡¤Æ¡CXML ¬O¥iÂX¥Rªº¡A¶}µoªÌ¥i¥H®Ú¾Ú»Ýn©w¸q¦Ûqªº¼ÐÅÒ¡C
Á|Ó¨Ò¤l¨Ó»¡¡A¹³¤T¥Á¡B³Õ«È¨Ó³oÃþºô¸ô®Ñ©±¡A·|§Q¥Î HTML »y¨¥§âµe±ºÉ¥i¯à°µ±oº}«G¦n¬Ý¡A³o¤]¬O HTML ¾Õªøªº¨Æ¡C¦pªG¶È¬O¨Ñ¤HÌÂsÄý¡A·íµM¨S¦³°ÝÃD¡C°ÝÃD¬O¦pªG·Q¶R¬Y¤@¥»®Ñ¡A´N·|·Qn¤ñ¸û¦Uºô¸ô®Ñ©±¤W¡A¦P¤@¥»®Ñ¬O§_¦³§é¦©¡A³o´N³Â·Ð¤F¡C¶Ç²Îªº°µªk¬O³v¤@¶i¤J¦U®aºô¸ô®Ñ©±¡A·j´M¸Ó¥»®Ñªº»ù®æ¡A³o°Z¤£¬O«Ü³Â·Ð¡C¤×¨ä¬O·í¤µ³oÓ¸ê°TÃz¬µªº®É¥N¡An¥Ñ¤H¤@ÓÓ¥h·j´M¡A»Ýªá¶O¤j¶q®É¶¡¡AXML ´N¬O¸Ñ¨M³oÓ°ÝÃDªº¤è®×¡C
¨Ò¦p©³¤U XML ªº¨Ò¤l¡G
<?xml version="1.0" encoding="Big5" ?> <²Õ¦X»y¨¥±ÀÂË®ÑÄy> <®ÑÄy> <®Ñ¦W>IBM 80X86 ²Õ¦X»y¨¥¹ê°È</®Ñ¦W> <§@ªÌ>¬I«Â»Ê</§@ªÌ> <»ù®æ ³f¹ô="·s¥x¹ô">450</»ù®æ> </®ÑÄy> <®ÑÄy> <®Ñ¦W>WINDOWSÀô¹Ò¤U32¦ì¤¸²Õ¦X»y¨¥µ{¦¡³]p</®Ñ¦W> <§@ªÌ>ù¶³±l</§@ªÌ> <»ù®æ ³f¹ô="·s¥x¹ô">680</»ù®æ> </®ÑÄy> </²Õ¦X»y¨¥±ÀÂË®ÑÄy>
±q¤W±ªº¨Ò¤l¥i¥Hª¾¹D¡AXML ¤£¦ý¥i¥H¥Î¦Û¦æ©w¸qªº¼ÐÅÒ¨Ó´yz¸ê®Æªº»y¸q¡Aµ{¦¡³]p®v«Ü®e©ö´N¯à³]p¥X¡uª¦Âε{¦¡¡v¡A¦Û°Ê±qºô¸ô¤W·j´M¨ã¦³®ÑÄy¡B®Ñ¦W»P»ù®æªº¸ê®Æ¡A³o¼Ë´N¯à¸`¬Ù¤£¤Ö®É¶¡¡C
±µµÛ¡A¤¶²Ð XML ¤@¨Ç°ò¥»³W«h¡CXML ªº¼ÐÅÒªø±o¹³¥kÃ䪺¼Ë¤l¡C³Ì¤W±¤@¦æºÙ¬°¡u°_©l¼ÐÅÒ¡v¡A¥¦¬O¦b¤@¹ï¡u<¡v¡B¡u>¡v¤º¡A¥]§t¤F¤¸¯À¦W¡]elements¡^¤ÎÄݩʦW¡]attributes¡^¡A¥¦Ìªº¦WºÙ¦³°Ï¤À¤j¤p¼g¡C³q±`·|¥H¤¸¯À¦W¥Nªí³oÓ¼ÐÅÒ¡A¨Ò¦p¤W±ªº®Ñ¦W¼ÐÅÒ¡B§@ªÌ¼ÐÅÒµ¥¡CÄݩʦW¤§«á·|«ü©wÄÝ©ÊÈ¡A¥²¶·¥H¡u=¡v¤Î¤@¹ï¡u"¡vªí¥Ü¡AÄÝ©ÊȤ@©wn¦b³o¹ï¡u"¡v¤§¤º¡C³Ì«á¤@¦æºÙ¬°¡uµ²§À¼ÐÅÒ¡v¡Aµ²§À¼ÐÅÒªº¤¸¯À¦W¤§«e¥H¡u/¡vªí¥Ü¦¹¼ÐÅÒµ²§ô¡C³oùØÁÙn«ü¥X¤@ÂI¡AXML ¤¤ªº¤¸¯À¦W»PÄݩʦW¡A¤£¶È¯à¦Û¦æ©w¸q¡AÁÙ¯à¥Î¤¤¤å©R¦W¡C¨Ò¦p¤W±ªº¨Ò¤l¡G
<»ù®æ ³f¹ô="·s¥x¹ô">450</»ù®æ>
³f¹ô¬O»ù®æ¼ÐÅÒªº¤@ºØÄÝ©Ê¡A¥H·s¥x¹ôp»ù¡C
²Ä¤GÓ°ò¥»³W«h°£¤FªÅ¤¸¯À¡]empty element¡^¤§¥~¡A¡u°_©l¼ÐÅÒ¡v»P¡uµ²§À¼ÐÅÒ¡v¥²¦¨¹ï¦s¦b¡F¤]´N¬O»¡¡A¦³¤F <®ÑÄy>¡A¥²©w·|¦³ </®ÑÄy>¡A¤£¥iªêÀY³D§À¡C³o¤@ÂI¤£¹³ HTML¡A¥i¥H¬Ù²¤¬Y¨Ç¼ÐÅÒ¡A¹³ <p>¡B<td> ·|§â¤U¦¸¥X²{ªº <p>¡B<td> ·í°µ«e¦¸ªºµ²§À¤]¬O¤U¦¸ªº¶}©l¡C¤£¹L¦b XML »yªk¤¤¤]¦³Ãþ¦ü HTML ªº <img¡K¡K>¡A¤£¶·¡uµ²§À¼ÐÅÒ¡vªº¡A³oÃþ¤¸¯ÀºÙ¬°¡uªÅ¤¸¯À¡v¡A¥¦ªº¼gªk¥²¶·¬O¦b¡u>¡v¤§«e¥[¤W¡u/¡v¡A¨Ò¦p¡G
<ªÅ¤¸¯À¦W ÄݩʦW="ÄÝ©ÊÈ"/>
²Ä¤TÓ°ò¥»³W«h¬O XML ªº²Ä¤@¦æ¼Ë¤l¦p¤U¡A¤@¯ëºÙ¬°«e¨¥¡]prolog¡^¡A¥¦¨S¦³¡uµ²§À¼ÐÅÒ¡v¡G
<?xml version="1.0" encoding="Big5" ?>
?xml »¡©ú³o¬O XML »y¨¥¡A¨ä¤¤¤@©wn¦³ version ÄÝ©Ê¡A»¡©ú¨Ï¥Î²Ä´Xª©ªº XML »y¨¥¡A¤@¯ë±¡§Î¥Î 1.0 §Y¥i¡Cencoding ÄÝ©Ê«ü©w¤F³oÓ XML ¤å¥óªº½s½X¤è¦¡¡A¥¦¥i¦³¥iµL¡A¦pªG¨S¦³ encoding ÄÝ©Ê¡A¹w³]±oÄÝ©ÊȬO¡uUTF-8¡v©Î¡uUTF-16¡v¡]UTF-8¡BUTF-16 ¬O¸U°ê½X¡A^¤å¬O unicode¡Aªº¨âºØ½s½X¤è¦¡¡A½Ð¨£³oùØ¡^¡F¦b¥¿Å餤¤åùؤ]¥i¥H¥Î¡uBIG5¡v¡A¦pªG encoding ¤£¬O¡uUTF-8¡v©Î¡uUTF-16¡v¡A´N¤£¥i¬Ù²¤¡A§_«h¥²Åã¥Ü¥X¶Ã½X¨Ó¡C
²Ä¥|Ó°ò¥»³W«h¬O¼ÐÅÒ¤§¶¡¥u¯à¥]§t¥t¤@¼ÐÅÒ¡A¤£¥i¥æ¿ù¡A¨Ò¦p¤Uªí¥ªÃä¬O¿ù»~ªº¡A¥kÃä¤~¬O¥¿½Tªº¡A¦]¬°¥ªÃ䪺®Ñ¦W¼ÐÅÒ»P§@ªÌ¼ÐÅÒ¥æ¿ù¤F¡C
<®ÑÄy> <®Ñ¦W>IBM 80X86 ²Õ¦X»y¨¥¹ê°È <§@ªÌ>¬I«Â»Ê</®Ñ¦W></§@ªÌ> </®ÑÄy> |
<®ÑÄy> <®Ñ¦W>IBM 80X86 ²Õ¦X»y¨¥¹ê°È</®Ñ¦W> <§@ªÌ>¬I«Â»Ê</§@ªÌ> </®ÑÄy> |
²Ä¤Ó°ò¥»³W«h¬O¦b¼ÐÅÒ¤§¶¡ªº¤å¦r¡A¦p¦³ªÅ¥Õ¡B´«¦æ²Å¸¹¡B¸õ®æ¦r¤¸³£·|¦p¹ê«O¯d¤U¨Ó¡C¤]´N¬O»¡¡A¦pªG¦³¨âӪťաA´N·|¦b¿Ã¹õ¤WÅã¥Ü¨âӪťաA³oÂI»P HTML »yªk¤£¦P¡C¤£¹L¦b¼Ð°O¤§¶¡ªºªÅ¥Õ¡B´«¦æ²Å¸¹¡B¸õ®æ¦r¤¸³£¥uºâ¤@ӪťաC
À³¥Îµ{¦¡¸ê°T²M³æÀɮ׿í´` XML »yªk¡A¦ý¨ä¤¸¯À¦WºÙ«h¬O·L³n¦Û¦æ©w¸qªº¡A¦p <assembly>¡B<dependency>¡B<trustInfo>¡K¡Kµ¥¡C³o¨Ç¤¸¯À¬O±Mªù¥Î¨Ó´yz Windows À³¥Îµ{¦¡©M¥¦Ì©Ò»Ýªº°õ¦æÀô¹Ò¡B¨Ì¿àÃö«Yµ¥¡C