²Ä¤G¤Q¤T³¹¡@µøı­·®æ

¦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°µ´y­z¡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¥Ø¿ý¡A­t³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§@°Ï¬OC:\WINDOWS\system32\uxtheme.dll
¼Ð·Ç±±¨î¶µ¬OC:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_XXX\comctl32.dll
§_C:\WINDOWS\system32\user32.dll
³q¥Î±±¨î¶µ¬OC:\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


µ{¦¡¤¤¤Þ¤Jµøı­·®æ

¨º»ò¡A­n¦bµ{¦¡¤¤¤Þ¤Jµøı­·®æ¡A¸Ó«ç»ò°µ©O¡H¨ä¹ê¤£Ãø¡A¹F¦¨©³¤Uªº±ø¥ó§Y¥i¡G

  1. ¥²¶·¦³²Ä¤»ª©ªº COMCTL32.DLL¡C
  2. «ü©w¨t²Î©I¥s²Ä¤»ª©ªº COMCTL32.DLL¡C

²Ä¤»ª©ªº COMCTL32.DLL

¦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¬O­nª¾¹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
ª©¥»
WindowsNTInternet Explorer
3.51 Windows NT 3.51 
4.00Windows 95 3.00
4.70Windows 95 OSR2Windows NT 4.03.01, 3.02
4.71  4.0
4.72Windows 98Windows NT 4.0 service packs4.01
5.80Windows 98 SE 5.0
5.81Windows MeWindows 20005.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¹ï©ó«e­z²Ä①­Ó±ø¥ó¦Ó¨¥¡A²{¦bªº Windows §@·~¨t²Î³£¤wº¡¨¬¤F¡C¨º»òÃö©ó²Ä②­Ó±ø¥ó¸Ó¦p¦ó°µ¡A¤~¯à²Å¦X©O¡H

À³¥Îµ{¦¡¸ê°T²M³æ

µ{¦¡³]­p®v¥i¥H¼¶¼g¡uÀ³¥Îµ{¦¡¸ê°T²M³æ¡v¡]application manifests¡^¨Óº¡¨¬²Ä②­Ó±ø¥ó¡C¡uÀ³¥Îµ{¦¡¸ê°T²M³æ¡v¬O¤@ºØ°ÆÀɦW¬° .manifest ªºÀɮסA¨ä¤º®e¥]§t¤F´y­zÀ³¥Îµ{¦¡©Ò©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

«Ø¥ß¨ã¦³µøı­·®æªº¥i°õ¦æÀɨBÆJ

¤p¤ì°¸¥ý¸ÑÄÀ¦p¦ó»s§@¨ã¦³µøı­·®æªº¥i°õ¦æÀÉ¡AµM«á¦A»¡©úÀ³¥Îµ{¦¡¸ê°T²M³æ¤º¦U¦æ©Ò¥Nªíªº·N¸q¡C°²¦p­n¨Ï»s§@¦¨ªº¥i°õ¦æÀɨ㦳µøı­·®æ¡A¹ê½îªº¨BÆJ¦p¤U¡G

⒜¡B¼¶¼g²Õ¦X»y¨¥­ì©lµ{¦¡¡A°²³]ÀɦW¬° my_prog.asm¡A¨ä«á©Ò»s§@¦¨ªº¥i°õ¦æÀɬ° my_prog.exe¡C­nª`·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

¦Ó­nº¡¨¬²Ä②­Ó±ø¥óªºÀ³¥Îµ{¦¡²M³æÀɮתº®æ¦¡«Ü©T©w¡A¤º®e¦p¤U¡G
<?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>
¤W­±¥Õ¦âªº³¡¤À¬O°w¹ïÀ³¥Îµ{¦¡¡A¨Ï§@·~¨t²Î¯àÃѧO©MºÞ²z³o­ÓÀ³¥Îµ{¦¡¡F¶À¦â³¡¤À«h¬O¹ïÀ³¥Îµ{¦¡¨Ì¿àªº¥~³¡²Õ¥ó¡A¨Ò¦p°ÊºA³sµ²µ{¦¡®w¡A¨ÏÀ³¥Îµ{¦¡¦b©I¥s®É«ü©w¯S©wªºª©¥»¡A¥H«K¤ä«ùÀ³¥Îµ{¦¡¥¿±`°õ¦æ¡C¹ï©ó¥»³¹¦Ó¨¥¡A¥u»Ý­nµøı­·®æªºÀ³¥Îµ{¦¡¡A¥Õ¦âªº³¡¤À¥i¥H¬Ù²¤¡C
±N¤W­±ªº¤º®eÀx¦s¬°À³¥Îµ{¦¡¸ê°T²M³æ¡AÀ³¥Îµ{¦¡¸ê°T²M³æªº¥DÀɦW¬°¥i°õ¦æÀɪºÀɦW¡]¥]§t¥i°õ¦æÀɪº¥DÄÒ¦W»P°ÆÀɦW¡^¡AÀ³¥Îµ{¦¡¸ê°T²M³æªº°ÆÀɦW¬°¡u.manifest¡v¡C¦b³o­Ó¨Ò¤lùØ¡AÀ³¥Îµ{¦¡¸ê°T²M³æªºÀɦW¬O my_prog.exe.manifest¡A©Ò¥H§â¤W­±ªº¤º®e½Æ»s¨ì¹³¡u°O¨Æ¥»¡v©Î¡uUltraEdit 32¡vµ¥¤å®Ñ³B²z¾¹¡A¦s¦¨ my_prog.exe.manifest §Y¥i¡C

⒞¡B¼¶¼g¸ê·½´y­zÀÉ¡Amy_prog.rc¡A¦bùØ­±¼W¥[¨â¦æ¡G

#define RT_MANIFEST 24
1       RT_MANIFEST MOVEABLE PURE "my_prog.exe.manifest"
¦b Windows ¸ê·½ºÞ²z¤¤¡A¨CºØ¸ê·½³£¦³¤@­Ó°ß¤@ªºÃþ«¬­È¡C¨Ò¦p RT_ICON ¥Nªí¹Ï¥Ü¡A¨ä­È¬° 3¡FRT_DIALOG ¥Nªí¹ï¸Ü²°¡A¨ä­È¬° 5¡C¦ÓÀ³¥Îµ{¦¡¸ê°T²M³æ³q±`¥H RT_MANIFEST ªí¥Ü¡A¨ä­È¬° 24¡C

⒟¡B¨ä¾l¨BÆJ¸ò¥H«e¤@¼Ë¡A§â­ì©lµ{¦¡¡B¸ê·½´y­zÀÉ¡BÀ³¥Îµ{¦¡¸ê°T²M³æ³£©ñ¦b¦P¤@­Ó¥Ø¿ý¤º¡AµM«á½sĶ¸ê·½´y­zÀÉ¡B²ÕĶ­ì©lµ{¦¡¡B³sµ²¥ØªºÀɤθ귽ÀÉ¡C¦b½sĶ¸ê·½´y­zÀɮɡ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


¸ÑªRÀ³¥Îµ{¦¡¸ê°T²M³æ

©³¤U¤p¤ì°¸¥H«e­±´y­zªº 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ªºÀ³¥Îµ{¦¡´y­z³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¦Ó¨ä¤º³¡¤@©w­n¦³ <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¤¸¯À¤@©w­n¬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ªí¥Ü¥D­nª©¥»¡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

¥»³¹¨Ò¤l¡GRADIXC

»¡§¹¤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

­ì©lµ{¦¡

©³¤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

¸Ñ»¡ RADIXC.ASM

©³¤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 API

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¥u­n¨ã¦³µøı­·®æ¤´µM­n©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

¥]§t MYFIX.INC

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¦Ó¥B­n°õ¦æ¥|¦¸¡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¦¹¤§«e­n¥ý½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 °Æµ{¦¡

radix_convert °Æµ{¦¡­t³d§â¨Ï¥ÎªÌ¦b½s¿è®Ø¤º¿é¤Jªº¦r¦ê¡AÂà´«¦¨¼Æ­È¡AµM«á¦A§â¸Ó¼Æ­ÈÂà´«¦¨¨ä¥L¶i¦ì¨îÅã¥Ü©ó¥|­ÓÀRºA±±¨î¶µ¤W¡C­n¨ú±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 ·|¥Î©ó­¼ªk­pºâ¡A©Ò¥H§â¦r¦êªø«×¦s©ó RCX¡CÀˬd RCX ¬O§_¬°¹s¡A¥Î©³¤Uªº x86 «ü¥O³Ì¬°¤è«K¡C

x86 «ü¥O¡GJCXZ¡BJECXZ¡BJRCXZ

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¡A­Y¬°¹s´N·|¸õÅD¦Ü¼Ð°O³B¡A­Y¤£¬°¹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¦]¦¹¦b­pºâ¼Æ¶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¦b­pºâ¤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 ¤§­È®É¬O­pºâ 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°²¦p­nÅý³Ì«áµ²ªG¦s¦b RAX ùØ¡A¨º»ò¥ý§â RAX ³]¬° 0¡A¦A¥Ñ³Ì°ª¦ì¼Æ¶}©l­pºâ¡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 ¤§­È
1202
2922¡Ñ101+9
332¡Ñ101+92¡Ñ102+9¡Ñ101+3
442¡Ñ102+9¡Ñ101+32¡Ñ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 ¤@©w­nµ¥©ó 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¥u­n§â¦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¥u­n§â¦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¡C­n»¡©ú sprintf ±o¥ý»¡©ú°²«ü¥O PROTO¡C

PROTO °²«ü¥O

°²¦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¦³¨â­Ó°Ñ¼Æ¡A­pºâ¤§«áªº¦^¶Ç­È¬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 ¨ç¦¡

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%o¡Go ¥²¶·¤p¼g¡A¥Nªí¼Æ­È¥H¤K¶i¦ì¼g¤J½w½Ä°Ï¡C
②¡B%m.nf¡Gf ¥²¶·¤p¼g¡A¥Nªí¼Æ­È¥H¯BÂI¼Æªº¤è¦¡¼g¤J½w½Ä°Ï¡Cm ¥Nªí¾ã­Ó¯BÂI¼Æ¼g¤J½w½Ä°Ï®Éªº¦r¤¸Á`¼Æ¡An ¥Nªí¤p¼ÆÂI«á­±ªº¦r¤¸­Ó¼Æ¡Cm¡Bn ¥i¬Ù²¤¡A¦pªG¬Ù²¤®É¡A¥Ñ sprintf ¦Û¦æ¨M©w¡C¥Nªí¯BÂI¼ÆªºÅܼƪø«×¥²¶·¬O¥|¦r²Õ¡C

¦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

¥H¤G¶i¦ì¨îÅã¥Ü¼Æ­È

¤£½×¬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 ¥u­nÀˬ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¾ÐÅé¦ì§}ùØ¡C­nª`·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¸ß°Ý±z­n¨Ï¥Î¨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

µù¤G¡GXML

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 ¥D­n¥Øªº¬O´y­z¸ê®Æªºµ²º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·|·Q­n¤ñ¸û¦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¡A­n¥Ñ¤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ªº¼ÐÅÒ¨Ó´y­z¸ê®Æªº»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ÄݩʭȤ@©w­n¦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¨ä¤¤¤@©w­n¦³ 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ªù¥Î¨Ó´y­z Windows À³¥Îµ{¦¡©M¥¦­Ì©Ò»Ýªº°õ¦æÀô¹Ò¡B¨Ì¿àÃö«Yµ¥¡C