³o¤@³¹¨Ó¼¶¼g¤@ÓÀ³¥Îµ{¦¡¡AFIRST_WND1.ASM¡A°õ¦æ®É¦b¿Ã¹õ¤WÅã¥Ü¤@Óµøµ¡¡A¦p¥k¹Ï¡A¼ÐÃDÄæ¬O¡u²Ä¤@ÓWin64µ{¦¡¡v¡Aµøµ¡¤¤ÁÙ¦³¤@Ó¡u³o¬O¥Î²Õ¦X»y¨¥¼gªº64¦ì¤¸µ{¦¡¡C¡v¦r¦ê¤Î¡u½T©w¡v«ö¶s¡A¨Ï¥ÎªÌ¥i¥H«ö¡u½T©w¡v«ö¶sµ²§ôµ{¦¡¡C
FIRST_WND1.ASM ªº¤º®e¦p¤U¡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 |
OPTION CASEMAP:NONE
EXTRN MessageBoxA:PROC
EXTRN ExitProcess:PROC
INCLUDELIB \masm64\lib64\kernel32.lib
INCLUDELIB \masm64\lib64\user32.lib
MB_OK EQU 0
;*********************************************************************
.CONST
szCaption DB "²Ä¤@ÓWin64µ{¦¡",0
szText DB "³o¬O¥Î²Õ¦X»y¨¥¼gªº64¦ì¤¸µ{¦¡¡C",0
;*********************************************************************
.CODE
;---------------------------------------------------------------------
main PROC
sub rsp,28h
xor rcx,rcx
mov rdx,OFFSET szText
lea r8,szCaption
mov r9,MB_OK
call MessageBoxA
sub rcx,rcx
call ExitProcess
main ENDP
;*********************************************************************
END |
¶}±Ò¤å®Ñ³B²zµ{¦¡¡A§â¤W±¤º®e¿é¤J«á¡A¦s¦¨¡uE:\HomePage\SOURCE\Win64\FIRST_WND1.ASM¡v¡A¦A¨Ì©³¤U¨BÆJ²ÕĶ¡B³sµ²¡A³Ì«á°õ¦æ¥¦¡A´N¯à¨£¨ì¤W±ªºµøµ¡¡C
Microsoft Windows [ª©¥» 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\wanker>masm64 ¡÷°õ¦æ MASM64.BAT¡A¨£²Ä¤@³¹ C:\Users\wanker>path C:\Users\wanker\Documents\masm64\bin64;C:\Windows\system32; C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\; C:\Program Files (x86)\UltraEdit-32 C:\Users\wanker>set link=/subsystem:windows /entry:main C:\Users\wanker>cd E:\HomePage\SOURCE\Win64 C:\Users\wanker>E: E:\HomePage\SOURCE\Win64>cd FIRST E:\HomePage\SOURCE\Win64\FIRST>ml64 first_wnd1.asm Microsoft (R) Macro Assembler (x64) Version 14.25.28614.0 Copyright (C) Microsoft Corporation. All rights reserved. Assembling: first_wnd1.asm Microsoft (R) Incremental Linker Version 14.25.28614.0 Copyright (C) Microsoft Corporation. All rights reserved. /subsystem:windows /entry:main /OUT:first_wnd1.exe first_wnd1.obj E:\HomePage\SOURCE\Win64\FIRST>first_wnd1 ¡÷°õ¦æ FIRST_WND1.EXE ´N¯à¬Ý¨£µøµ¡¤F
³o¤@³¹°£¤F·|²o¯A¨ì²Õ¦X»y¨¥ªº°²«ü¥O»P x64 «ü¥O¤§¥~¡AÁÙ·|¯A¤Î Windows API ªº¹B§@¡A©Ò¥H½g´T¤£¤Ö¡C¦b¤¶²Ð Windows API ¤§«e¡A¥ý¨Ó¬Ý¬Ý¦p¦ó©I¥s°Æµ{¦¡¡C
CALL ¬O©I¥s°Æµ{¦¡ªº«ü¥O¡ARET ¬O¦Û°Æµ{¦¡ªð¦^¥Dµ{¦¡ªº«ü¥O¡A¨ä»yªk¤À§O¬O
CALL °Æµ{¦¡¦W
RET
·í CALL °õ¦æ®É¡ACPU ·|¥ýpºâ CALL ¤U¤@¦æ«ü¥Oªº¦ì§}¡A¦¹¦ì§}ºÙ¬°ªð¦^¦ì§}¡F¨ä¦¸¬O±N RSP ´î¤K¡A§âªð¦^¦ì§}¦s¤J RSP ©Ò«ü¦ì§}¡F³Ì«á§â±±¨îÅvÂಾ¨ì°Æµ{¦¡©Ò¦b¦ì§}¤W¡A°õ¦æ°Æµ{¦¡ªº«ü¥O¡CRET «ü¥O°µªº¨Æ«ê¦n»P CALL ¬Û¤Ï¡Cº¥ý¡ARET ·|§â RSP ©Ò«ü°ïÅ|³»ºÝªºªð¦^¦ì§}¨ú¦^¡A¨Ã¨Ï RSP ¥[¤W¤K¡AµM«á±N±±¨îÅvÂಾ¨ìèè¥Ñ°ïÅ|³»ºÝ¨ú¥Xªºªð¦^¦ì§}¤Wªº«ü¥O¡AÄ~Äò°õ¦æ¡C
¥k¹Ï¬O FIRST_WND1.EXE ²Ä 20 ¦æ¡A¡ucall MessageBoxA¡vªº·Q¹³¹Ï¡C°õ¦æ¦¹¥O®É¡ACALL ·|§â¤U¤@¹D«ü¥O¡Asub rcx,rcx¡Aªº¦ì§}±À¤J°ïÅ|¡A¦¹¦ì§}´N¬Oªð¦^¦ì§}¡AµM«á§â±±¨îÅv¥æµ¹ MessageBoxA ªº¶i¤JÂI¡Cµ¥ MessageBoxA °õ¦æ³Ì«á¤@¹D«ü¥O¡ARET¡A´N·|±q°ïÅ|³»ºÝ¨ú¦^ªð¦^¦ì§}¡A¨Ï RSP ¥[¤K¡AµM«á§â±±¨îÅvÂkÁÙµ¹ªð¦^¦ì§}¤Wªº«ü¥O¡AµM«áÄ~Äò°õ¦æ sub rcx,rcx¡C
«e±¤w¤¶²Ð¹L«Å§i°Æµ{¦¡ªº¤èªk¡APROC/ENDP¡A«Ü¦h¤H·|¯Ç´e¡AENDP ¤£´N¬Oµ²§ô°Æµ{¦¡¶Ü¡H¬°¦óÁÙn¦³ RET «ü¥O©O¡H¹ê»Ú¤W¡APROC/ENDP ¥u¬O¥Î¨Ó§i¶D²Õ;¹©Î¬OÅý¤H̾\Ū¤è«K¡A¦b PROC/ENDP ¤§¶¡ªºµ{¦¡¤ù¬q¬O°Æµ{¦¡¡A¦ý¬O¯u¥¿ÂkÁÙ±±¨îÅvµ¹¥Dµ{¦¡ªº¬O RET¡C¦]¦¹ PROC/ENDP ¬O°²«ü¥O¡ARET ¤~¬OÅý CPU ¯u¥¿°õ¦æªº«ü¥O¡C
¨ä¹ê¡A»P¨ä»¡ MessageBoxA ¬O°Æµ{¦¡¡A¤£¦p»¡¥¦¬O Windows API ªº¨ä¤¤¤@Ө禡¡C¦b FIRST_WND1.ASM ùØ¡AÁÙ¦³¤@Ó ExitProcess ¤]¬O¡C¥¦Ì³£¬O Windows API ªº¤@³¡¤À¡A©³¤U´N»¡©ú¤°»ò¬O Windows API¡C
API ¬O Application Programming Interface ªº¬OÁY¼g¡A©Ò¥H Windows API ¥i¥H½Ķ¦¨¡uWindows §@·~¨t²ÎÀ³¥Îµ{¦¡¤¶±¡v¡C§ÚÌ¥i¥H§â Windows API ¬Ý¦¨¬O³\¦hªº°Æµ{¦¡ªº¶°¦X¡A¥¦Ì³£¬O·L³n¤w¸g¼¶¼g¦nªº¡A¦h¹F¤W¤dºØªº°Æµ{¦¡¡A¸Ì±¥]§t«Ø¥ßµøµ¡ªº°Æµ{¦¡¡B¶}±ÒÀɮתº°Æµ{¦¡¡K¡K¡C·L³n±N¥¦Ì¶°¦X°_¨Ó¡A¦s©ñ¦b Windows §@·~¨t²Î¤ºªº¦UºØ°ÊºA³sµ²µ{¦¡®w¡]dynamic-link library¡AÁY¼g¬° DLL¡A¨ä°ÆÀɦW¬°¡u.DLL¡v¡^¤¤¡C¥¦¤]¬O Windows §@·~¨t²Îªº¤@³¡¤À¡A¥ô¦óµ{¦¡³£¥i¥H©I¥s¥¦¡CWindows API ¦b°õ¦æ§¹²¦«á¡A±N±±¨îÅvÂkÁÙµ¹¥Dµ{¦¡¡A¨Ã¥B±N°õ¦æµ²ªG¡A¤]´N¬O¦^¶ÇÈ¡A¦s©ñ©ó RAX ³qª¾¥Dµ{¦¡¡C©Ò¥H¡A©Ò¦³ªº Windows API ³£¬O¨ç¦¡¡C
Windows API ¬O±q¥Á°ê 74 ¦~¡]¦è¤¸ 1985 ¦~¡^µo°âªº Windows 1.0 ¶}©l¡A¤ä´©¬ù 450 Ө禡¡A¨ì²{¦b¥Á°ê 112 ¦~¤w¸g¦h¹F¤W¤dӨ禡¤F¡C¤jP¥i¥H¤À¦¨¤TÓ¶¥¬q¡G①Windows 1.0 ¨ì Windows 3.1 ³£¬O 16 ¦ì¤¸ªº§@·~Àô¹Ò¡A¤]ºÙ¬° Win16 API¡C②Windows NT 3.1/Windows 95 ¤Î¨ä«áÄòªºª©¥»³£¬O 32 ¦ì¤¸ªº§@·~¨t²Î¡A¬GºÙ Win32 API¡C③Windows XP ¤Î¨ä¤§«áªº Windows ³£¦³ 32 ¦ì¤¸»P 64 ¦ì¤¸¨âºØª©¥»¡A¨ä¤¤ 64 ¦ì¤¸ª©ªº Windows API ºÙ¬° Win64 API¡C
ÁöµM Windows API ¾ú¸g¼Æ¦¸§ó´À¡A·s¼W¤F³\¦h¨ç¦¡¡A¦ý¬O¹ï¼¶¼gµ{¦¡ªº¤H¨Ó»¡¡A°ò¥»Æ[©À´X¥G¤£ÅÜ¡A®t§O¶È¶È¬O°Ñ¼Æªø«×¤Î©I¥s¤è¦¡¦³©Ò¤£¦P¡C¦Ó¤p¤ì-°¸¼gªº³o¥÷¡uWin64 ²Õ¦X»y¨¥¡v±Ð¾Ç¤¤¡A´£¨ì Windows API¡AYµL¯S§O»¡©ú¡A³£¬O«ü Win64 API¡C
§Ú̦b¼¶¼g Win64 µ{¦¡¡AµL¥iÁ×§Kn©I¥s Windows API ¨Ó²¤Æµ{¦¡¡C¦pªG¤£³o»ò°µ¡A¥i¥H·Q¹³±o¨ì¡A¥ú¬O«Ø¥ßµøµ¡¤Ö»¡´Nn¼g¼Æ¦Ê¦æµ{¦¡½X¤F¡C«e±´£¹L¡AWindows API ¥i¥H¬Ý¦¨¬O·L³n¼g¦n¡AÅý§Ú̩Ҽ¶¼gªºµ{¦¡©I¥sªº°Æµ{¦¡¡A¥i¥H¤jÁx©ñ¤ßªº¥Î CALL «ü¥O©I¥s¥¦Ì¡C
¦b Windows §@·~¨t²Î¸Ì¡A¤Z¬O²o¯A¨ì»P¦r¤¸¦³Ãöªº Windows API ³£¦³¨â®M¡G
⑴¡BANSI ª©ªº Win64 API¡G¦b Win64 API ¦WºÙ«á±·|¦h¤F¡uA¡v¦r¤¸¡A¥Î¨Ó³B²z ANSI ½s½Xªº¦r¦ê¡CWindows ¥¿Å餤¤åª©ªº BIG¡Ð5 ³Q©w¸q¬° ANSI code page¡]CP950¡^¡A¦]¦¹ ANSI ª©ªº Win64 API ·|¨Ì¸Ó code page ¸ÑŪ¦r¦ê¡A¶i¦Ó¯à³B²z BIG-5 ½s½Xªº¤¤¤å¡C¦ý¬O¦b¨ä¥L¤£¦P»y¨¥ª©¥»ªº Windows ¤W°õ¦æ®É¡A¥i¯à·|²£¥Í¶Ã½X¡CMessageBoxA ´N¬O ANSI ª©ªº Win64 API¡C
⑵¡B¼e¦r¤¸ª©ªº Win64 API¡G¦b Win64 API ¦WºÙ«á±·|¦h¤F¡uW¡v¦r¤¸¡]W ¥Nªí¼e¦r¤¸ªº·N«ä¡A¥Î¨âөΨâÓ¥H¤Wªº¦ì¤¸²Õ¨Óªí¥Ü¤@Ó¦r¤¸¡A´NºÙ¬°¼e¦r¤¸¡^¡A¥Î¨Ó³B²z¥H¸U°ê½X¡]UNICODE/UTF¡Ð16¡^½s½Xªº¦r¦ê¡C¦]¬°·íªì¨î©w¸U°ê½X®É¡A´N¤w¦Ò¼{¨ìn¯à³B²z¥þ¥@¬É¥j©¹¤µ¨Óªº¤å¦r¡A©Ò¥H¤£·|¦³¶Ã½Xªº°ÝÃD¡C¤]´N¬O©I¥s¼e¦r¤¸ª©ªº Win64 API¡A¤£·|¦]¬°¦b¤£¦P»y¨¥ª©¥»ªº Windows ¤W°õ¦æ¡A²£¥Í¶Ã½X¡C¨Ò¦p MessageBoxW ´N¬O¼e¦r¤¸ª©ªº Win64 API¡C
¦pªG¤£²o¯A¨ì¦r¤¸ªº Win64 API¡Aµ²§À´N¨S¦³¡uA¡v©Î¡uW¡v¡A¤]´N¤£¤À ANSI ª©©Î¼e¦r¤¸ª©¡C¨Ò¦p ExitProcess ´N¨S¦³¤À ANSI ª©©Î¼e¦r¤¸ª©¡C¦b«e´X³¹¡A³£¨Ï¥Î ANSI ª©ªº Win64 API¡Aì¦]¦³¤G¡G①Y¥¼°µ¥ô¦ó«Å§i¡AMASM64 ¹w³]¤è¦¡¬O©I¥s ANSI ª©ªº Win64 API¡B②n©I¥s¼e¦r¤¸ª©ªº Win64 API¡A°£¤Fn«Å§i¤§¥~¡AÁÙ±o±N¦r¤¸Âà´«¦¨¸U°ê½X¡A¦bÁÙ¥¼»¡©ú¸U°ê½X¤§«e¡A¬OµLªk¿ì¨ìªº¡C
ÁöµM«e´X³¹¡A¨Ï¥Î ANSI ª©ªº Win64 API¡A¦ý¬O²{¥N¼¶¼gµ{¦¡¡AÀ³¸Ón©I¥s¼e¦r¤¸ª©ªº Win64 API¡A°£¤FÁ×§K¶Ã½X¥H¤Î¥i¥H²¤Æ°ê»Ú¤Æ¡]I18N¡^µ{¦¡ªº¶}µo¤§¥~¡A®Ä²v¤]¤ñ¸û°ª¡C³o¬O¦]¬°²{¦bªº Windows §@·~¨t²Î¡A¦b³B²z ANSI ª©ªº Win64 API ®É¡A·|¥ý§â ANSI ¦r¤¸Âà´«¦¨¸U°ê½X¡AµM«á©I¥s¹ïÀ³ªº¼e¦r¤¸ª© Win64 API¡C
¥Dµ{¦¡©I¥s°Æµ{¦¡®É¡A¥²¶·§â°Ñ¼Æ¶Çµ¹°Æµ{¦¡¡A¦ýn¦p¦ó¶Ç©O¡H§Q¥Î°ïÅ|ÁÙ¬O¼È¦s¾¹¡B«e«á¦¸§Ç¬O¦p¦ó¦w±Æ¡B¦^¶ÇȦp¦ó¶Ç¦^µ¹¥Dµ{¦¡¡B¥Dµ{¦¡ÁÙ¬O°Æµ{¦¡²M²z°ïÅ|¡K¡Kµ¥°ÝÃD¡C³o¨Ç°ÝÃD¡A¥Dµ{¦¡»P°Æµ{¦¡³£¥²¶·¹F¦¨¤@P¡A¤~¯à¥¿½T°õ¦æ¡C¦]¦¹n¦³²Î¤@ªº³W©w¡A³o¨Ç³W©wºÙ¬°©I¥sºD¨Ò©Î©I¥s¨ó©w¡C
©I¥s¨ó©w¦³³\¦hºØ¡A¦b Win64 API ¨Ï¥Îªº©I¥sºD¨ÒºÙ¬°¡uFASTCALL¡v¡C¦ý¦³¨Ç¤åÄm»¡Ãþ¦ü FASTCALL¡A¦³¨Ç¬Æ¦Ü»¡ FASTCALL ¨Ã¨S¦³ÄY®æªº©w¸q¡A¤p¤ì°¸¤]¤£ª¾±Ä«Hþ¤@ºØ¡A©Î³\ºÙ¬°¡ux64 ©I¥sºD¨Ò¡v´N¬O³Ì¦nªº¤è¦¡¡C¤£½×¦p¦ó¡AWin64 API ¤Î¦Û¦æ¼¶¼gªº°Æµ{¦¡³£¥²¶·¿í¦uªº x64 ©I¥sºD¨Ò¡A¨ä³W«h¦p¤U¡G
⑴¡B¥Dµ{¦¡§Q¥Î¼È¦s¾¹»P°ïÅ|±N°Ñ¼Æ¶Çµ¹°Æµ{¦¡¡A«e¥|ӰѼƤÀ§O¦s©ó RCX¡BRDX¡BR8¡BR9¡A¦pªG¶W¹L¥|Ó¡A¦h¥X¨Óªº°Ñ¼Æ¥Ñ°ïÅ|¶Çµ¹°Æµ{¦¡¡C§â°Ñ¼Æ±À¤J°ïÅ|®É¡A¥Ñ³Ì¥kÃ䪺°Ñ¼Æ³Ì¥ý±À¤J°ïÅ|¡A¦Ó©¹¥ª«á¨Ì¦¸±À¤J°ïÅ|¡C©Ò¥H³Ì¥kÃ䪺°Ñ¼Æ¡A¦s©ó³Ì°ª¦ì§}¡F³Ì¥ªÃ䪺°Ñ¼Æ¡A¦s©ó³Ì§C¦ì§}¡C¡C
⑵¡BÁöµM«e¥|ӰѼơA¾a¼È¦s¾¹¶Ç»¼¡A¦ý¬O¥Dµ{¦¡¤´n¦b°ïÅ|¤¤¹w¯d¦s©ñ°Ñ¼ÆªºªÅ¶¡¡A¦pªG°Ñ¼Æ¤Ö©ó¥|Ó¡A¤]n¹w¯d¥|Ó¡A³o¥|ӰѼƪºªÅ¶¡ºÙ¬°¡u¼v¤lªÅ¶¡¡v¡]shadow space¡^¡C¼v¤lªÅ¶¡¶È¶ÈÅý°Æµ{¦¡¦b¥²n®É±N¶Ç¤Jªº RCX¡BRDX¡BR8¡BR9 ¼È¦s¾¹ÈÀx¦s¨ì°ïÅ|¤W¡A¨Ã¤£t³d¶Ç»¼°Ñ¼Æ¡C
⑶¡B°õ¦æ CALL ¤§«e¡ARSP ©Ò«üªº°ïÅ|³»ºÝ¦ì§}¥²¶·¹ï»ô¸`¦ì§}¡]¦ì§}»Ý¹ï»ô 16 ¦ì¤¸²Õ¡^¡A³o¬°¤F¼W¥[®Ä²v¡C
¤@Ó¸`¡]paragraph¡^ªº¤j¤p¬O 16 Ӧ줸²Õ¡A¹ï»ô¸`¦ì§}ªº·N«ä¬O¦¹¦ì§}¬O 16 ªº¾ã¼Æ¿¡A¦pªG§â¦ì§}´«¦¨¤Q¤»¶i¦ì¡A¨º»ò³Ì«á¤@¦ì¥²©w¬O¹s¡A¨Ò¦p 20h¡B0EE3420h ³£¬O¡A¦Ó 28h¡BEE3422h ´N¤£¬O¡C´N¹³¤Q¶i¦ìªº 1234¡AÓ¦ì¼Æ¬O 4 ¤@¼Ë¡A§â¤Q¤»¶i¦ìªº³Ì«á¤@¦ì¬Ý¦¨¬OÓ¦ì¼Æ¡AÓ¦ì¼Æ¬O¹s¡A´Nªí¥Ü¹ï»ô¸`¦ì§}¡C¦pªG¤£¬Oªº¸Ü¡A¨º»ò¦b°õ¦æ CALL ¤§«e¥²¶·¦Û¦æ½Õ¾ã¡A¤èªk¤]«Ü²³æ¡A¨Ï RSP ´î¥h¬YӼƴN¦æ¡C¨ì³o¨à¡AŪªÌ¥i¯à·|¦³¨âÓ°ÝÃD¡G
①¡B¦pªG¨S¦³¹ï»ô 16 Ӧ줸²Õ·|«ç¼Ë¡Hµª®×¤]«Ü²³æ¡Aµ{¦¡¥ß§Y·í±¼¡I
②¡B¥i¤£¥i¥H§â RSP ¥[¤W¬Y¼Æ¦Ó¨Ï¨äÓ¦ì¼ÆÅܬ°¹s¡Aµª®×¬O¤£¦æ¡A¦]¬°¤ñ°ïÅ|³»ºÝ§ó°ª¦ì§}ªº¬O¦³¥Îªº¸ê®Æ¡A¦pªG¯}Ãa¤F¡Aµ{¦¡«Ü¦³¥i¯à·|·í±¼¡C
¦b¥ô¦ó±¡§Î¤U¡Aµ{¦¡¤@¶}©l°õ¦æ¡B©Îè¶i¤J¦Û¦æ¼¶¼gªº°Æµ{¦¡¡B©Îè¶i¤J¬YÓ Win64 API ®É¡ARSP ªº³Ì¥kÃ䨺¦ì¡A¤]´N¬O¡uÓ¡v¦ì¼Æ¡A¥²©w¬O¡u8¡v¡Cì¦]¬O¨Ì¾Ú x64 ©I¥sºD¨Ò¡A¦b°õ¦æ CALL ¤§«e¡ARSP Ó¦ì¼Æ¬O¹s¡A°õ¦æ CALL ®É·|±Nªð¦^¦ì§}±À¤J°ïÅ|¡A±N´î¥h¤K¡A¦]¦¹è¶i¤J¦Û¦æ¼¶¼gªº°Æµ{¦¡¡B©Îè¶i¤J¬YÓ Win64 API ®É¡ARSP ªºÓ¦ì¼Æ¥²©w¬O 8¡C¦pªG³o®ÉÔÁÙn©I¥s¥t¤@ӰƵ{¦¡©Î¥t¤@Ó Win64 API¡A¨Ì¾Ú³Q©I¥sªº°Æµ{¦¡©Î Win64 API ªº°Ñ¼ÆÓ¼Æ¡A¥i¯à·|¦³©³¤U´XºØ±¡§Î¡G
⒜¡B¦pªG°Ñ¼ÆÓ¼Æ¤p©ó©Îµ¥©ó¥|Ó¡A³£¥²¶·«O¯d¥|ӰѼưµ¬°¼v¤lªÅ¶¡¡C¨CӰѼƬO 8 Ӧ줸²Õ¡A¥[°_¨Ó¬O 32 Ӧ줸²Õ¡]§Y¤Q¤»¶i¦ìªº 20h¡^¡A¦pªG RSP ¥u´î¥h 20h¡A¨º»òÓ¦ì¼Æ¤´µM¬O 8¡C³o¬O¤£¦æªº¡A©Ò¥H¥²¶·®ö¶O 8 Ӧ줸²Õªº°ïÅ|¡A´î¥h 28h¡A¨Ï RSP ªºÓ¦ì¼Æ¬°¹s¡C
⒝¡B¦pªG°Ñ¼ÆÓ¼Æ¬O¤Ó¡A¨º»ò¼v¤lªÅ¶¡¥[¤W²Ä¤Ó°Ñ¼Æ¡AÁ`¦@¬O 28h Ӧ줸²Õ¡C¦pªG RSP ´î¥h 28h «áÓ¦ì¼Æ«ê¦n¬O¹s¡C
⒞¡B¦pªG°Ñ¼ÆÓ¼Æ¬O¤»Ó¡A¨º»ò¼v¤lªÅ¶¡¥[¤W²Ä¤¡B¤»Ó°Ñ¼Æ¡AÁ`¦@¬O 30h Ӧ줸²Õ¡C¦pªG RSP ´î¥h 30h «áÓ¦ì¼Æ¬O¤K¡A©Ò¥H¥²¶·´î¥h 38h¡A®ö¶O¤KӦ줸²Õªº°ïÅ|ªÅ¶¡¡C
⒟¡B¦pªG°Ñ¼ÆÓ¼Æ¬O¤»Ó¡A¨º»ò¼v¤lªÅ¶¡¥[¤W²Ä¤¡B¤»¡B¤CӰѼơAÁ`¦@¬O 38h Ӧ줸²Õ¡C¦pªG RSP ´î¥h 38h «áÓ¦ì¼Æ«ê¦n¬O¹s¡C
¨ì¦¹¡AÀ³¸Ó¥i¥H¬Ý¥X³W«ß¡A¾ã²z¦¨¤Uªí¡G
| ªí¡G°Ñ¼ÆÓ¼Æ»P RSP «O¯d¤j¤p | |||
| °Ñ¼ÆÓ¼Æ | RSP ´î¥h¦h¤Ö | °Ñ¼ÆÓ¼Æ | RSP ´î¥h¦h¤Ö |
| 4 ©Î¤p©ó 4 | 28H | 10 | 58H |
| 5 | 28H | 11 | 58H |
| 6 | 38H | 12 | 68H |
| 7 | 38H | 13 | 68H |
| 8 | 48H | 14 | 78H |
| 9 | 48H | 15 | 78H |
⑷¡B¦b°Æµ{¦¡©Î Win64 API ùØ¡A¦pªGn¨Ï¥Î RBX¡BRBP¡BRSI¡BRDI¡BRSP¡BR12¡BR13¡BR14¡BR15 ¤EӼȦs¾¹¡A°Æµ{¦¡©Î Win64 API ¥²¶·t³d«O¦s¡A¥H½T«O¦b©I¥s«e«á³o¤EӼȦs¾¹¤§È¤£ÅÜ¡AÅý¥Dµ{¦¡¯à¦w¤ß¨Ï¥Î¡C³o¤EӼȦs¾¹¤]ºÙ¬°«D´§µo©Ê¼È¦s¾¹¡]nonvolatile registers¡^¡A©ÎªÌºÙ¬°³Q©I¥sªÌ«O¦sªº¼È¦s¾¹¡]callee-saved registers¡^¡C¦Ó RAX¡BRCX¡BRDX¡BR8¡BR9¡BR10¡BR11 «hºÙ¬°©ö´§µo©Ê¼È¦s¾¹¡]volatile register¡^¡A¥i¦b°Æµ{¦¡¤¤¥ô·N¨Ï¥Î¡A¦]¦¹¦b©I¥s«á¡A¥¦Ìªº¼ÆÈ¥i¯à·|§ïÅÜ¡C
⑸¡B°Æµ{¦¡©Î Win64 API µ²§ô®É¡A¦^¶ÇÈ©ñ¦b RAX ¸Ì¡A¦Aªð¦^¥Dµ{¦¡¡C
⑹¡B¥Ñ©I¥sªÌt³d²M²z°ïÅ|¡C²Ä⑶´£¨ì¡A¥Dµ{¦¡©I¥s°Æµ{¦¡¡A©h¥BºÙ¬°°Æµ{¦¡¥Ò¡C°Æµ{¦¡¥Ò¤]¥i¯à·|©I¥s¥t¤@°Æµ{¦¡¤A¡A©Ò¥H°Æµ{¦¡¥Ò¥²¶·½Õ¾ã RSP¡A¨Ï¨ä¦b°õ¦æ CALL ®ÉÓ¦ì¼Æ¬°¹s¡A³q±`¬O¨Ï RSP ´î¥h¤@¼Æ¡C·í°h¥X°Æµ{¦¡¥Ò®É¡A¤]¥²¶·¨Ï RSP «ì´_½Õ¾ã«eªº¼ÆÈ¡A¤èªk´N¬O¥[¤Wèè´î¥hªº¼Æ¡C
Á|Ó¨Ò¤l»¡©ú¡A¹ï©óÁA¸Ñ x64 ©I¥sºD¨ÒÀ³¸Ó·|¦³©Ò§U¯q¡C°²³]¦³Ó¥Dµ{¦¡n©I¥s¦³¤»Ó°Ñ¼Æªº°Æµ{¦¡¡A¨º»ò¦b¶i¤J¥Dµ{¦¡«á¡A¥¼©I¥s°Æµ{¦¡¤§«e¡ARSP ©Ò«üªº°ïÅ|³»ºÝ¨Ã¥¼¹ï»ô¸`¦ì§}¡]2CFF38¡AÓ¦ì¼Æ¬O 8¡^¡A¨£¥k¹Ï¤@¡C
¤»Ó°Ñ¼Æ¦@ 48 Ӧ줸²Õ¡]48¡×30h¡^¡A¦ý¬O¦pªG±q²{¦b RSP ©Ò«ü¦ì§}´î¥h 30h ¬O 2CFF08¡A¨Ã¨S¦³¹ï»ô¸`¦ì§}¡A¤£¯à°õ¦æ CALL §_«h¤Þ°_·í¾÷¡C¦pªG®ö¶O¤KӦ줸²ÕªºªÅ¶¡¡A¦A¨Ì§Ç§â²Ä¤»¡B²Ä¤Ó°Ñ¼Æ±À¤J°ïÅ|¡AµM«á©ó°ïÅ|¤W«O¯dµ¹ RCX¡BRDX¡BR8¡BR9 Àx¦s©Ò»Ýªº¼v¤lªÅ¶¡¤§«á¡ARSP ©Ò«ü¦ì§}´N«ê¦n¬O¸`¦ì§}Ãä¬É¡A¨£¹Ï¤G¡C
¦¹¨è°õ¦æ CALL «ü¥O¡ACALL ¥ý§â RSP ´î¥h¤K¡A¦A§âªð¦^¦ì§}¦s©ó RSP¡A³Ì«á¶i¤J°Æµ{¦¡¡A¨£¹Ï¤T¡C
©³¤U¤¶²Ð MessageBoxA¡BExitProces ³o¨âÓ Win64 API¡A¦ý¦b³o¤§«e¡A±o¥ý»¡©ú¤@¥ó¨Æ¡C¦b³o¾ãÓºô¯¸©Ò¦C¥Xªº Win64 API¡A¶È¶È»¡©ú³Ì«nªº³¡¤À¡A²¦³º¤p¤ì°¸ªº³oÓºô¯¸¤£¬O»¡©ú Windows API À³¥Î¤j¥þ¡C©Ò¥Hn±o¨ì§¹¾ã¸ÔºÉªº»¡©ú¡A¥²¶·¦Û¦æ¥h·L³nªººô¯¸¤W¬d¾\¡C
MessageBoxA ¬O³\¦h Windows API ¤¤ªº¨ä¤¤¤@Ó¡A¥¦ªº¥\¯à¬O¦b¿Ã¹õ¤W«Ø¥ß¤@Ó°T®§¤è¶ô¨ÃÅã²{¥X¨Ó¡A¨ä¤º¦³¤@¬q¦r¦ê©Î¹Ï¥Ü¡A¤]¦³«ö¶s¥i¨Ñ¨Ï¥ÎªÌ¬D¿ï¡C·í¨Ï¥ÎªÌ¿ï¾Ü¥ô¤@Ó«ö¶s¡A¨t²Î·|Ãö³¬¦¹µøµ¡¡A¨Ã¦b¶Ç¦^È«ü¥X¨Ï¥ÎªÌ«ö¤FþÓ«ö¶s¡C©I¥s MessageBoxA ©Ò»Ýnªº°Ñ¼Æ¦³¥|Ó¡A¥i¥H¬d¾\ MSDN ¡A±o¨ì¤U±ªºµ²ªG¡G
int MessageBoxA( [in, optional] HWND hWnd, [in, optional] LPCSTR lpText, [in, optional] LPCSTR lpCaption, [in] UINT uType );
¤W±¨ç¦¡ªº¼gªk¬O¥H C/C¡Ï¡Ï ªº¤è¦¡ªí²{ªº¡A¥i¯à·|¦]¬° MSDN ª©¥»¤£¦P¦Ó²¤·L¤£¦P¡A¤£¼vÅT¤£¤j¡C¡uint MessageBoxA¡v¤¤ªº int ªí¥Ü¦^¶ÇȪº¸ê®ÆÃþ«¬¬°¾ã¼Æ¡]integer¡^¡A¦b Win64 ¨t²Î¤¤ int ªºªø«×¬O¥|Ӧ줸²Õ¡A¤]´N¬O 32 ¦ì¤¸¡A©Ò¥H¡A§Y¨Ï Win64 API ªº¦^¶Çȳ£¦s©ñ¦b RAX ¼È¦s¾¹ùØ¡A¦ý¥u¦³¸û§Cªº 32 ¦ì¤¸¦³®Ä¡C
±µ¤U¨Ó¬O¨ç¦¡¦WºÙ¡AMessageBoxA¡Anª`·N¤j¤p¼g¡C±µ¤U¨Ó¡A¦b¡u(¡K¡K)¡v¤º¦³¥|ӰѼơA³o¥|ӰѼƳ£¬O¥Î¡u¤¶±©w¸q»y¨¥¡v¡]©Îì©l½X¼Ðµù»y¨¥¡^¡B¡u¸ê®ÆÃþ«¬¡v¡B¡u°Ñ¼Æ¦WºÙ¡v¬°¤@²Õªº¤è¦¡ªí¥Ü¡C¨C¤@²Õªº²Ä¤@Äæ¬O¤¶±©w¸q»y¨¥¡A¥Î©ó´yz°Ñ¼Æ¬O¶È¶È´£¨Ñ¸ê®Æ¡AÁÙ¬O±µ¦¬¸ê®Æ¡A¸Ô±¡½Ð¨£µù¤@¡C¹ï©ó²Õ¦X»y¨¥¨Ó»¡¡A³o¤@Äæ¨Ã¤£¬O«D±`«n¡C
¨C¤@²Õªº²Ä¤GÄæ¡A¦¹Äæªí¥Ü¨ä«áªº°Ñ¼ÆÄÝ©óþ¤@ºØ¸ê®ÆÃþ«¬¡C¨Ò¦p HWND¡BLPCSTR ³£¬O¥|¦r²Õªø«×¡A¦ý«eªÌªí¥Üµøµ¡±±¨î¥N½X¡A«áªÌªí¥Ü¬YÓ¦ì§}¡A¦Ó¦¹¦ì§}ªº°O¾ÐÅéÀx¤º¦sªº ANSI ±`¼Æ¦r¦ê¡C·í§A¼ô±x³oºØªí¥Ü¤è¦¡¤§«á¡A«Ü®e©ö´N¯à±q¸ê®ÆÃþ«¬¤¤¸ÑŪ°Ñ¼Æ©ÎÅܼƪº·N¸q¡A¸Ô±¡¨£µù¤G¡C
²Ä¤@ӰѼơAhWnd¡A¬O§Y±N«Ø¥ß¤§°T®§¤è¶ôªº¾Ö¦³ªÌµøµ¡±±¨î¥N½X¡A¤]´N¬O»¡ hWnd ¬O¥Î¨Ó«ü©w¡u¥Í¦¨ªº°T®§¤è¶ôÄÝ©óþÓµøµ¡¡v¡C¦pªG¦¹°Ñ¼Æ¬° NULL¡]Windows ¨t²Î¤¤¡A¥H NULL ¥Nªí¹s¡^¡Aªí¥Ü°T®§¤è¶ô¨S¦³¾Ö¦³ªÌµøµ¡¡]owner window¡^¡C
²Ä¤GӰѼơAlpText¡A¬O«ü¡unÅã¥Ü¦b°T®§¤è¶ô¤º¤§¦r¦ê¡vªº ANSI ¦r¦ê¦ì§}¡A¦¹¦r¦ê¶·¥H¹sµ²§À¡C²Ä¤TӰѼơAlpCaption¡A¬O¡u°T®§¤è¶ô¼ÐÃD¦C¤å¦r¡vªº ANSI ¦r¦ê¦ì§}¡A¦P¼Ë»Ý¥H¹sµ²§À¡C
²Ä¥|ӰѼƬO uType¡AÅã¥Ü©óµøµ¡ªº«ö¶s§Î¦¡©Î¹Ï¥Ü¡A±`¥Îªº¼ÆÈ¦p¤Uªí¡]ªí¤¤ªº MB_ ¬O Message Box ªº·N«ä¡^¡G
| uType | ¼ÆÈ | ·N¸q |
| MB_OK | 0h | ¥uÅã¥Ü¡u½T©w¡v«ö¶s |
| MB_OKCANCEL | 1h | Åã¥Ü¡u½T©w¡v»P¡u¨ú®ø¡v¨âÓ«ö¶s |
| MB_ABORTRETRYIGNORE | 2h | Åã¥Ü¡u²×¤î¡v¡B¡u«¸Õ¡v¡B¡u²¤¹L¡v¤TÓ«ö¶s |
| MB_YESNOCANCEL | 3h | Åã¥Ü¡u¬O¡v¡B¡u§_¡v¡B¡u¨ú®ø¡v¤TÓ«ö¶s |
| MB_YESNO | 4h | Åã¥Ü¡u¬O¡v¡B¡u§_¡v¨âÓ«ö¶s |
| MB_RETRYCANCEL | 5h | Åã¥Ü¡u«¸Õ¡v¡B¡u¨ú®ø¡v¨âÓ«ö¶s |
| MB_CANCELTRYCONTINUE | 6h | Åã¥Ü¡u¨ú®ø¡v¡B¡u«¸Õ¡v¡B¡uÄ~Äò¡v¤TÓ«ö¶s |
| MB_HELP | 4000h | Åã¥Ü¡u½T©w¡v¡B¡u»¡©ú¡v¨âÓ«ö¶s¡A¦pªG¨Ï¥ÎªÌ«ö¤U»¡©ú«ö¶s¡A¨t²Î·|±N WM_HELP °T®§¶Ç°eµ¹¾Ö¦³ªÌµøµ¡ |
MessageBoxA ªº uType °Ñ¼Æ¡A°£¤FÅã¥Ü«ö¶s¤§¥~¡A¤]¥i¥HÅã¥Ü¤º©wªº¹Ï¥Ü¡B«ü©w°T®§¤è¶ôªºÃþ«¬¡B«ü©wþÓ«ö¶s¦¡¹w³]ªº¡A³o¨Ç³£½Ð¦Û¦æ¬d¾\·L³nºô¯¸¡A¦pªGÅã¥Ü©Î«ü©w¯S®í¥\¯à¡A¥i¥H¥Î¡uor¡v¹Bºâ¤l³s±µ¡C¨Ò¦pnÅã¥Ü°Ý¸¹ªº¹Ï¥Ü¤Î¡u¬O¡v¡B¡u§_¡v¡B¡u¨ú®ø¡v¤TÓ«ö¶s¡A¨º»ò uType ´N³]©w¬°¡uMB_YESNOCANCEL or MB_ICONQUESTION¡v¡C
MessageBoxA ªº¦^¶ÇÈ©ñ¦b RAX ªº 0¡ã31 ¦ì¤¸¤º¡A»¡©ú¦p¤Uªí¡G
| ¦^¶ÇÈ | ¼ÆÈ | ¨Ï¥ÎªÌªº¾Þ§@ |
| IDOK | 1 | «ö¤U¡u½T©w¡v«ö¶s |
| IDCANCEL | 2 | «ö¤U¡u¨ú®ø¡v«ö¶s |
| IDYES | 6 | «ö¤U¡u¬O¡v«ö¶s |
| IDNO | 7 | «ö¤U¡u§_¡v«ö¶s |
| IDABORT | 3 | «ö¤U¡u²×¤î¡v«ö¶s |
| IDCONTINUE | Bh | «ö¤U¡uÄ~Äò¡v«ö¶s |
| IDIGNORE | 5 | «ö¤U¡u²¤¹L¡v«ö¶s |
| IDRETRY | 4 | «ö¤U¡u«¸Õ¡]R¡^¡v«ö¶s |
| IDTRYAGAIN | Ah | «ö¤U¡u«¸Õ¡]T¡^¡v«ö¶s |
ExitProcess ¬O¥Î¨Óµ²§ôÀ³¥Îµ{¦¡ªº¡A¥Îªk¦p¤U¡G
VOID ExitProcess( [in] UINT uExitCode );
VOID ¥Nªí ExitProcess ¨S¦³¦^¶ÇÈ¡A²z¥Ñ«Ü²³æ¡A°õ¦æ§¹ ExitProcess µ{¦¡´N¤w¸gµ²§ô¤F¡A±±¨îÅv¤]¤£·|¦^¨Ó쥻ªºµ{¦¡¡A©Ò¥H¨S¦³¦^¶ÇÈ¡CExitProcess ¥u¦³¤@ӰѼơAuExitCode¡A´N¬O§â¤@Ó¼ÆÈ¶Çµ¹ Windows¡A³oÓ¼ÆÈ¥i¥Hµ¹ Windows ©Î¨ä¥Lµ{¦¡¨Ï¥Î¡C¤@¯ë¦Ó¨¥¡A¦pªG¥¿±`µ²§ô¡A¦¹¼ÆÈ³]¬°¹s¡F¦pªG¬O¦]¬°²£¥Í¿ù»~¡A¦¹¼ÆÈ¥i¥Hªí¥Ü¿ù»~½s¸¹¡C
EXTRN ¬O«ü¥Ü²Õ;¹¨Ï¥Î¥~³¡ÅܼƦWºÙ¡B¼Ð°O©Î°Æµ{¦¡¦WºÙ¡A¤]¥i¥H¼g¦¨ EXTERN¡A·N¸q¬Û¦P¡A¥u¤£¹L EXTERN ¾A¥Î©ó·sª©ªº²Õ;¹¡A¨ä»yªk¬O¡G
EXTRN name:qualifiedtype[,name:qualifiedtype[,...]]
°²¦p¬YÓµ{¦¡n¨Ï¥Î§Oªºµ{¦¡©Ò©w¸qªº¦WºÙ¡A¥i¥H¦b«eªÌ¥H EXTRN «Å§i¸Ó¦WºÙ¬O¥Ñ§Oªºµ{¦¡©Ò©w¸qªº¡Aname ´N¬O§Oªºµ{¦¡©Ò©w¸qªº¦WºÙ¡C³oºØ±¡§Î¡A¤j¦hµo¥Í¦b§ÚÌn©I¥sµ{¦¡¶}µo°Ó´£¨Ñªº°Æµ{¦¡¡A©Î¬O»s§@¤j«¬µ{¦¡¡C¤j«¬µ{¦¡¡A¨Ò¦p WORD¡BEXCEL µ¥¡A¥²©w¬O³\¦h¤H¤À¤u¦X§@¦Ó¨CÓ¤H¥ut³d¨ä¤¤¤@³¡¤À¡A¨CÓ¤Ht³dªº¨º¤@³¡¤Àªº¬Y¨Ç¥\¯à¤@©w·|¸ò¨ä¥L¤Hªºµ{¦¡¦³Ãö¡A³o´N¬O EXTRN µo´§¥\¯àªº®ÉÔ¡C
¨Ò¦p¦b¥Òì©lµ{¦¡¨S¦³©w¸q¬YÓ¦WºÙ¡A°²³]¬O xyz ¦n¤F¡A¤]¨S¦³¥H EXTRN «Å§i¥¦¬°¥~³¡¦WºÙ¡F¦ý¬O¦b¤Aì©lµ{¦¡¤w¸g©w¸q¹L xyz¡C³o®É¦pªGª½±µ²ÕĶ¥Ò¥²©w·|µo¥Í¿ù»~¡C¦ý¦pªG¦b¥Ò¤¤¦³«Å§i xyz ¬°¥~³¡¦WºÙ¡A±N¥Ò¡B¤A¤À§O²Õͦ¨¥ØªºÀɳ£¤£·|µo¥Í¿ù»~¡A¦b³sµ²®É¡ALINK.EXE ¥i¥H¶¶§Qªº±NÅý¥Òµ{¦¡¨Ï¥Î¤Aµ{¦¡ªº xyz¡C
¤W±ªº»yªk¤¤¡Aname ¥i¥H¬OÅܼƦWºÙ¡B¼Ð°O©Î°Æµ{¦¡¦WºÙ¡Fqualifiedtype ¥i¥H¬O BYTE¡BWORD¡BDWORD¡BQWORD¡BNEAR¡BFAR¡BPROC¡A«e¥|ӥΩóÅܼơA²Ä¤¡B¤»Ó¥Î©ó¼Ð°O¡A«á¤TÓ¥Î©ó°Æµ{¦¡¦WºÙ¡CEXTRN ¥i¥H¦P®É«Å§i¦hÓ¥~³¡¦WºÙ¡A¤¤¶¡¥H¡u,¡v¬Û¹j¡C
¦b FIRST_WND1.ASM ¤¤¡A·|©I¥s MessageBoxA »P ExitProcess ¨âӰƵ{¦¡¡A«eªÌ¬O¥Î¨ÓÅã¥Ü¤@Ó°T®§¤è¶ô¡A«áªÌ¥Î©óµ²§ôµ{¦¡¡C¥¦Ì¬O·L³n©Ò¼¶¼gªº Win64 API¡A¥iÅý©Ò¦³À³¥Îµ{¦¡©I¥s¡C¦b FIRST_WND1.ASM ¤¤§¹¥þ¨S¦³¥¦Ìªºµ{¦¡½X¡A©Ò¥H¥Î EXTRN «Å§i¥¦Ì¬O¡u¥~³¡¡vªºµ{¦¡¡C
¦]¬° Win64 API ¼Æ¶qÃe¤j¡A©Ò¥H·L³n±N¤£¦PºØÃþªº API ¥]¸Ë¦b¤£¦Pªº°ÊºA³sµ²µ{¦¡®w¡]°ÆÀɦW¬O DLL¡^ùØ¡A¦Ó¦b¥DÀɦW¬Û¦Pªº¶×¤Jµ{¦¡®w¡]°ÆÀɦW¬°¡u.LIB¡v¡^¦³¨ä©I¥s®É©Ò»Ý¤§¸ê®Æ¡C¨Ò¦p¬d¾\·L³nºô¯¸©Î MSDN¡A¦b¡uRequirements¡v¬q¸¨ùرoª¾ ExitProcess ¦b KERNEL32.DLL ¤¤¡A¦]¦¹¦b KERNEL32.LIB ¦³¨ä©I¥s®É©Ò»Ý¤§¸ê®Æ¡CÀ³¥Îµ{¦¡©I¥s ExitProcess ®É¡A»Ýn±N¶×¤Jµ{¦¡®w¤¤ªº¸ê®ÆÅn¬A¶i¨Ó¡A¤èªk´N¬O¨Ï¥Î¡uINCLUDELIB¡v°²«ü¥O¡C
INCLUDELIB ªº»yªk¬O¡G
INCLUDELIB ¶×¤Jµ{¦¡®wÀɦW
¶×¤Jµ{¦¡®wÀɦW¥i¥H¥]§tºÏºÐ¾÷¦WºÙ¡B¸ô®|¦W¡C
SUB «ü¥O¬O´îªk«ü¥O¡]subtract¡^¡A¥¦ªº»yªk¬O¡G
SUB ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸
SUB ·|§â¥Øªº¹Bºâ¤¸ùرªº¼ÆÈ´î¥h¨Ó·½¹Bºâ¤¸ùرªº¼ÆÈ¡A¦A§âµ²ªG¦s¤J¥Øªº¹Bºâ¤¸¡C¦]¦¹°õ¦æ§¹«á¡A¥Øªº¹Bºâ¤¸¤§È·|§ïÅÜ¡A¨Ó·½¹Bºâ¤¸¤§È¤£ÅÜ¡C¥Øªº¹Bºâ¤¸¥i¥H¬OÅܼƩμȦs¾¹¡A¨Ó·½¹Bºâ¤¸¥i¥H¬O±`¼Æ¡BÅܼƩμȦs¾¹¡A¦ý¬O¥Øªº¹Bºâ¤¸©M¨Ó·½¹Bºâ¤¸¤£¯à¦P®É¬°ÅܼơA¦Ó¥B¨âªÌªº¦ì¤¸¼Æ¥²¶·¬Û¦P¡CSUB ¹Bºâ«á¡A·|§ïÅܺX¼Ð¼È¦s¾¹¡C¬Ý¬Ý©³¤Uªº¨Ò¤l¡G
sub rax,rcx ;¥¿½T¡ARAX¡BRCX §¡¬° 64 ¦ì¤¸¡C¹Bºâ«á¡ARCX ¤£ÅÜ¡ARAX ·|§ïÅÜ sub rax,dx ;¿ù»~¡ARAX¬° 64 ¦ì¤¸¦Ó DX ¬° 16 ¦ì¤¸
¤W±²Ä¤@Ó¨Ò¤l¬O§â RAX ¼È¦s¾¹´î¥h RCX ¼È¦s¾¹¡A¦A§â©Ò±o¤§®t¦s¤J RAX ¸Ì±¡C
XOR ¤¤¤åºÙ¬°¡u¤¬¥¸©Î¡v¡]exclusive or¡^¡A¬OÅÞ¿è¹Bºâªº¤@ºØ¡C¥ý¬Ý¬Ý¤é±`¥Í¬¡¤¤Ãþ¦üªº¨Ò¤l¡A¨Ò¦p°ª¤¤¤G¦~¯Å¾Ç¥Í±N±Á{¿ï¾ÜªÀ·|²ÕÁÙ¬O¦ÛµM²Õ¡A·íµM¦PÓ¤H¥u¯à¿ï¤@²Õ´NŪ¡C¦pªG¦³¦ì¾Ç¥Í¥u¿ï¾Ü¨ä¤¤¤§¤@¡A¥Nªí¥L¤w¿ï²Õ§¹¦¨¡F¦pªG¦³¥t¤@¦ì¾Ç¥ÍÁÙ¥¼¿ï¾Ü¡A·íµM´NÁÙ¨S§¹¦¨¡F¦pªGÁÙ¦³¥t¤@¦ì¾Ç¥Í¨â²Õ³£¿ï¡A¾Ç®Õ·íµM¤£·|¦P·N³o¼Ëªº¤è¦¡¡A¤]¥Nªí¥LÁÙ¨S§¹¦¨¡C³o¤]¬O¡u¤¬¥¸©Î¡vªº¦WºÙ¥Ñ¨Ó¡AŪªÀ·|²Õ»PŪ¦ÛµM²Õ¤£¯à¦P®Éµo¥Í¡A¬O¬°¡u¤¬¥¸¡v¡F¦Ó¨âªÌ¥u¯à¿ï¾Ü¨ä¤¤¤@ºØ¡A¬O¬°¡u©Î¡v¡C
¥H¤W±°ª¤G¾Ç¥Í¿ï²Õ¬°¨Ò¡A¿ï¾Ü¬Y¤@²Õ·í°µ¯u¡A¥H¡u1¡vªí¥Ü¡F¤£¿ï¬Y¤@²Õ·í°µ°²¡A¥H¡u0¡vªí¥Ü¡C¬Y¦ì¾Ç¥Í¤w§¹¦¨¿ï²Õ·í°µ¯u¡A¥H¡u1¡vªí¥Ü¡FÁÙ¥¼§¹¦¨·í§@°²¡A¥H¡u0¡vªí¥Ü¡C¥|¦ì¾Ç¥Í¤À§O¥Nªí¥|ºØ±¡§Î¡A¦C¦¨¤@±iªí¦p¤U¡C¾Ç¥Í¥Ò¥Nªí¥L³£ÁÙ¨S¿ï¾Ü¡A¬G¥¼§¹¦¨¿ï²Õ¡F¾Ç¥Í¤A¥Nªí¥L¿ïªÀ·|²Õ¡A¤w§¹¦¨¿ï²Õ¡K¡K¾Ç¥Í¤B¬O¨â²Õ¬Ò¿ï©óÅé¨î¤£¦X¡A©Ò¥H¥¼§¹¦¨¿ï²Õ¡C
| ¾Ç¥Í | ¿ïªÀ·|²Õ | ¿ï¦ÛµM²Õ | ¬O§_¤w§¹¦¨¿ï²Õ |
| ¥Ò | 0 | 0 | 0 |
| ¤A | 1 | 0 | 1 |
| ¤þ | 0 | 1 | 1 |
| ¤B | 1 | 1 | 0 |
¦b¹q¸£¤¤n¹ê²{¬O§_§¹¦¨¿ï²Õªº¹Bºâ¡A´N¯à¨Ï¥Î¡u¤¬¥¸©Î¡v¹Bºâ¡C¦b¹q¸£¸Ì¡A¤¬¥¸©Î¹Bºâ¡B¥B¹Bºâ¡B©Î¹Bºâ¡B«D¹Bºâ¬O¥|ºØ±`¨£ªºÅÞ¿è¹Bºâ¡A¹q¸£³Ì¾Õªø³B²z¼ÆÈ¡A¤×¨ä¬O¤G¶i¦ì¡A¦]¦¹¦b¹q¸£¤¤¡A±`¥H 0 ¥Nªí°°¡B°²¡B§_©wªº¡F¥H 1 ¥Nªí¯u¡B¬O¡BªÖ©wªº¡C¦b³\¦hµ{¦¡¤¤¡A¤]·|«Å§i¡uTRUE¡v¥Nªí¡u1¡v¡B¡uFALSE¡v¥Nªí¡u0¡v¡C¨âÓ¤@¦ì¤¸ªº¹Bºâ¤¸°µ XOR ¹Bºâ¡A¦³¥|ºØ¤è¦¡¡A¦p¤Uªí¡G
0 XOR 0¡×0 1 XOR 0¡×1 0 XOR 1¡×1 1 XOR 1¡×0
¹³³o¼Ë§âÅÞ¿è¹Bºâ¦C¦¨ªºªí®æ¡AºÙ¬°¯uȪí¡C¤W±´N¬O XOR ªº¯uȪí¡C¦pªG§A¥J²ÓÆ[¹î¡A´N·|µo²{¡G①¨âÓ¬Û¦Pªº¹Bºâ¤¸§@¤¬¥¸©Î¹Bºâ¡Aµ²ªG¬° 0¡F②¨âÓ¬Û²§¹Bºâ¤¸§@¤¬¥¸©Î¹Bºâ¡Aµ²ªG¬° 1¡C
¦b x64 «ü¥OùØ¡AXOR ªº»yªk¬O¡G
XOR ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸
XOR ·|§â¥Øªº¹Bºâ¤¸©M¨Ó·½ºâ¤¸¶i¦æ¤¬¥¸©Î¹Bºâ¡A¦A§âµ²ªG¼g¤J¥Øªº¹Bºâ¤¸ùØ¡C¥Øªº¹Bºâ¤¸¥i¥H¬O¼È¦s¾¹¡BÅܼơA¨Ó·½¹Bºâ¤¸¥i¥H¬O¼È¦s¾¹¡BÅܼƻP¥ß§YÈ¡C¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸¤£¯à¦P®É¬OÅܼơA¦Ó¥Bªø«×¥²¶·¬Û¦P¡A¨Ò¦p³£¬O 64 ¦ì¤¸¡A¦Ó¤£¯à¤@Ó¬O 64 ¦ì¤¸¥t¤@Ó¬O 16 ¦ì¤¸¡CXOR ¹Bºâ¤§«á¡A·|¨Ì¾Úµ²ªG¡AÅܧóºX¼Ð¼È¦s¾¹¤§È¡C
Á|Ó¨Ò¤l¡AY AL¡×6Bh¡ABL¡×C2h¡A°õ¦æ¡uXOR AL,BL¡v«áªºµ²ªG¬O¤°»ò©O¡H½Ð°Ñ¦Ò¥k¹Ï¡G¡]¥k¹Ï¤w±N 6Bh »P C2h ´«ºâ¦¨¤G¶i¦ì¼Æ¡A³o¼Ë¤~¯à¤@Ӧ줸¤@Ӧ줸¶i¦æ XOR ¹Bºâ¡^
AL ªº²Ä¹s¦ì¤¸»P BL ªº²Ä¹s¦ì¤¸§@¤¬¥¸©Î¹Bºâ¡A§Y¡u1 XOR 0¡v±o¡u1¡v¡]¬Û²§È°µ¤¬¥¸©Î±o 1¡^
AL ªº²Ä¤@¦ì¤¸»P BL ªº²Ä¤@¦ì¤¸§@¤¬¥¸©Î¹Bºâ¡A§Y¡u1 XOR 1¡v±o¡u0¡v¡]¬Û¦PȰµ¤¬¥¸©Î±o 0¡^
¨ä¾l¨Ì¦¹Ãþ±À¡Aì«h´N¬O¨C¤@¦ì¤¸©M¥t¤@¬Û¹ïÀ³ªº¦ì¤¸¹Bºâ¡C³Ì«áµ²ªG´N¬O¡u6B XOR C2¡×A9¡v¡C¦]¦¹¡uXOR AL,BL¡v¤§«á¡AAL Åܦ¨ A9¡ABL ¤´¬O C2¡C
XOR ¹Bºâ¦³¨âÓ«Ü©_§®ªº¯S©Ê¡A¨º´N¬O¡G①¡u¦pªG¬YӼƻP¦Û¤v§@¤¬¥¸©Î¹Bºâ¡A©Ò±oµ²ªG¬°¹s¡v¡F②¡u¬YӼƻP¦P¤@¼Æ³s°µ¨â¦¸¤¬¥¸©Î¹Bºâ¤´±o¨ìì¼Æ¡v¡C¦b FIRST_WND1.ASM ªº²Ä¤Q¤»¦æ¡A´N¬O§Q¥Î①ªº¤èªk¡A¨Ï RCX Åܬ°¹s¡]xor rcx,rcx¡^¡C
OFFSET ¹Bºâ¤lªº»yªk¬O
OFFSET ¹Bºâ¤¸
OFFSET ¬O«ü¥Ü ML64.EXE ²Õ;¹¦b²ÕĶªº®ÉÔ¡A§â¹Bºâ¤¸ªº¦ì§}pºâ¥X¨ÓµM«á¦A§@¬Y¨Ç³B²z¡A¦¹³Bªº¹Bºâ¤¸¥i¥H¬OÅܼƩμаO¡]label¡^¡C·í ML64.EXE ²Õ;¹pºâ±o¨ì¨ä¦ì§}«á¡A¨ä¹ê´N¬O¤@Ó±`¼Æ¡CFIRST_WND1.ASM ªº²Ä¤Q¤C¦æ¡A¡umov rdx,OFFSET szText¡v¡Aªº·N«ä¬Opºâ¥X szText ¦r¦êªº¦ì§}¡A¨Ã±N¨ä¦s¤J RDX ¼È¦s¾¹¸Ì¡C
LEA «ü¥O¬O¥Î¨Ó¨ú±o¦r¦ê¡BÅܼƩΰƵ{¦¡ªº¦ì§}¡A¨ä»yªk¬O
LEA ¼È¦s¾¹,¹Bºâ¤¸
¹Bºâ¤¸¥i¥H¬O¦r¦ê¡BÅܼƩΰƵ{¦¡¦WºÙ¡A°õ¦æ§¹ LEA «ü¥O«á¡A¼È¦s¾¹ªº¼ÆÈ´N·|Åܦ¨¨ä«á©Ò±µ¦r¦ê¡BÅܼƩΰƵ{¦¡ªº°_©l¦ì§}¡Cnª`·Nªº¬O¡A¦b Win64 ùØ¡A¦ì§}¬O 64 ¦ì¤¸¡A¦]¦¹¼È¦s¾¹¤]±on¥Î 64 ¦ì¤¸¡A¨Ò¦p RAX¡BRCX¡K¡Kµ¥¡A¤£¥i¥H¥Î EAX¡BAX ³o¨Ç 32 ¦ì¤¸©Î 16 ¦ì¤¸ªº¼È¦s¾¹¡C
¡uLEA¡v»P¡uMOV ·f°t OFFSET¡v³£¬O¥Î¨Ó¨ú±o¦ì§}¡A¦ü¥G¤@¼Ë¨ä¹ê¤£µM¡C¡uMOV ·f°t OFFSET¡v¥u¯à¥Î©ó²ÕͶ¥¬q´N¤w¸g½T©w¦ì§}ªº¹Bºâ¤¸¡F¦ý¬O¹³¥~³¡ÅܼơB¼Ð°Oµ¥¡A©Î¬O°Ï°ìÅܼơA³£¥u¯à¦b°õ¦æ¹Lµ{¤¤¤~¯à½T©w¦ì§}¡A³o®ÉÔ¥u¯à¥Î¡uLEA¡v«ü¥O¡C
¦pªG§A¯à¦³@¤ß¬Ý¨ì³o¨à¡A¨º»òÂ÷¥Î²Õ¦X»y¨¥©I¥s Win64 API ¶È³Ñ¤@¨B¤§»»¤F¡C³Ñ¤Uªº³o¤@¨B¡A¨Ó¬Ý¬Ý FIRST_WND1.ASM ªº¥Dµ{¦¡¡A´N¯à§¹¥þÁA¸Ñ¤F¡G
sub rsp,28h
xor rcx,rcx
mov rdx,OFFSET szText
lea r8,szCaption
mov r9,MB_OK
call MessageBoxA
¬°¤°»ò¤W±µ{¦¡ªº²Ä¤@¦æn¨Ï RSP ´î¥h 28h ©O¡Hì¦]¬On«O¯d¼v¤lªÅ¶¡¡A¨Ã¨Ï¦b²Ä¤»¦æ°õ¦æ CALL ¤§«e¡AÅý°ïÅ|³»ºÝ¯à¹ï»ô¸`¦ì§}¡C²Ä¤G¡ã¤¦æ¬OÅý RCX¡BRDX¡BR8¡BR9 ¤§ÈÅܦ¨©I¥s MessageBoxA ªº¥|ӰѼơCRCX ¬O°T®§¤è¶ô©ÒÄݵøµ¡ªºµøµ¡±±¨î¥N½X¡A¬°¹s¡Aªí¥Ü¦¹°T®§¤è¶ô¨S¦³©ÒÄݵøµ¡¡C
RDX¡BR8 ³£¬O¦ì§}¡A¤À§O¬O¦L¦b°T®§¤è¶ô¤ºªº¦r¦ê¦ì§}¡A©M°T®§¤è¶ô¼ÐÃDÄæ¦r¦êªº¦ì§}¡C¦¹¨Ò¤¤¥Î¨âºØ¤£¦Pªº¤èªk¥hpºâ¦r¦ê¦ì§}¡A¦ý¬O¤]¥i¥H³£¥Î¡uMOV ·f°t OFFSET¡v¡A¤]¥i¥H³£¥Î¡uLEA¡v¡Aµ²ªG³£¬Û¦P¡C³Ì«á¤@ӰѼƦs©ó R9 ¤¤¡A¨Æ¹ê¤W¡A¤]¥i¥H¥Î¡uMOV R9D,MB_OK¡v¡A¦]¬°³Ì«á¤@Ó°Ñ¼Æ¸ê®ÆÃþ«¬¬OÂù¦r²Õ¡C
ExitProcess ¥u¦³¤@ӰѼơA¦s©ñ¦b RCX ùØ¡C«e±´£¹L¡A§Y¨Ï°Ñ¼Æ¥u¦³¤@Ó¡A¤]n«O¯d¥i¥H®e¯Ç¥|ӰѼƪº¼v¤lªÅ¶¡¡C¨º»ò¡A¦b©I¥s«e¦³¨S¦³°µ³o¥ó¨Æ©O¡Hµª®×¬O¦³ªº¡C«e±´£¹L¡A¥Dµ{¦¡¥²¶·t³d²M²z°ïÅ|¡C¦ý¬O¦b©I¥s§¹ MessageBoxA ¤§«á¡A¨Ã¨S¦³²M°£°ïÅ|¡A©Ò¥H³o®ÉÔªº RSP ¸ò¦b©I¥s MessageBoxA ¤§«e¤@¼Ë¡A¤]´N¬O»¡¤w¸g¦b«O¯d¤F¼v¤lªÅ¶¡¡A¦P®É RSP ¤]¤w¹ï»ô¸`¦ì§}¡C
©I¥s§¹ ExitProcess ¤§«á¡Aµ{¦¡¤w¸gµ²§ô¡A°ïÅ|¥H¤Î©Ò¦³¸ê·½³£¤w³Q§@·~¨t²Î¦¬¦^¡A¤]´N¨S¦³²M²z°ïÅ|ªº°ÝÃD¤F¡C
¥»³¹¨ì¦¹µ²§ô¡A¤U¤@³¹·|¥Î§ó²³æªº¤èªk«·s¼¶¼g FIRST_WND1¡C
¦b·L³nªº¤å¥ó¤¤¥Î¤¶±©w¸q»y¨¥¡]interface definition language¡A²ºÙ IDL¡^¨Ó´yz°Ñ¼Æ¶È´£¨Ñ¸ê®Æ©Î±µ¦¬¸ê®Æ¡A¦³®É¤]¥Îì©l½X¼Ðµù»y¨¥¡]source annotation language¡A²ºÙ SAL¡^¡A¨âªÌ³£¬O´yz Win64 API ©Ò»Ýªº°Ñ¼Æ¥Î³~¡A¬O¶È¶È¥Î©ó´£¨Ñ¸ê®Æµ¹ Win64 API¡AÁÙ¬O¤]¥i¥H±µ¦¬¸ê®Æ¡C®t§O¦b©ó¡A«eªÌ¥H¤@¹ï¤¤¬A¸¹¥]¦í¡A¬Oµ¹¤HÃþ¾\Ūªº¡F«áªÌ¬O«e«á¥H©³½u§¨¦í¡A³q±`¬O C/C¡Ï¡Ï ªº .h ¤¤¡A¬Oµ¹½s;¹³B²zªº¡C¦Ü©ó±`¨£ªº IDL ¦³©³¤U´XºØ¡G
| IDL | SAL | ·N¸q |
| [in] | _In_ | ¥Dµ{¦¡¡]©Î©I¥sªÌ¡Acaller¡^´£¨Ñ°Ñ¼Æ¡AWin64 API ¤£·|ק惡°Ñ¼Æ |
| [out] | _Out_ | ¥Dµ{¦¡¶·´£¨Ñ¬YÓ¦ì§}¦s©ó°Ñ¼Æ¤¤¡AWin64 API ·|§â¸ê®Æ¼g¶i¸Ó¦ì§}©Ò«üªº°O¾ÐÅ餺 |
| [optional] | _Opt_ | ¦¹°Ñ¼Æ¥i¥H¬O 0¡A¸Ó Win64 API ·|¦Û¦æ³B²z³oºØ±¡ªp¡CY¦¹°Ñ¼Æ¬°¹s¡A¤]¤£¯à¬Ù²¤¤£¼g |
| [reserved] | _Reserved_ | ¦¹°Ñ¼Æ¥Ø«e¨S¨Ï¥Î¡A¥²¶·¬O 0 |
TYPEDEF ¬O¥Î¨Ó«Å§i·sªº¸ê®ÆÃþ«¬¡A¨ä»yªk¬O¡G
·s¸ê®ÆÃþ«¬ TYPEDEF ì¸ê®ÆÃþ«¬
³o¼Ë´N¯à²£¥Í¤@Ó·sªº¸ê®ÆÃþ«¬¡A¦¹¸ê®ÆÃþ«¬»P¡uì¸ê®ÆÃþ«¬¡v¤@¼Ë¡C¨Ò¦p¦b MASM64 SDK ùØ¡A¦b¡umasm64\include64\win64.inc¡v¤¤¦³©³¤Uªº«Å§i¡G
UINT TYPEDEF DWORD
⁝
LPCSTR TYPEDEF QWORD
HWND TYPEDEF QWORD
³o¤T¦æ«Å§i¤F¤TÓ·sªº¸ê®ÆÃþ«¬¡GUINT¡BLPCSTR¡BHWND¡A¨ä¹ê²Ä¤@Ó´N»P DWORD ¤@¼Ë¡A«á¨âÓ»P QWORD ¤@¼Ë¡C³\¦h¤H¡A¥]§t¤p¤ì°¸¦Û¤v¡A¦bªì¾Ç¶¥¬q¥i¯à·|¥H¬°¡A¬JµM¤@¼Ë¡A¨º¬°¤°»òÁÙn«Å§i·sªº¸ê®ÆÃþ«¬¡A³o¤£¬O¦h¦¹¤@Á|¶Ü¡H¥ý¬Ý§¹©³¤U¹ï³o¤TÓ·sªº¸ê®ÆÃþ«¬ªº¸ÑÄÀ¡A¥i¯à´NÁA¸Ñ¤F¡C
⑴¡BUINT ¥Nªíªø«×¬°Âù¦r²Õ¡]DWORD¡^ªº¸ê®ÆÃþ«¬¡Aì¤å¬O unsigned integer¡A½Ķ¦¨¤¤¤å¬OµL¸¹¾ã¼Æªº·N«ä¡A¥i¥H¬O¥¿¾ã¼Æ©Î¬O¹s¡A¦ý¤£¯à¬Ot¾ã¼Æ¡C
⑵¡BLPCSTR ¥Nªíªø«×¬°¥|¦r²Õ¡]QWORD¡^ªº¸ê®ÆÃþ«¬¡Aì¤å¬O long pointer to constant string¡A¥Î C/C¡Ï¡Ï ªº»¡ªk¡ALPCSTR ¬O 64 ¦ì¤¸«ü¼Ð¡A«ü¦V ANSI ±`¼Æ¦r¦ê¡F¦pªG¥Î²Õ¦X»y¨¥ªº»¡ªk¬O¡ALPCSTR ¥Nªí¬YÓ¦ì§}¡A¦Ó¦¹¦ì§}¤Wªº°O¾ÐÅéÀx¦sªº¬O ANSI ±`¼Æ¦r¦ê¡]±`¼Æ¦r¦ê¬O«ü¦¹¦r¦ê¤£¯à×§ï¡A¥u¯àŪ¨ú¡^¡C
⑶¡BHWND ¥Nªíªø«×¬°¥|¦r²Õªº¸ê®ÆÃþ«¬¡Aì¤å¬O handle to a window¡A½Ķ¦¨¤¤¤å¬Oµøµ¡±±¨î¥N½X¡C
²Õ¦X»y¨¥ªº¸ê®ÆÃþ«¬¤£¦h¡A¥u¦³ BYTE¡BWORD¡K¡Kµ¥´XºØ¡A¥¦Ì¥u¯àªí¥Ü´XӦ줸²Õ¡A¨Ã¨S¦³¨ä¥L·N¸q¡C¦pªG¥Î³o¨Ç·sªº¸ê®ÆÃþ«¬¡A¥i¥H¼W¥[¥iŪ©Ê¡CÅýµ{¦¡³]p®v¤@²´´N¯àª¾¹D¡A³oÓÅܼƪº§@¥Î¬O¤°»ò¡A¬O¦ì§}¡B±±¨î¥N½X¡AÁÙ¬OµL¸¹¼Æ¡K¡K¡C¨ä¦¸¡AWindows §@·~¨t²Î¥»´N«Ü½ÆÂø¡A¦³³\¦hºØ¸ê®ÆÃþ«¬¡AMASM ¦³³o¼Ëªº¥\¯à«ê¦n§ó¯à»P Windows ·f°t¡C³o´N¬O TYPEDEF ¦s¦bªº·N¸q¡C
³Ì«áÁÙ¦³¨â¥ó¨ÆÈ±o¤@´£¡C²Ä¤@¥ó¬O¡AHWND ·N«ä¬Oµøµ¡±±¨î¥N½X¡C§ÚÌÁA¸Ñµøµ¡¡A´N¬O¦b®à±¤W¤j¤j¤p¤pªºªø¤è«¬°Ï°ì¡A¨º¤°»ò¬O±±¨î¥N½X¡]handle¡^©O¡H¦b Windows ¨t²Î¹B§@®É¥²©w·|²£¥Í³\¦hµøµ¡¡AWindows ´N·|µ¹¨CÓµøµ¡¤@Ó¿W¤@µL¤Gªº±±¨î¥N½X¡A³o¨Ç±±¨î¥N½X³£¬O¥|¦r²ÕªºµL¸¹¼Æ¡AÀ³¥Îµ{¦¡©Î§@·~¨t²Î´N¥Î³oÓ±±¨î¥N½X¥h³B²z©Î¾Þ±±¥¦¡C¨Ò¦pnÃö³¬¬YÓµøµ¡¡A´N±o§ânÃö³¬ªºµøµ¡¤§µøµ¡±±¨î¥N½X§@¬°°Ñ¼Æ¡A©I¥sÃö³¬µøµ¡ªº Win64 API §Y¥i¡C
³oºØ±¡§Î¦³ÂIÃþ¦ü°Ñ¥[¤j¾Ç¤J¾Ç¦Ò¸Õ¡A¸Õ°È©eû·|µ¹¨CӦҥͤ@Ó¿W¤@µL¤Gªºã¦ÒÃÒ¸¹½X¡A¦Ó«á¦Ò¥Í¥h¸Õ³õÀ³¸Õ¡B¬dº]¡B©ñº]¡B¤Àµo³£¥H³oÓ¸¹½X¥N´À©m¦W¡CWindows §@·~¨t²Î¸Ìªº±±¨î¥N½X¡A´N¹³¬O¦Ò¥Íªºã¦ÒÃÒ¸¹½X¤@¼Ë¡A¨C·í¨t²În¹ïµøµ¡°µ¤°»ò¾Þ§@®É¡A´N±o«ü©wµøµ¡±±¨î¥N½X¡AµM«á©I¥s¬ÛÀ³ªº Win64 API¡A§Y¥i§¹¦¨¡C
²Ä¤G¥ó¬O¦b win64.inc «Å§iªº·s¸ê®ÆÃþ«¬¤¤¡A¨£¤Uªí¡G
| ·sªº¸ê®ÆÃþ«¬ | ì¸ê®ÆÃþ«¬ | ì¤å | ·N¸q |
| LPSTR | QWORD | long pointer to string | ¥i¼gªº ANSI ¦r¤¸¦r¦ê«ü¼Ð |
| LPCSTR | QWORD | long pointer to constant string | °ßŪªº ANSI ¦r¤¸¦r¦ê«ü¼Ð |
| LPWSTR | QWORD | long pointer to wide-character string | ¥i¼gªº¼e¦r¤¸¦r¦ê«ü¼Ð |
| LPCWSTR | QWORD | long pointer to constant wide-character string | °ßŪªº¼e¦r¤¸¦r¦ê«ü¼Ð |
| HANDLE | QWORD | handle | ±±¨î¥N½X |
| BOOL | DWORD | boolean | ¥¬ªLÈ |
| VOID | QWORD | void | ³q¥ÎÃþ«¬ |