²Ä¤G³¹¡@²Ä¤@­Ó Win64 µ{¦¡¡]¤G¡^

±µµÛ¤W¤@³¹¡A¥ý¤¶²Ð Windows API ªº¯S©Ê¡A¦A¨Ó¤¶²Ð¤W¤@³¹ FIRST.EXE ©Ò©I¥sªº MessageBox »P ExitProcess ¨â­Ó API¡C


©I¥s Windows API «e¸Ó¦³ªºª¾ÃÑ

¨â®M Windows API

²´¦yªºÅªªÌ¥i¯à·|µo²{¡A¦b FIRST.ASM ¤¤ªº²Ä¤G¦æ¬O¡uEXTRN MessageBoxA:PROC¡v¡B²Ä¤G¤Q¤@¦æ¬O¡ucall MessageBoxA¡v¡A¦Ó¥B¤W¤@³¹µ²§À¤~»¡­n¤¶²Ð MessageBoxA¡A¦ý¥»³¹²Ä¤@¦æ«ç»ò´NÅܦ¨¤F¡uMessageBox¡v¡A¨ä¤¤ªº¡uA¡v«ç»ò¤£¨£¤F¡H²ö«D¬O¤p¤ì°¸¥´¿ù¦r¤F¡C

¨ä¹ê¤£µM¡C¤Z¬O²o¯A¨ì»P¦r¤¸¦³Ãöªº Windows API ³£¦³¨â®M¡A¤@®M¬O¥Î¨Ó³B²z ANSI ½s½Xªº¦r¦ê¡A¦b¨ä¦WºÙ«á­±·|¦h¤F¡uA¡v¦r¤¸¡F¥t¤@®M¥Î¨Ó³B²z¥H¸U°ê½X ( UNICODE ) ½s½Xªº¦r¦ê¡A¨ä¦WºÙ«á­±·|¦h¤F¡uW¡v¦r¤¸ ( W ¥Nªí¼e¦r¤¸ªº·N«ä¡A¥Î¨â­Ó©Î¨â­Ó¥H¤Wªº¦ì¤¸²Õ¨Óªí¥Ü¤@­Ó¦r¤¸¡A´NºÙ¬°¼e¦r¤¸ )¡C¤£²o¯A¨ì¦r¤¸ªº API¡Aµ²§À´N¨S¦³¡uA¡v©Î¡uW¡v¡C

¦n§a¡AMessgaeBoxA ©Î MessageBoxW ªº¤À§O¬O¦bµøµ¡¤ºªº¦r¦ê¤Î¼ÐÃD¦r¦ê¡A·íµM²o¯A¨ì¦r¦ê¡A©Ò¥H¦³¨â­Óª©¥»¡A³o¨S¦³°ÝÃD¡C¨º«ç»ò¤S¦h¥X¤@­Ó MessageBox ©O¡H³o¸ò¥]§tÀɦ³Ãö¡C

¦b²Ä¤@³¹¤Î³o¤@³¹¸Ìªº FIRST.ASM ¨Ã¥¼¤Þ¤J¥]§tÀÉ¡A°£¤F¦]¬°³o­Óµ{¦¡«Ü³æ¯Â¥~¡A¤p¤ì°¸§Æ±æ¯à´î¤ÖÁôÂ꺲Ӹ`¡A¤]¬O¬°¤F¯à¸ÑÄÀ±o§ó¸ÔºÉ¡C¦ý¬O©¹«á§Ú­Ì¼¶¼gµ{¦¡¡A¥²©w·|±N¥]§tÀɤޤJ¡A³o¥i¥H´î¤Ö«D±`«D±`¦h·Ðº¾ªº¤u§@¡C¥]§tÀɤº¥²·|¦³¥H¤Uªº«Å§i¡G

IFDEF __UNICODE__
  MessageBox equ <MessageBoxW>
ENDIF
IFNDEF __UNICODE__
  MessageBox equ <MessageBoxA>
ENDIF

³o¬qµ{¦¡¸Ìªº

IFDEF name
  ±Ô­z
ENDIF

IFNDEF name
  ±Ô­z
ENDIF

¨ä¹ê¬O¨â­Ó°²«ü¥O¡C«eªÌ¬O»¡¡A¦pªG¤w¸g©w¸q¤F name ªº¸Ü¡A²ÕĶ¾¹´N·|²ÕĶ IFDEF »P ENDIF ¤§¶¡ªº±Ô­z ( DEF ¬O¡u©w¸q¤F¡vªº·N«ä )¡C«áªÌ«h¬O¡A¦pªG¥¼©w¸q name ªº¸Ü¡A²ÕĶ¾¹´N·|²ÕĶ IFNDEF »P ENDIF ¤§¶¡ªº±Ô­z ( NDEF ¬O¡u¥¼©w¸q¡vªº·N«ä¡AN À³¸Ó¬O not ªº·N«ä )¡C

©Ò¥H­è¤~´£¨ì¥]§tÀɤº¥²¦³ªº±Ô­z¬O»¡¡A¦pªG¤w©w¸q¤F¡u__UNICODE__¡vÅܼơA¨º»ò¡uMessageBox¡v´Nµ¥©ó¡uMessageBoxW¡v¡F¦pªG¥¼©w¸q¡u__UNICODE__¡vÅܼơA¨º»ò¡uMessageBox¡v´Nµ¥©ó¡uMessageBoxA¡v¡C¥Ñ¦¹¥iª¾¡A¥u­n¦bµ{¦¡°_ÀY¦³¡u__UNICODE__ EQU 1¡v´N¥Nªí¤w©w¸q¡u__UNICODE__¡vÅܼơA²ÕĶ¾¹·|¨Ï¥Î¼e¦r¤¸ª©ªº API¡F­YµL¡A´N¨Ï¥Î ANSI ª©ªº API¡C¤£ºÞ¬O­þ¤@ºØ¡A¥u¦³¤å¦rªº½s½X¤è¦¡¤£¦P¨ä¾l§¡¬Û¦P¡A¦b·L³nµo§Gªº¤å¥ó¤¤³£¥H MessageBox ¨ÓºÙ©I¡C¨ä¥L²o¯A¨ì¦r¤¸ªº API ¤]³£¦p¦¹¡C

³o¸Ì·L³n¥Î ANSI ½s½XªºÁ¿ªk¨ä¹ê«Ü©_©Ç¡A¦]¬° ANSI ¬O American National Standards Institute ªºÁY¼g¡A¤¤¤å¬°¡u¬ü°ê°ê®a¼Ð·Ç¨ó·|¡v¡A¬O¤@­Ó²Õ´¨Ã«D½s½X¤è¦¡¡C¥¦©Ò¨î©wªº ASCII ¦r¤¸«á¨Ó³Q·L³nÂX¥R¦¨ Windows-1252¡AWindows-1252 ¬O©Ô¤B¦r¥Àªº¦r¤¸½s½X¡A¥D­n¥Î©ó­^»y¡B·Rº¸Äõ»y¡B¸q¤j§Q»yµ¥¡A¦¨¬° Windows ªº¹w³]½s½X¡C¤j·§¬O¦]¬°³o­ì¦]¡A©Ò¥H¤~¥Î¡uANSI¡v§a¡A¦ý¤p¤ì°¸¦³®É¤]ºÙ¤§¬° ASCII ½s½X¡C

¦pªG¦r¦ê¥]§t¤¤¤å¡A¥B¥H Big-5 ½s½X¡A¨º»ò´N­n©I¥s ANSI ª©ªº API¡C³o¬O¦]¬° Big-5 ½s½X¬O§Q¥Î Windows-1252 ¤¤ªº¡uªÅ»Ø¡v§¹¦¨ªº¡A©Ò¥H­n©I¥s ANSI ª©ªº API¡C

¥t¤@ºØ¡u¼e¡v¦r¤¸ª©¥»ªºÁ¿ªk¤]¤@¼Ë©_©Ç¡A¦p¦P«e­z¡u¼e¦r¤¸ªº·N«ä¡A¥Î¨â­Ó©Î¨â­Ó¥H¤Wªº¦ì¤¸²Õ¨Óªí¥Ü¤@­Ó¦r¤¸¡v¡A¸U°ê½X¨ä¹ê¥u¬O¨ä¤¤¤@ºØ¡C¦AªÌ¡A¸U°ê½Xªº½s½X¤è¦¡¤]¦³³\¦hºØ¡A±`¨£ªº´N¦³ UTF-8 ©M UTF-16¡C¦Ó¼e¦r¤¸ª©¥»ªº Windows API ¬O±Ä¥Î UTF-16 ½s½X¤è¦¡¡C

x64 ©I¥sºD¨Ò ( x64 Calling Convention¡A©ÎºÙ©I¥s¨ó©w )

¥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«h»¡Ãþ¦ü FASTCALL¡A¦³¨Ç¬Æ¦Ü»¡ FASTCALL ¨Ã¨S¦³ÄY®æªº©w¸q¡A¤p¤ì°¸¤]¤£ª¾±Ä«H­þ¤@ºØ¡A©Î³\´NºÙ¬°¡ux64 ©I¥sºD¨Ò¡v©Î¬O¡uWin64 ©I¥sºD¨Ò¡v¡C¤£½×¦p¦ó¡AWin64 API ¥²¶·¿í¦uªº©I¥sºD¨Ò¡A¦³¤U¦C³W«h¡G

  1. ¥Dµ{¦¡§â«e¥|­Ó°Ñ¼Æ¨Ì§Ç¦s¤J RCX¡BRDX¡BR8¡BR9 ¤¤¶Çµ¹°Æµ{¦¡¡A¦pªG¶W¹L¥|­Ó¡A¦h¥X¨Óªº°Ñ¼Æ¸g¥Ñ°ïÅ|¶Çµ¹°Æµ{¦¡¡C
  2. ¥Dµ{¦¡­n¦b°ïÅ|¤¤¹w¯d¦s©ñ°Ñ¼ÆªºªÅ¶¡¡A¦pªG°Ñ¼Æ¤Ö©ó¥|­Ó¡A¤]­n¹w¯d¥|­Ó¡A³o¥|­Ó°Ñ¼ÆªºªÅ¶¡ºÙ¬°¡u¼v¤lªÅ¶¡¡v¡C
  3. ¦b°õ¦æ CALL ¤§«e¡ARSP ©Ò«üªº¦ì§}¥²¶·¹ï»ô¤@­Ó¸`¡C
  4. °Æµ{¦¡µ²§ô®É¡A¦^¶Ç­È©ñ¦b RAX ¸Ì¡A¦Aªð¦^¥Dµ{¦¡¡C
  5. ¥Ñ¥Dµ{¦¡²M²z°ïÅ|¡C
  6. °Æµ{¦¡¤¤¥i¥H¦Û¥Ñ¨Ï¥Î©Î§ïÅÜ RAX¡BRCX¡BRDX¡BR8¡BR9¡BR10¡BR11 ¦@¤C­Ó³q¥Î¼È¦s¾¹¤§¤º®eºÙ¬° volatile¡A¨ä¥L³q¥Î¼È¦s¾¹ ( RBX¡BRBP¡BRSI¡BRDI¡BRSP¡BR12¡BR13¡BR14¡BR15 ¦@¤E­Ó ) ¬°¨t²Î©Ò¨Ï¥Î¡A¤£¥i»´©ö§ïÅܨ䤺®e¡AºÙ¬° nonolatile¡C
  7. ¦b°Æµ{¦¡¤¤¡ARBP §@¬°¦s¨ú°Ñ¼Æ¥H¤Î°Ï°ìÅܼƪº°ò·Ç¡C²Ä¤@­Ó°Ñ¼Æ¬O [rbp¡Ï10h]¡B²Ä¤G­Ó°Ñ¼Æ¬O [rbp¡Ï18h¡v¡B²Ä¤T­Ó°Ñ¼Æ¬O [rbp¡Ï20h¡v¡K¡K¡C

²Ä 3 ÂI¦³¶i¤@¨B»¡©úªº¥²­n¡C¤@­Ó¸` ( paragraph ) ªº¤j¤p¬O 16 ­Ó¦ì¤¸²Õ¡A©Ò¥H²Ä 3 ÂIªº·N«ä´N¬O¡A¦b°õ¦æ CALL ¤§«e¡ARSP ¤§­È¥²¶·¬O¹ï»ô 16 ­Ó¦ì¤¸²Õ¡F§ó¸Ô²Óªº»¡¡A´N¬O RSP ­n¯à³Q 16 ¾ã°£¡C³Ì²³æ§PÂ_ªº¤è¦¡¡A§â RSP Åܦ¨¤Q¤»¶i¦ì®É ( ³q±`¦b°£¿ù¾¹¤¤³£¬O¥H¤Q¤»¶i¦ìªí¥Ü )¡A³Ì¥kÃ䨺¦ì¼Æ¥²¶·¬O¹s ( ¤]¥i¥H§â³o­Ó¼Æ¬Ý¦¨¬O¤Q¤»¶i¦ìªº­Ó¦ì¼Æ¡A´N¹³¤Q¶i¦ìªº 1234¡A­Ó¦ì¼Æ¬O 4 ¤@¼Ë )¡C¦pªG¤£¬Oªº¸Ü¡A¨º»ò¦b°õ¦æ CALL ¤§«e¥²¶·¦Û¦æ½Õ¾ã¡A¤èªk¤]«Ü²³æ¡A¨Ï RSP ´î¥h¤K´N¦æ¡C§A¥i¯à·|°Ý¡A¦pªG¨S¦³¹ï»ô 16 ­Ó¦ì¤¸²Õ·|«ç¼Ë¡Hµª®×¤]«Ü²³æ¡Aµ{¦¡·|·í±¼¡I

ÁöµM²Ä 6 ÂI´£¨ì¡A¤£­n§ïÅÜ RBX¡BRBP¡BRSI µ¥¼È¦s¾¹¡A¦ý¨Ã«Dµw©Ê³W©w§¹¥þ¤£¯à¨Ï¥Î¡C¥u­n¨Æ¥ý±N¨äÀx¦s°_¨Ó¡A´N¯à¦Û¥Ñ¨Ï¥Î³o¨Ç¼È¦s¾¹¡Aµ¥­n©I¥s Windows API «e¦A«ì´_¥¦­Ì¤§«eªº¼Æ­È¡A¤]¬O¥i¥Hªº¡C¤£¹L¨ä¤¤ªº RBP ¸û¬°¯S§O¡A¯à¤£¥Î´N¤£¥Î¡C

©³¤U¤p¤ì°¸´N­n¤¶²Ð MessageBox »P ExitProcess¡C

MessageBox API

MessageBox ¬O³\¦h Windows API ¤¤ªº¨ä¤¤¤@­Ó¡A¥¦ªº¥\¯à¬O¦b¿Ã¹õ¤W«Ø¥ß¤@­Óµøµ¡¨ÃÅã²{¥X¨Ó¡Aµøµ¡¤º¦³¤@¬q¤å¦r¤Î¹Ï¥Ü¡A¤]¦³«ö¶s¥i¨Ñ¨Ï¥ÎªÌÃö³¬¦¹µøµ¡¡C©I¥s MessageBox ©Ò»Ý­nªº°Ñ¼Æ¦³¥|­Ó¡A¥i¥H¬d¾\ MSDN ¡A±o¨ì¤U­±ªºµ²ªG¡G

int MessageBox(
  HWND hWnd,            // handle of owner window
  LPCTSTR lpText,       // address of text in message box
  LPCTSTR lpCaption,    // address of title of message box  
  UINT uType            // style of message box
);

¤W­±¨ç¦¡ªº¼gªk¬O¥H C »y¨¥ªº¤è¦¡ªí²{ªº¡A¥i¯à·|¦]¬° MSDN ª©¥»¤£¦P¦Ó²¤·L¤£¦P¡A¤£¼vÅT¤£¤j¡C¡uint MessageBox¡v¤¤ªº int ªí¥Ü¦^¶Ç­Èªº¸ê®ÆÃþ«¬¬°¾ã¼Æ ( integer )¡AWindows API ªº¦^¶Ç­È³£¦s©ñ¦b RAX ¼È¦s¾¹ùØ¡C±µ¤U¨Ó¬O¨ç¦¡¦WºÙ¡AMessageBox¡A­nª`·N¤j¤p¼g¡C±µ¤U¨Ó¡A¦b¡u( )¡v¤º¦³¥|­Ó°Ñ¼Æ¡A³o¥|­Ó°Ñ¼Æ³£¬O¥Î¡u¸ê®ÆÃþ«¬¡v©M¡u°Ñ¼Æ¦WºÙ¡v¬°¤@²Õªº¤è¦¡ªí¥Ü¡C

¨Ò¦p²Ä¤@­Ó°Ñ¼Æªº¸ê®ÆÃþ«¬¬O¡uHWND¡v¡A¦WºÙ¬O hWnd¡C¡uHWND¡v¬O¤@ºØ¸ê®ÆÃþ«¬¡A¦b¥]§tÀɮפº¡A¥²¦³¤@±ø«Å§i¡uHWND TYPEDEF QWORD¡v¡A¤]´N¬O»¡¡uHWND¡v¨ä¹ê´N¬O¡uQWORD¡v¡C

©Ò¥H²Ä¤@­Ó°Ñ¼Æ¡AhWnd¡Aªº¸ê®ÆÃþ«¬¬O¥|¦r²Õªº¾ã¼Æ¡A¨º»ò³o­Ó¾ã¼Æ¦³¤°»ò·N¸q©O¡H¬d¾\ MSDN ±oª¾¡AhWnd ¬O«ü­þ¤@­Óµøµ¡©I¥s¤F MessageBox¡A¤]¥i¥H·Q¦¨ MessageBox ÄÝ©ó­þ­Óµøµ¡¡C¦pªG¬O 0 ªº¸Ü¡Aªí¥Ü MessageBox ¤£ÄÝ©ó¥ô¦óµøµ¡¡C¦b Windows §@·~¨t²ÎùØ¡A¨C­Óµøµ¡³£¦³¤@­Ó¸¹½X¡AWindows ¥Î³o­Ó¸¹½X³B²zµøµ¡ªº©Ò¦³°Ê§@¡A¨Ò¦p¨Ï¥ÎªÌ§âµøµ¡©ñ¤j¡BÁY¤p¡B²¾°Ê¦ì¸m¡K¡Kµ¥µ¥¡AWindows ´N·|¥H³o­Ó¸¹½X³B²z¬Û¹ïÀ³ªº°Ê§@¡A³o­Óªí¥Üµøµ¡ªº¸¹½X¬O¥H¤@­Ó 64 ¦ì¤¸ªº¥¿¾ã¼Æ¡AºÙ¤§¬°µøµ¡¥N½X ( handle of window¡A¥»¸q¬O¾Þ§@µøµ¡¡A¦ý½Ķµ{¦¡µ¡¥N½X¤ñ¸û³q¶¶§a )¡A¨C­Óµøµ¡ªºµøµ¡¥N½X³£¬O¿W¤@µL¤Gªº¡C±q³oùØ¡A¤]¥i¥H²q¥X¨Ó¡AhWnd ªº h ¬O handle ªº·N«ä¡AWnd ¬Oµøµ¡ªº·N«ä¡C

©¹«áÁÙ·|¹J¨ì³\¦h¥N½X¡A­^¤å³£ºÙ¬° handle¡A¦b Win64 ¸Ì¡A³£¬Oªø 64 ¦ì¤¸ªº¥¿¾ã¼Æ¡C¹ï§Ú­Ìªºµ{¦¡¦Ó¨¥¡A¥u»Ýª¾¹D¥¦¥Nªí¬Æ»ò¡A¨ä¼Æ­È¨Ã¤£­«­n¡A¦Ü©ó¦p¦ó³B²z¥¦³q±`³£¬O¥æ¥Ñ Win64 API ¥h°µ¡F¾¨ºÞ¦p¦¹¡AWindows §@·~¨t²Î«o¬O¨Ì¾Ú³o¨Ç¥N½X¥hºÞ²z¥¦­Ì¡C±`¨£ªº¥N½X¦³µøµ¡¥N½X¡BÀÉ®×¥N½X¡B¼Ò²Õ¥N½X¡B¹Ï¥Ü¥N½X¡K¡Kµ¥µ¥¡C

MessageBox ³Ñ¤U°Ñ¼Æªº¸ê®ÆÃþ«¬ÁÙ¦³ LPCTSTR ©M UINT¡A¨ä¹ê¨Ì§Ç´N¬O QWORD »P DWORD ªº·N«ä¡C§A¥i¯à·|°Ý¡A¬°¦ó­n³o»ò³Â·Ð¡A³]¥ß·sªº¸ê®ÆÃþ«¬¡Aµ²ªG«o¸ò­ì¨Óªº¤@¼Ë¡H³o¬O¦]¬°¦b Windows ¨t²ÎùØ¡A¥Î LPCTSTR ¯à°÷«Ü®e©öªº±q¦r­±¤W´Nª¾¹D¡A¦¹Ãþ«¬ªº¸ê®Æ¬O«ü¦V¸U°ê½X±`¼Æ¦r¦êªº»·µ{«ü¼Ð ( L ¥Nªí long¡A»·µ{¤§·N¡FP ¥Nªí pointer¡A«ü¼Ð¤§·N¡FC ¥Nªí constant¡A±`¼Æ¤§·N¡FT ¥Nªí _T¡A¬O³B²z¸U°ê½X¦r¦êªº¥¨¶°¡FSTR ¥Nªí string¡A¦r¦êªº·N«ä )¡CUINT ¬O«üµL¸¹ªº¾ã¼Æ ( unsigned integer )¡C

²Ä¤G­Ó°Ñ¼Æ¡AlpText¡A­nÅã¥Ü¦bµøµ¡ùتº¦r¦ê¦ì§}¡A¦Ó¦¹¦r¦ê¶·¥H¡u0¡v¬°µ²§À¡C¦b²Õ¦X»y¨¥ùØ¡A¦ì§}´N¬O C »y¨¥ùتº«ü¼Ð¡C

²Ä¤T­Ó°Ñ¼Æ¬O lpCaption¡A¬Oµøµ¡¼ÐÃDÄ檺¦r¦ê¦ì§}¡A¦Ó¦¹¦r¦ê¶·¥H¡u0¡v¬°µ²§À¡C

²Ä¥|­Ó°Ñ¼Æ¬O uType¡AÅã¥Ü©óµøµ¡ªº«ö¶s§Î¦¡©Î¹Ï¥Ü¡A±`¥Îªº¼Æ­È¦p¤Uªí¡G

uType ¼Æ­È·N¸q
MB_OK0h ¥uÅã¥Ü¡u½T©w¡v«ö¶s
MB_OKCANCEL1h Åã¥Ü¡u½T©w¡v»P¡u¨ú®ø¡v¨â­Ó«ö¶s
MB_ABORTRETRYIGNORE2h Åã¥Ü¡u²×¤î¡v¡B¡u­«¸Õ¡v¡B¡u²¤¹L¡v¤T­Ó«ö¶s
MB_YESNOCANCEL3h Åã¥Ü¡u¬O¡v¡B¡u§_¡v¡B¡u¨ú®ø¡v¤T­Ó«ö¶s
MB_YESNO4h Åã¥Ü¡u¬O¡v¡B¡u§_¡v¨â­Ó«ö¶s
MB_RETRYCANCEL5h Åã¥Ü¡u­«¸Õ¡v¡B¡u¨ú®ø¡v¨â­Ó«ö¶s
MB_CANCELTRYCONTINUE6h Åã¥Ü¡u¨ú®ø¡v¡B¡u­«¸Õ¡v¡B¡uÄ~Äò¡v¤T­Ó«ö¶s

¸ÑÄÀ§¹±q MSDN ¸Ì¬d¨ìªº Windows API ¤§«á¡A±N¨ä§ï¼g¦¨²Õ¦X»y¨¥ªº¨âºØ¼Ë¤l¡G

invoke  MessageBox,hWnd,lpText,lpCaption,uType
©Î
invoke  Message,\
        hWnd,\          ; handle of owner window
        lpText,\        ; address of text in message box
        lpCaption,\     ; address of title of message box
        uType           ; style of message box

²Ä¤@ºØ¬O¶È¼g¤@¦æ¡A¸û¬°Â²³æ¡A¦ý­Y°Ñ¼Æ¦h®É¥iŪ©Ê¸û®t¡C²Ä¤GºØ¬O§â¤@­Ó°Ñ¼Æ¦û¥Î¤@¦æ¡A¦û¥Î½g´T¤j¡A¦ý¥iŪ©Ê¸û¦n¡C¨âºØ¤è¦¡²ÕĶµ²ªG³£¤@¼Ë¡A¨S¦³®t§O¡C

²Ä¤GºØ¼gªkªº²Ä¤@¦æ¬O©I¥sªº Windows API ¦WºÙ¡AMessageBox¡C±µµÛªº¥|¦æ´N¬O¥|­Ó°Ñ¼Æ¡A¨C¤@¦æ³Ì«á­±¦³³o­Ó°Ñ¼Æªºµù¸Ñ¡Aµù¸Ñ«eªº¡u\¡vºÙ¬°¡u³sÄò¦r¤¸¡v¡A¥¦¨Ï²ÕĶ¾¹§â¤U¤@¦æ¬Ý¦¨¬O³s±µ¦b³o¤@¦æ¤§«á¡C³oºØ±¡§Î¦h¥Î¦b¡uinvoke¡v°²«ü¥O¤W¡A¤×¨ä¬O©I¥sªº°Ñ¼Æ«Ü¦h®É¡A©¹©¹·|¤À¦¨¦n´X¦æ¼g¡A³o®É­Ô´N¬O¡u\¡v¬£¤W¥Î³õªº®É­Ô¤F¡C©¹«áªº Windows API ³£·|¥H²Õ¦X»y¨¥ªº§Î¦¡ ( ²Ä¤GºØ¼gªk ) ¤¶²Ð¡A²¦³º¤p¤ì°¸¤£¬O¦b°µ C »y¨¥±Ð¾Ç¡A¤]¬°¤F±N¨Ó¤è«K¬d¾\¡C

¤W­±ªº¨âºØ¼gªk¬O©¹«á¤Þ¤J¥]§tÀɮɪº¼gªk¡A¬O¤£¬O²³æ©úÁA¡H¨Æ¹ê¤W¡A¦b MASM64 ¤¤¡Ainvoke ¬O¤@­Ó¦b¥]§tÀɤºªº¥¨¶°«ü¥O¡F¦b UASM ¤¤¡Ainvoke ¤w¸g¼g¦b UASM64.EXE ²ÕĶ¾¹¤º¡A¦¨¬°°²«ü¥O¡Cinvoke ¯à§â«e¥|­Ó°Ñ¼Æ¦s©ñ¨ì¹ïÀ³ªº¼È¦s¾¹¸Ì¡A§â¶W¹L¥|­Óªº°Ñ¼Æ¦s©ñ¨ì°ïÅ|¸Ì¡AµM«á·|°õ¦æ CALL «ü¥O©I¥s Win64 API¡C

¦pªG¤£¥Î¥]§tÀÉ¡A´NÅܦ¨¤U­±ªºµ{¦¡½X¡A³o¤]¬O FIRST.ASM ªºµ{¦¡½X¡C²{¦b§A´Nª¾¹D¬°¦ó·|¦³³o¤­¦æ¤F¡A­ì¦]«Ü²³æ¡A¥¦­Ì³£¬O MessageBox ªº°Ñ¼Æ¡A¥²¶·¿í¦u x64 ©I¥sºD¨Ò¡A«e¥|­Ó°Ñ¼Æ¥Ñ¼È¦s¾¹¶Ç»¼¡C

        xor     rcx,rcx                 ; hWnd¡×0¡A¦s¤J RCX
        mov     rdx,OFFSET szText       ; RDX¡×szText ªº¦ì§}
        lea     r8,OFFSET szCaption     ; R8¡×szCaption ªº¦ì§}
        mov     r9,MB_OK                ; R9¡×MB_OK
        call    MessageVoxA

ExitProcess API

ExitProcess ¬Oµ²§ô Windows µ{¦¡®É©Ò¥Îªº API¡A¥¦·|§â±±¨îÅv¥æÁÙµ¹ Windows¡A¦P®É¤]¶Ç¦^¤@­Ó¼Æ­Èµ¹ Windows¡A¥i¥H¨Ñ¨ä¥Lµ{¦¡©Î Windows ¨Ï¥Î¡C¥¦ªº»yªk¬O¡G

C »y¨¥§Î¦¡¡G
VOID ExitProcess(
  UINT uExitCode
);

²Õ¦X»y¨¥§Î¦¡¡G
invoke  ExitProcess,\
        uExitCode       ; exit code for all threads

VOID ¥Nªí ExitProcess ¨S¦³¦^¶Ç­È¡C¼o¸Ü¡A°õ¦æ§¹ ExitProcess µ{¦¡´N¤w¸gµ²§ô¤F¡A±±¨îÅv¤]¤£·|¦^¨Ó­ì¥»ªºµ{¦¡¡A·íµM¨S¦³¦^¶Ç­È¡CExitProcess ¥u¦³¤@­Ó°Ñ¼Æ¡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

FIRST.ASM ªº²Ä¤G¤Q¤T¡B¤G¤Q¤­¦æ¬O¡G

        pop     rcx
        call    ExitProcess

¦b²Ä¤Q¤»¦æ¬O¡upush rcx¡v¡A¦¹¨è RCX ¬°¹s¡A¨ì¤F²Ä¤G¤Q¤T¦æ¡upop rcx¡v¡A©Ò¥H²Ä¤G¤Q¤T¦æ¨ä¹ê¬O§â¦b²Ä¤Q¤»¦æ±À¤J°ïÅ|ªº RCX ¨ú¦^¨Ó¡A°õ¦æ§¹«á RCX ¬°¹s¡C±µµÛ¬O©I¥s ExitProcess ´Nµ²§ôµ{¦¡¡A¦P®É±N¹s¦^¶Çµ¹¨t²Î¡C

«O¯d¼v¤lªÅ¶¡

²{¦b¦A¨ÓÀ˵ø¤U­±ªº main °Æµ{¦¡¡C²Ä¤Q¤­¡B²Ä¤Q¤C¡ã²Ä¤Q¤E¦æ¬O©I¥s MessageBoxA ªº¥|­Ó°Ñ¼Æ¡A¤À§O¦s©ñ¦b RCX¡BRDX¡BR8¡BR9 ¸Ì¡A²Ä¤G¤Q¤@¦æ¬O©I¥s MessageBoxA¡C²Ä¤Q¤­¦æ¨Ï RCX Åܬ°¹s¡A¦Ó«á·|©I¥s ExitProcess¡A¤]§Æ±æ§â¹s¶Ç¦^µ¹ Windows¡A©Ò¥H²Ä¤Q¤»¦æ§â³o­Ó¹s­È±À¤J°ïÅ|«O¦s°_¨Ó¡A¨ì¤F²Ä¤G¤Q¤T¦æ´N¥i¥H¦Û°ïÅ|¨ú¦^¨Ó¡A¨ì²Ä¤G¤Q¤­¦æ©I¥s ExitProcess §@¬°°Ñ¼Æ¨Ï¥Î¡C¨ì¦¹´X¥G©Ò¦³µ{¦¡³£¤w»¡©ú¹L¤F¡A³Ñ¤U²Ä¤G¤Q¡B²Ä¤G¤Q¤G¡B²Ä¤G¤Q¥|¦æ©|¥¼¸ÑÄÀ ( ¥H¥Õ¦â¦r¼Ð¥Ü )¡C

14
15
16
17
18
19
20
21
22
23
24
25
26
main    PROC
        xor     rcx,rcx
        push    rcx
        mov     rdx,OFFSET szText
        lea     r8,OFFSET szCaption
        mov     r9,MB_OK
        sub     rsp,20h
        call    MessageBoxA
        add     rsp,20h
        pop     rcx
        sub     rsp,28h
        call    ExitProcess
main    ENDP

³o¤T¦æ³£¬O§â RSP ¥[¤W¬Y¼Æ©Î´î¥h¬Y¼Æ¡A¥¦¸ò«O¯d¼v¤lªÅ¶¡»P RSP ¹ï»ô¸`¦ì§}¦³Ãö¡Cµ¥·|°lÂÜ FIRST.EXE ®É¦A¤@°_¸ÑÄÀ¡C


¥Î x64dbg °lÂÜ FIRST.EXE

¬°¤FÅý§Ú­Ì§óÁA¸Ñ FIRST.EXE ¹B§@±¡§Î¡A¤]¬°¤F±N¨Ó°£¿ù¡A¤p¤ì°¸Â²³æªº¤¶²Ð¦p¾Þ§@ x64dbg¡C¨Ì¾Ú²Ä¹s³¹°£¿ù¾¹ªº»¡©ú¦w¸Ë¦n x64dbg «á¡A¥H·Æ¹«¥ªÁä¦b¨ä¹Ï¥Ü¤WÂIÀ»¨â¦¸¡A°õ¦æ x64dbg¡CµM«á¦b¿ï³æ¤W¿ï¾ÜÀɮס÷¶}±Ò¡÷¤Á´«¨ì FIRST.EXE ©Ò¦b¤l¥Ø¿ý¡A¿ï¾Ü¥¦¡Aµe­±¦p¤U¡G ¤W¹Ï¤¤¡A³Ì¤W¤èªº¼ÐÃDÄ榳¡ufirst.exe¡v¡A¥Nªí¤w¸ü¤Jµ{¦¡¤F¡Cx64dbg ªºµe­±©M OllyDbg «Ü¹³¡A¤]¤À³Î¦¨´X­Ó¥D­nªºµøµ¡¡G①¤Ï²ÕĶ°Ï ( ÂŦâ®Ø )¡B②°T®§°Ï ( ¬õ¦â®Ø )¡B③¸ê®ÆÅã¥Ü°Ï ( ¾í¦â®Ø )¡B④¼È¦s¾¹°Ï ( µµ¦â®Ø )¡B⑤°ïÅ|°Ï¡C

²{¦b¦b¤Ï²ÕĶ°Ï¤ºÅã¥Üªºµ{¦¡¬OÄÝ©ó Windows ¨t²Î¤ºªºµ{¦¡¡A¨Ã¤£¬O§Ú­Ì©Ò¼¶¼gªº FIRST.EXE µ{¦¡¡A¦]¦¹±o¥ýÅã¥Ü§Ú­Ìªºµ{¦¡¤~¦æ¡C«ö¤UÁä½L¤Wªº¡uF9¡v§Ö±¶Áä¡]F9 ¬O°õ¦æªº·N«ä¡C¤]¥i¥H¥Î·Æ¹«ÂI¿ï¼ÐÃDÄæ¤U¤èªº¥D¿ï³æ¡u°£¿ù¡v¡÷¡u°õ¦æ¡v¡^¡A³o®É¤~¯u¥¿ªº¨ì¹F FIRST.EXE ªº¶i¤JÂI¡A¦p¤U¹Ï¡C¦pªG¨C¦¸¸ü¤Jµ{¦¡°£¿ù¡A³£­n­«·s°µ¤@¦¸´N«Ü³Â·Ð¡C¥i¥H¦b¥D¿ï³æ¤W¿ï¾Ü¡u¿ï¶µ¡v¡÷¡u°¾¦n³]©w¡v¡÷¡u¨Æ¥ó¡v­¶­±¡÷¶È¤Ä¿ï¡u¤J¤f¤¤Â_ÂI¡v¡A¨ä¾lªº¤Ä¿ï³£¨ú®ø¡AµM«á«ö¡uÀx¦s¡v§Y¥i¡C

¤U¹Ï¤¤¡Ax64dbg ¤w¸gÅã¥Ü FIRST.EXE µ{¦¡¤F¡G §Ú­Ì¥ý¬Ý¬Ý¤Ï²ÕĶ°Ï¡A³o­Ó°Ï°ì¤S¤À¦¨¤­Äæ¡C³Ì¥ªÃä¤@Äæ¡A¦³¤@­Ó­I´º¬°ÂŦ⪺¡uRIP¡v¦r¼Ë¡A¦P®É©µ¦ù¨ì«á­±´XÄæ¶Â¦â¡B¦Ç¦â¤Ï¥Õªº¡u´å¼Ð¡v¡A³o¨Ç§i¶D¨Ï¥ÎªÌ²{¦bµ{¦¡§Y±N°õ¦æ³o­Ó«ü¥O¡A¦ý©|¥¼°õ¦æ¡CRIP ¨ä¹ê¬O CPU ¸Ì­±ªº¯S®í¼È¦s¾¹¡AºÙ¬°«ü¥O«ü¼Ð¼È¦s¾¹ ( instruction pointer )¡A·í CPU ­n°õ¦æ«ü¥O®É¡A´N¨ì RIP ©Ò«üªº°O¾ÐÅé¦ì§}¥hŪ¨ú«ü¥O¡C¦¹¥~ RDX¡BR9 ³o¨â­Ó¼È¦s¾¹¤§­È ( ¹î¬Ý¼È¦s¾¹°Ïªº³o¨â­Ó¼È¦s¾¹ )¡A«ê¦n»P RIP ¤§­È³£¤@¼Ë¡A³£¬O¡u13F751000¡v¡C²Ä¤GÄæ¬Oµ{¦¡½Xªº¦ì§}¡C²Ä¤TÄæ¬O¾÷±ñ½X¡C²Ä¥|Äæ¬O x86 «ü¥O¡C²Ä¤­Äæ¬O³Æµù¡C

²Ä¤GÄæ¥þ³£¬O¦ì§}¡A§¡¥H¤Q¤»¶i¦ìªí¥Ü¡C¦pªG§A·Ó¤W­±¾Þ§@¡Aµ²ªG¦ì§}¤£¦P¡A³o«Ü¥¿±`¡CWindows ¶}¾÷¸ü¤JÅX°Êµ{¦¡ªº¦h¹è¡B¶}±ÒªA°Èµ{¦¡ªº¦h¹è¡B·í«e°õ¦æµ{¦¡ªº¦h¹èµ¥µ¥¡A³£·|¼vÅT¦ì§}¡A¦pªG¤@¼Ë¨º¤~©_©Ç¡C¦n¤F¡A¨º»ò§Ú­Ì¸Ó«ç»ò¬Ý¦ì§}¡u13F751000¡v¤¤ªº°O¾ÐÅ餺®e¬O¤°»ò©O¡Hµª®×¬O¦b²Ä¤TÄæ¡C

¤W¹Ï¤Ï²ÕĶ°Ïªº²Ä¤TÄæ¬O¾÷±ñ½X¡C¨Ò¦p¦ì§}¡u13F751000¡v¤¤ªº¾÷±ñ½X¬O¡u48:33C9¡v¡A¨Ì·Ó¶¶§Ç¸ÑŪ¡A¦ì§}¡u13F751000¡v¤¤ªº¸ê®Æ¬O¡u48¡v¡B¦ì§}¡u13F751001¡v¤¤ªº¸ê®Æ¬O¡u33¡v¡B¦ì§}¡u13F751002¡v¤¤ªº¸ê®Æ¬O¡uC9¡v¡C¦Ó¤U¤@¦æ­è¦n¤S¥Ñ¦ì§}¡u13F751003¡v¶}©l¡A¨ä¤ºªº¸ê®Æ¬O¡u51¡v¡C

¾÷±ñ½X»P x86 «ü¥O

·Ó¤W­±©Ò»¡ªº¡A¬Ý°_¨Ó²Ä¤TÄæ¦ü¥G¥u¬OÅã¥Ü°O¾ÐÅ餺¦s©ñªº¸ê®Æ¡A¨Æ¹ê¤W¡A³o¨Ç¸ê®ÆÁÙ¦³¥t¤@¼h§ó­«­nªº·N¸q¡A¥¦ÁÙ¥NªíµÛ¾÷±ñ½X ( machine code )¡C¤j®a³£»¡¹q¸£¥u»{±o 0 »P 1¡A¤]³£³o»ò»{¬°¡A¦ý¬O§ó¶i¶¥ªº·N¸q¬O¤°»ò¡H¥u¦³¾Ç¹L²Õ¦X»y¨¥¤~¯àµy·LÁA¸Ñ¡C­è¤~©Ò´£ªº¡u48:33 C9¡v¬O¤Q¤»¶i¦ì¼Æ­È¡AÂà´«¦¨¤G¶i¦ì¬O¡u0100 1000:0011 0011¡K¡K¡vµ¥¤@ªø¦êªº 0 »P 1¡A³o¨Ç 0 »P 1 ³Q CPU Ū¨ú¶i¤J¨ä¹q¸ô¤§¤¤¡ACPU ´N¯à®Ú¾Ú³o¨Ç¹s©Î¤@±N¹q¸ô¶}©ÎÃö¡A¦Ó¸ÑªR¨ä¥\¯à¬°¦ó¡C·íµM¡A³o¬q¹q¸ôªº³]­p·¥¨ä½ÆÂø¡A¤£½×¦p¦ó¡ACPU ¯à¦Û¤v¤ÀªR¥X¨Ó­ì¨Ó¬O­n§â RCX ¼È¦s¾¹»P¦Û¨­°µ¤¬¥¸©Î¹Bºâ¡A©ó¬O CPU ´N¯à°õ¦æ¦¹«ü¥O¡C¦P²z¡A·í CPU Ū¨ú¨ì¾÷±ñ½X 51 ®É¡A´Nª¾¹D­n§â RCX ±À¤J°ïÅ|¡C

¾÷±ñ½X»P²Õ¦X»y¨¥ªºÃö«Y·¥¨ä±K¤Á¡C¦b¹q¸£­èµo©ú®É¡A¦³¤@¬q®É¶¡µ{¦¡³]­p®v¯uªº´N¬O§â³o¤@³s¦êªº 0 »P 1 ¿é¤J¹q¸£¡A¥i·Q¦Óª¾³o¼Ëªº°µªk«D±`®e©ö¥X¿ù¡A©Ò¥HÁo©úªº¤H´N·Q¥X¥Î²³æ´X­Ó¦r¥À¥Nªí³o¨Ç«ü¥O¡A¨Ò¦p­è­è»¡ªº¥H¡uXOR RCX,RCX¡v¥N´À¡u48:33C9¡v¡A¦A¥[¤W°²«ü¥O¡A´N§Î¦¨²Õ¦X»y¨¥¡C¦]¦¹¡A¤j­P¤W¥i¥H»¡¡A²Õ¦X»y¨¥ªº x86 «ü¥O»P¾÷±ñ½X¦³¤@¹ï¤@ªºÃö«Y¡C

²ÕĶ¾¹ªº¤u§@´N¬O§â¤HÃþ¼¶¼gªº¯Â¤å¦rÀÉ¡uÂà´«¡v¦¨¾÷±ñ½X¡AÅý CPU ¯à¬Ý±oÀ´¡A³o¼Ëªº¹Lµ{ºÙ¬°¡u²ÕĶ¡v( assembly )¡C¦Ó¹³ x64dbg ³oÃþ°£¿ù¾¹¡A¯à°÷¸ü¤J°õ¦æÀÉ¡A¨Ã§â¥¦Åܦ¨²Õ¦X»y¨¥ªº§Î¦¡¡AÅý¤HÃþŪ±oÀ´¡A³o¼Ëªº¹Lµ{ºÙ¬°¡u¤Ï²ÕĶ¡v(disassembly )¡C³o¨â­Ó¹Lµ{¬O«ê¦n¬Û¤Ï¡C

²Ä¥|Äæ¬O x86 «ü¥O¡C³o¤@Äæ¬Ý°_¨Ó¡A¸ò§Ú­Ì©Ò¼¶¼gªº­ì©l½X«Ü¬Û¹³¡A¦ý¬O¦ü¥G¦h¤F«Ü¦h¡u­×¹¢¡vªºÃã·J¡A¹³¡uqword ptr¡v¡B¡u[]¡vµ¥µ¥¡AÁÙ¦³§â¦r¦ê¦WºÙ§ï¦¨¤F¦ì§}¡C

x64dbg §Ö±¶Áä¡GF7 ( ³æ¨B°lÂÜ ) »P F9 ( °õ¦æ )

­è­è§Ú­Ì´¿¸g¥Î x64dbg §Ö±¶Áä¡A¡uF9¡vÁä¾Þ§@¡u°õ¦æ¡v( run ) «ü¥O¡A³o­Ó x64dbg «ü¥O·|ª½±µ°õ¦æµ{¦¡¡Aª½¨ìµ{¦¡µ²§ô©Î¹J¨ì¤¤Â_ÂI¤~·|°±¤î¡C

²{¦b§Ú­Ì¦A¤¶²Ð¥t¤@­Ó x64dbg «ü¥O¡AºÙ¬°³æ¨B°lÂÜ ( ¤]½Ķ¦¨³æ¨B¨B¤J )¡A§Ö±¶Áä¬O¡uF7¡vÁä¡C³æ¨B°lÂܪº·N«ä¬O¡A¤@¦¸¥u°õ¦æ¤@¹D«ü¥O¡AµM«á°±¤U¨Ó¡A§â¼È¦s¾¹°Ï¡B°ïÅ|°Ï¡B¸ê®ÆÅã¥Ü°Ïªº¬ÛÃö¸ê®Æ¦C¥X¨Ó¡AÅýµ{¦¡³]­p®vÆ[¹î¡A¬O§_»P¹w´Áµ²ªG¤@¼Ë¡C

²{¦b«ö¤@¦¸¡uF7¡vÁä¡Aªí¥Ü°õ¦æ¡uxor rcx,rcx¡v«ü¥O¡A°õ¦æ§¹«áµe­±¦p¤U¡C¥i¥H»P¤W¹Ï¤ñ¸û¡ARCX Åܦ¨¤F 0¡A¦P®É RIP ¤]«ü¦V¤U¤@­Ó©|¥¼°õ¦æªº«ü¥O¦ì§}¡A¨º­Ó¾î¸ó¦n´XÄæ¶Â¦â¡B¦Ç¦â¤Ï¥Õªº¡u´å¼Ð¡v¤]©¹¤U²¾¡C¾Þ§@¼È¦s¾¹°Ïªº±²°Ê¶b¡A¨Ï¯àÆ[¹î¨ì RFLAGS ¤å¦r¡A¥¦´N¬OºX¼Ð¼È¦s¾¹¡A¨ä¤¤ªº ZF¡×1¡A´Nªí¥Ü¹s­ÈºX¼Ð³Q³]©w¡A³o¬O¦]¬° RCX ¹Bºâ«á¬°¹s¡C ¦p¤W¹Ï¡A²{¦b¦b¤Ï²ÕĶ°Ï¤Ï¥Õªº¬O¡upush rcx¡v¡Aªí¥Ü§Y±N°õ¦æ¥¦¦ý©|¥¼°õ¦æ¡A³o«ü¥O»P°ïÅ|¦³Ãö¡Cx64dbg ¨C°õ¦æ§¹¤@«ü¥O´N·|§â°ïÅ|³»ºÝÅã¥Ü©ó°ïÅ|°Ïªº³Ì¤W­±¡A¦ý¤p¤ì°¸§Æ±æ¯à¬Ý¨ì°ïÅ|°ÏªºÅܤơA©Ò¥H¨C¦¸°õ¦æ§¹«ü¥O¡A³£·|½Õ¾ã°ïÅ|°Ïªº±²°Ê¶b¡CÆ[¹î°ïÅ|°Ï·|µo²{°ïÅ|°Ï¦³¨âÄæ¡A¥ªÃ䪺ÅãµM¬O¦ì§}¡A¥kÃ䪺¬O°ïÅ|¤º©ÒÀx¦sªº¼Æ­È¡C¥kÃ䨺¤@Äæ¤S¤À¦¨¤W¡B¤U¨â³¡¤À¡A¤W¥b³¡¬°¦Ç¦â¦r¡A¤U¥b³¡¬°¶Â¦â¦r¡C¶Â¦âªº³¡¤À¬O¤w¦s¦³¸ê®Æªº°ïÅ| ( ÁöµM³£¬O¹s )¡A¦Ç¦âªº¬O¥¼¦s¦³¸ê®Æ¡C

«ö¤@¦¸¡uF7¡vÁä¡A°õ¦æ¡upush rcx¡v¡ARSP ´î¤KÅܦ¨ 2DFB10¡AµM«á§â RCX ¤§­È¡A¤]´N¬O¹s¡A¦s¤J¦ì§} 2DFB10 ªº°O¾ÐÅ餤¡F¦P®É°ïÅ|°Ï³»¤Ï¥Õ³¡¤À¤]©¹§C¦ì§}²¾¤K­Ó¦ì¤¸²Õ¡A¦p¤U¹Ï¡F¥B RIP «ü¦V¤U¤@­Ó«ü¥O¡A¤Ï²ÕĶ°Ï¤Ï¥Õªº³¡¤À¤]©¹¤U²¾¡C

±µµÛªº«ü¥O¬O¡umov rdx,OFFSET szText¡v¡A§Ú­Ìª¾¹D³o¬O§â szText ªº¦ì§}¦s¤J RDX ¸Ì¡A¦Ó szText ¦b¡u.CONST¡v°Ï¬q¤º ( ¨£ FIRST.ASM ²Ä¤K¨ì¤Q¦æ )¡C¦ý¬O¦]¬°¡u¸ê®ÆÅã¥Ü°Ï¡v¤ºªº¸ê®Æ¨Ã«D FIRST.EXE ¤¤¡u.CONST¡v°Ï¬qªº¸ê®Æ¡A¥²¶·Åܧó¨ì¸Ó³B¡C§â·Æ¹«²¾¦Ü¤U¹Ï¸ê®ÆÅã¥Ü°Ï¤ºªºÂŦâ°Ï°ì¡A¦b¨ä¤º¥ô·N³BÂIÀ»·Æ¹«¥kÁä¡A·|¥X²{¤@­Ó¿ï³æ¡A¦p¤U¹Ï¡C¿ï¾Ü①¡u«e©¹¡v¡÷②¡uªí­z¦¡¡v¡A·|¥X²{¤@¹ï¸Ü²°¡A¿é¤J¡u13F752030¡v( ­^¤å¦r¥À¤j¤p¼g³£¤@¼Ë )¡C¬°¦ó¿é¤J¦¹¼Æ­È©O¡H¦]¬°§Ú­Ì­nÆ[¹îªº¬O szText ¦r¦ê¡A·Ó­è¤~ªºÁ¿ªk¡A¦¹¦r¦ê¦b¡uOFFSET szText¡vªº¦ì§}¤W¡A¸g²ÕĶ«á¦b¤U¹Ïªº③³B´N¬O¨ä¦ì§}¡C¦Ó§Ú­Ì±q FIRST.ASM ªº­ì©lµ{¦¡¥i¥Hª¾¹D¡AszCaption ¦b szText «e­±¡A©Ò¥H¤]¥i¥H½Õ¾ã¸ê®ÆÅã¥Ü°Ïªº±²°Ê¶b¡AÆ[¹î³o¨â­Ó¦r¦ê¡C ¦ý³o¼ËÁÙ¤£°÷¡A¦]¬°¡u¸ê®ÆÅã¥Ü°Ï¡v¤ºÅã¥Üªº¬O ASCII ½s½X ( ¤W¹Ï④³B )¡A¥²¶·§ó§ï¡C§â·Æ¹«²¾¦Ü¤W¹Ï¸ê®ÆÅã¥Ü°Ï¤ºªºÂŦâ°Ï°ì¡A¦b¨ä¤º¥ô·N³BÂIÀ»·Æ¹«¥kÁä¡A·|¥X²{¤@­Ó¿ï³æ¡A¿ï¾Ü⑤¡u¤Q¤»¶i¦ì¡v¡÷¡uBig5¡v¡A´NÅܦ¨¤U¹Ï¡G ±q¸ê®ÆÅã¥Ü°Ï¤º¡A´N¥i¥H¬Ý¨ì szText ¦r¦ê¦b¦ì§} 13F752030 ³B¡A¶¶«K¤]¥i¥H¬Ý¨ì szCaption ¦r¦ê¬O¦b¦ì§} 13F752020 ³B¡C¨â¦r¦ê³£Åܦ¨¤F¥H Big5 ½s½Xªº¤¤¤å¤F¡C( ¤W¹ÏÂŦâ®Ø¤º )

±q¡umov rdx,OFFSET szText¡v¶}©l¨ì¡umov r9,0¡v¤T­Ó«ü¥O³£¬O§ïÅÜ RDX¡BR8¡BR9 ¤T­Ó¼È¦s¾¹¤§­È¡A¨S¤°»ò¯S®í¤§³B¡A«ö¤T¦¸¡uF7¡vÁä°õ¦æ¥¦­Ì¡A¨Ï¨ä¤À§OÅܬ° 13F752030¡B13F752020¡B0¡A¥iÆ[¹î¼È¦s¾¹°ÏÅçÃÒ¡A¦p¤U¹Ï¡C

©ó°ïÅ|¤W¹w¯d¼v¤lªÅ¶¡©Î°Ñ¼ÆªÅ¶¡¡A¦P®É¹ï»ô¸`¦ì§}

«ö¡uF7¡vÁä°õ¦æ¡usub rbp,20¡v¡A¦p¤U¹Ï¡ARSP ´î 20H¡AÅܦ¨ 2DFAF0¡A°ïÅ|°Ïªº°ïÅ|³»¤]©¹¤W²¾¡C³o­Ó«ü¥O¬Ý°_¨Ó«Ü²³æ¡A¦ý¬O¬°¤°»ò­n§â RSP ´î¥h 20H ©O¡H³o¤@¦æ¬O¦b°ïÅ|¤¤¹w¯d¼v¤lªÅ¶¡ ( shadow space )¡A«O¦s«e¥|­Ó¼È¦s¾¹°Ñ¼Æªº¡A¬°¤F¿í´` Win64 ªº©I¥sºD¨Ò¡C¨º¬°¤°»ò¬O¡usub rsp,20¡v¡AÅý RSP ´î 20H¡A¨Ï¨ä¥L¼È¦s¾¹´î 20H ¥i¤£¥i¥H©O¡H¤£­n´î 20H¡A´î¨ä¥L¼Æ¦æ¤£¦æ©O¡H

­º¥ý¡A¥²¶·¬O­n¨Ï RSP ´î¥h¬Y­Ó¼Æ¡A¤£¯àÅý¨ä¥L¼È¦s¾¹´î¡C­ì¦]¬O¼v¤lªÅ¶¡­n«O¦s¦b°ïÅ|¤W¡A©Ò¥H¥u¦³§â°ïÅ|³»©¹§C¦ì§}²¾¤~¥i¥H¡C¦b²³¦h¼È¦s¾¹¤¤¡A¥u¦³ RSP ¬O°ïÅ|ªº«ü¼Ð¡A©Ò¥H¥u¯à´î¥h RSP ¤§­È¡C¨Ã¥B¤£¯à¥Î¥[ªº¡A¦pªG¨Ï¥Î¥[ªk¡ARSP ·|«ü¦V§ó°ª¦ì§}¡A·|¯}Ãa±¼­ì¨Ó«O¦s¦b°ïÅ|¤ºªº¸ê®Æ¡C

¨ä¦¸¡A¨Ì¾Ú x64 ©I¥sºD¨Ò¡A¼v¤lªÅ¶¡¦Ü¤Ö­n«O¦s«e¥|°Ñ¼Æ¡A¤£¨¬¥|­Ó¤]­n¥H¥|­Ó­pºâ¡F¦pªG¶W¹L¥|­Ó¡A¦h¥X¨Óªº°Ñ¼Æ¤]­n¦b°ïÅ|¤W«O¯dªÅ¶¡¡C¦Ó MessageBoxA «ê¦n¥|­Ó°Ñ¼Æ¡A³o¥|­Ó°Ñ¼Æ³£¥Ñ¥|­Ó¼È¦s¾¹¡GRCX¡BRDX¡BR8¡BR9 ¶Çµ¹°Æµ{¦¡¡A¨C­Ó¼È¦s¾¹³£¬O 64 ¦ì¤¸¡A¤]´N¬O 8 ­Ó¦ì¤¸²Õ¡A­¼¥H¥|¡A´N¬O 32 ­Ó¦ì¤¸²Õ¡A´«ºâ¦¨¤Q¤»¶i¦ì¬O 20H¡C

³Ì«á¡AÁÙ­nª`·N¨ì¡A¦b©I¥s Windows API «e¡A´N¬O§Y±N°õ¦æ¡ucall MessageBoxA¡v¦ý©|¥¼°õ¦æ®É¡ARSP ÁÙ­n¹ï»ô 16 ¦ì¤¸²Õ¡CÆ[¹î¤U¹Ï¡ARSP ¬O 2DFAF0¡A¥¿¦n¹ï»ô¸`¦ì§}´N¨S¦³°ÝÃD¡C¨º¦pªG¨S¦³¹ï»ô©O¡H³o®É­Ô´N¥i¥H§â RSP ´î¥h 28H¡A¦Ó¤£¬O´î¥h 20H¡C( ¨Æ¹ê¤W¡AWin64 API ¤¤¡A­è¤@¶i¤J°Æµ{¦¡©Î Windows API ®É¡ARSP ªº³Ì¥½¦ì¼Æ¡A¥²©w¬O 8¡C³o¬O¦]¬°¥¼°õ¦æ CALL ¤§«e¡A¹ï»ô¸`¦ì§}¡ARSP ³Ì¥½¦ì¬°¹s¡A°õ¦æ CALL «ü¥O®É¡ACALL ·|§âªð¦^¦ì§}±À¤J°ïÅ|¡A¬G RSP ¤Ö¤F 8¡A³Ì¥½¦ì´N·|Åܦ¨ 8 )

±µ¤U¨Ó´N­n°õ¦æ¡ucall MessageBoxA¡v«ü¥O¡A¦ý©|¥¼°õ¦æ¡Cª`·N¨ì¡A«e­±´£¹L x64 ©I¥sºD¨Ò¡A¦³¤@¶µ¡u¦b°õ¦æ CALL ¤§«e¡ARSP ©Ò«üªº¦ì§}¥²¶·¹ï»ô¤@­Ó¸`¡v¡CÆ[¹î¤U¹ÏÀˬd¤@¤U¡Aµo²{ RSP ©Ò«üªº°ïÅ|³»¦ì§}¬O¡u2DFAF0¡v¡AªG¯u¹ï»ô 16 ¦ì¤¸²Õ¡C°²¦p¨S¦³¹ï»ô¡A©I¥s Windows API¡Aµ{¦¡·|·í±¼¡C²{¦b«ö¤@¦¸¡uF7¡vÁä¡A°õ¦æ¡ucall MessageBoxA¡v¡C§A·|¬Ý¨ì CALL §â¤U¤@¹D«ü¥Oªº¦ì§}¡A¤]´N¬Oªð¦^¦ì§}¡A13F751025¡A±À¤J°ïÅ|¡AµM«áÂಾ¨ì MessageBoxA ³B¡C ¦p¤W¹Ï¡A³o®É­Ô§Y±N¶i¤J MessageBoxA ¸Ì­±¤F¡C

¦b x64dbg ¤¤¡A³]¸m¤¤Â_ÂI

«ö¤U¡uF7¡vÁä¡AÅܦ¨¤U¹Ïµe­±¡G ÂŦâ®Ø¦íªº´N¬O MessageBoxA ªºµ{¦¡½X¡A³o¬qµ{¦¡½X«Ü­¯¥Í¡A¦]¬°³o¤£¬O§Ú­Ì¼¶¼gªº¡A¤p¤ì°¸¤£¥´ºâ¥h°lÂܳo¬qµ{¦¡¡A­nª½±µ¸õ¹L¥h¡C¤èªk¬O³]¸m¡u¤¤Â_ÂI¡v¡C²q·QÂŦâ®Ø¦íªº³Ì©³¤U¬O¡uRET¡v«ü¥O¡A³o¬Oªð¦^¥Dµ{¦¡ªº«ü¥O¡A¤]¥i¥H»¡ MessageBoxA °õ¦æ¨ì³o¸Ì´Nµ²§ô¤F¡A¤p¤ì°¸¥´ºâ¦b¦¹³B³]¸m¤¤Â_ÂI¡C ¤èªk¤£Ãø¡G①§â·Æ¹«´å¼Ð²¾¨ì¦ì§}¬° 77751702 ªº¡uRET¡v«ü¥O¤W¡A¥H·Æ¹«¥ªÁäÂIÀ»¤@¦¸¡A¾ã¦C«ü¥O·|¤Ï¥Õ¡A¥Nªí¿ï¾Ü¦¹¦ì§}¡C②µM«á«ö¤U¡uF2¡vÁä¡A«h²Ä¤GÄ檺¦ì§}³B¡AÅܦ¨¿ô¥Øªº¬õ¦â¡A¥Nªí¦¹³B¤w³]¬°¤¤Â_ÂI¡C³o¼Ë´N§¹¦¨¤F¡A¦p¤W¹Ï¡C

«ö¤@¤U¡uF9¡vÁä¡Ax64dbg ·|°õ¦æ FIRST.EXE ª½¨ì¹J¨ì³]¸mªº¤¤Â_ÂI¡A¤~·|°±¤î¡C¦ý¦b°±¤î¤§«e¡AMessageBoxA ·|²£¥Í¤@­Óµøµ¡¡A­n¨Ï¥ÎªÌ«ö¡u½T©w¡v«ö¶s¤~·|Ä~Äò°õ¦æ¡A¦pªG¨Ï¥ÎªÌ¨S«ö¡AMessageBoxA ´N·|¤@ª½µ¥«Ý¡C³o­Óµøµ¡¨Ã¤£·|¼u¥X¨Ó¦b³Ì¤W¼h¡A¥²¶·¨ì¤u§@¦C¥h§ä¡C¤U¹Ï¬O¤w¸g¦b¤u§@¦CÂIÀ» FIRST.EXE ¹Ï¥Ü¡A¥H·Æ¹«¹ï MessageBoxA ²£¥Íµøµ¡¤ºªº¡u½T©w¡v«ö¶s«ö¤@¦¸¡C

³o®É x64dbg °õ¦æ¨ì¤¤Â_ÂIªº¦a¤è°±¤F¤U¨Ó¡A§Y±N°õ¦æ¡uRET¡v«ü¥O¡A³o­Ó«ü¥O·|ªð¦^¨ì FIRST.EXE ¥Dµ{¦¡¡A¦p¤U¹Ï¡C

«ö¤@¤U¡uF7¡vÁä¡A°õ¦æ¡uret¡v«ü¥O¡C°ïÅ|°Ïªºªð¦^¦ì§}¤w¨ú¥X¡A°ïÅ|³»©¹°ª¦ì§}²¾¤K­Ó¦ì¤¸²Õ¡A¤Ï²ÕĶ°Ïªº¤º®eÅܦ^ FIRST.EXE ªºµ{¦¡½X¡A¦p¤U¹Ï¡C¤U¤@«ü¥O¬O¡uadd rsp,20¡v¡A¬°¦ó­n¦³³o¹D«ü¥O©O¡H³o¤]¬O¬°¤F­n¿í´` Win64 API ªº©I¥sºD¨Ò¡A¡u¥Ñ¥Dµ{¦¡²M²z°ïÅ|¡v¡C©I¥s¹Lµ{¤¤¡A¦b°ïÅ|¤W·|«Ø¥ß«O¦s°Ñ¼ÆªºªÅ¶¡¡A³o¨Ç¦bªð¦^¥Dµ{¦¡«á³£¨S¦³¥Î¤F¡A¥²¶·²M°£¡CMessageBoxA ¥u«Ø¥ß¤F 20H ªºªÅ¶¡¡A©Ò¥H°õ¦æ¡uadd rsp,20¡v§Y¥i¡C «ö¤U¡uF7¡vÁä°õ¦æ¡uadd rsp,20¡v«ü¥O¡A°ïÅ|°Ï¤ºªº°ïÅ|³»ºÝ©¹°ª¦ì§}²¾¡A¦P®É RSP ¥Ñ 2DFAF0 Åܬ° 2DFB10¡A¨Ã¨S¦³¶i¦ì¡Aµ²ªG¤]¤£¬O¹s¡A©Ò¥H CPU ²M°£¶i¦ìºX¼Ð»P¹s­ÈºX¼Ð¡Cª`·N¨ì¡A³o¸Ìªº¶i¦ì¥²¶·¬O RSP ªº²Ä 63 ¦ì¤¸¬Û¥[¤§«áªº¶i¦ì¤~·|³]©w¶i¦ìºX¼Ð¡C

±µ¤U¨Ó§Y±N°õ¦æ¡upop rcx¡v¡A¦ý©|¥¼°õ¦æ¡C¦b¤Ï²ÕĶ°Ïªº¦ì§} 13F751003 ³B¡A§â RCX ±À¤J°ïÅ|¦ì§} 2DFB10 ( ¥HÂŦâªí¥Ü )¡A¦Ó¦¹³B«h§â¸Ó¦ì§}¡A¤]¬O²{¦b°ïÅ|³»ºÝªº¼Æ­È¡A¦s¦^ RCX ¸Ì¡C³o¼Ë´N¤£¥²¦A¨Ï RCX Åܬ°¹s¡C¦¹¥~¡A³q±` PUSH »P POP ¦¨¹ï¥X²{¡A©Ò¥H x64dbg ¥HÂŦâ¼Ðµù¡A¦ý¤]¦³¤Ö¼Æ¨Ò¥~ªº±¡§Î¡C

«ö¤@¤U¡uF7¡vÁä¡A°õ¦æ¡upop rcx¡v«ü¥O¡A¥Ñ°ïÅ|³»ºÝ¼u¥X­ì¥ý¦s¤Jªº¸ê®Æ¡ARCX Åܬ°¹s¡A°ïÅ|°Ïªº°ïÅ|³»ºÝ©¹°ª¦ì§}²¾¡A¦p¤U¹Ï¡C ±µµÛ§Y±N­n°õ¦æ¡usub rsp,8¡v¡A¦p¤W¹Ï¡C¬°¦ó­n°õ¦æ³o¹D«ü¥O©O¡A§A¥i¥HÆ[¹î RSP ¤§­È¬° 2DFB18¡A¨Ã¨S¦³¹ï»ô 16 ¦ì¤¸²Õ¡A¦ý±µ¤U¨Ó´N­n©I¥s ExitProcess API¡A¦¹ API ¶È¤@­Ó°Ñ¼Æ¡A§Ú­Ì­n¦b°ïÅ|¤¤«O¯d 20H ­Ó¦ì¤¸²ÕªºªÅ¶¡¡A¦ý¦pªG¥u´î¥h 20H¡A·|Åý RSP ¨S¦³¹ï»ô¸`¦ì§}¡C¦]¦¹§Ú­Ì±o¦Û¦æ½Õ¾ã¡A¤èªk´N¬OÅý RSP ¦h´î¤@ÂI¡A§Y´î¥h 28H¡C¨º»ò´î¥h 38H¡B48H¡K¡K¬O§_¥i¦æ©O¡H¬Oªº¡Aªº½T¥i¥H³o¼Ë°µ¡C¨º»ò¥[¤W 8 ©Î 18H¡K¡K¥i¥H¶Ü¡H³o¼Ë´N¤£¦æ¡A¦]¬°¦b°ª¦ì§}¦³¸ê®Æ¡A³o¥i¯à¬O¨t²Î«O¦sªº¡A¦pªG§ï¥Î¥[ 8¡B18H¡K¡K¥i¯à·|¯}Ãa³o¨Ç¸ê®Æ¡C

©³¤U©I¥s§¹ ExitProcess¡Aµ{¦¡´Nµ²§ô¤F¡C¤p¤ì°¸´N¤£¦AÅo­ö¤F¡C

¦b°ïÅ|¤¤«O¯d°Ñ¼ÆªÅ¶¡»P¹ï»ô¸`ªºÃä¬Éªºµ¦²¤

¦b©I¥s Win64 API¡A®É­n¦b°ïÅ|¤W«O¯d°Ñ¼Æ¡A§Y¨Ï«e¥|­Ó°Ñ¼Æ¬O¥H¼È¦s¾¹¶Ç»¼¡A¤]­n«O¯d¡F¦Ó¥B´Nºâ¬O©Ò©I¥sªº API °Ñ¼Æ¤£¨¬¥|­Ó¡A¤]­n«O¯d¥|­Ó¡C¦b°ïÅ|¤W«O¯d³o¨Ç°Ñ¼Æ¡A¥i¥H¨Ï RSP ´î¥h¬Y­Ó¼Æ§Y¥i¡C

¤£¶È¦p¦¹¡A°õ¦æ CALL ¤§«e¡ARSP «ü¦Vªº°ïÅ|¦ì§}¥²¶·¬O 16 ¦ì¤¸²Õªº¾ã¼Æ­¿¡A¤]´N¬O¦ì§}¥H¤Q¤»¶i¦ìªí¥Ü®É¡A¨ä³Ì¥kÃ䨺¦ì ( ©Î»¡³Ì¥½¦ì¡B­Ó¦ì¼Æ ) ¥²¶·¬O¡u0¡v¡C³o¬O Win64 API ©I¥sºD¨Òªº³W«h¡AµLªk¹H­I¡A°²³]¹H­I¤F¡Aµ{¦¡´N·íµ¹§A¬Ý¡C

¦b¥ô¦ó±¡§Î¤U¡Aµ{¦¡¤@¶}©l°õ¦æ®É©ÎªÌ©I¥s Win64 API ¦Ó­è­è¶i¤J API ®É¡ARSP ªº³Ì¥kÃ䨺¦ì¡A¤]´N¬O¡u­Ó¡v¦ì¼Æ¡A³£¬O¡u8¡v¡C¨C­Óµ{¦¡³£¥²¶·¿í¦u¤W­±ªº³W«h¡A¨Ì©Ò©I¥sªº Win64 API °Ñ¼Æ¦h¹è¡A¥i¥H¤À¦¨¤U­±´XºØ±¡§Î¡G

³Ì«á¾ã²z¦p¤Uªí¡G

ªí¡G°Ñ¼Æ­Ó¼Æ»P RSP «O¯d¤j¤p
°Ñ¼Æ­Ó¼ÆRSP ´î¥h¦h¤Ö °Ñ¼Æ­Ó¼ÆRSP ´î¥h¦h¤Ö
4 ©Î¤p©ó 428H 1058H
528H 1158H
638H 1268H
738H 1368H
848H 1478H
948H 1578H

´î¥h RSP ¤§­È¡A¨Ï¨ä¯à¦b°ïÅ|«O¯d°Ñ¼ÆªÅ¶¡¡A¤S¯à¦b°õ¦æ CALL «e¹ï»ô¸`¦ì§}¡A¨ä¹ê¦³¨âºØ°µªk¡G①¥i¥H¦b¶i¤J¥Dµ{¦¡®É¡A¨Ì¾Ú³Ì¦h°Ñ¼Æªº API ½Õ¾ã¡A³o¼Ë¥u»Ý°µ¤@¦¸§Y¥i¡F②¤]¥i¥H¦b¨C¦¸©I¥s Win64 API ¤§«e½Õ¾ã¡A¦Ó©ó¨C¦¸©I¥s«á¾P·´«O¯d°Ñ¼ÆªºªÅ¶¡¡A³oºØ°µªk¨Ï±o©I¥s Win64 API ´X¦¸¡A´N­n°µ´X¦¸¡C

¦b FIRST.ASM ¤¤±Ä¥Î²Ä②ºØ°µªk¡C¥u¬O©I¥s ExitProcess ¤§«á¡Aµ{¦¡µ²§ô¤£¥²¾P·´°ïÅ|¤Wªº°Ñ¼Æ¡C³o¬O¦]¬°±±¨îÅv¤w¥æ¦^ Windows¡AWindows ³s FIRST ªº°ïÅ|³£·|¾P·´¦óªp¬O«O¦s©ó¨ä¤ºªº°Ñ¼Æ¡C

14
15
16
17
18
19
20
21
22
23
24
25
26
main    PROC
        xor     rcx,rcx
        push    rcx
        mov     rdx,OFFSET szText
        lea     r8,OFFSET szCaption
        mov     r9,MB_OK
        sub     rsp,20h ;¢w¢w¢w¢w¢w¢w¢{
        call    MessageBoxA   ;¢u¢w²Ä¤@¦¸©ó°ïÅ|«O¯d°Ñ¼Æ¤S¾P·´
        add     rsp,20h ;¢w¢w¢w¢w¢w¢w¢}
        pop     rcx
        sub     rsp,28h  ;¢w¢w¢w¢w¢w¢{
        call    ExitProcess ;¢w¢w¢r¢w²Ä¤G¦¸©ó°ïÅ|«O¯d°Ñ¼Æ¡A¦ý¦]¬°¤wµ²§ôµ{¦¡¡A½Í¤£¤W¾P¤£¾P·´
main    ENDP

·íµM³o¼Ëªº°µªk«Ü³Â·Ð¡A§Ú­Ì¥i¥H¦b main µ{¦¡¤¤¡A¥H³Ì¦h°Ñ¼Æªº Win64 API ¬°·Ç¡A§â RSP ´î¥h¬ÛÀ³ªº¼Æ­È§Y¥i¡A³o¼Ë¥u»Ý°µ¤@¦¸¡C


FIRST1.ASM

©³¤U§Ú­Ì´N¨ÓÅçÃÒ³o­Ó·Qªk¡C¿é¤J©³¤Uªºµ{¦¡¡A±N¥¦¦s¤J¡uE:\HomePage\SOURCE\Win64\FIRST\FIRST1.ASM¡v¸Ì¡C

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
;²Ä¤@³¹¤w«Ø¦n¤F¡uC:\Users\±b¸¹\MASM64.BAT¡v¡A²ÕĶ³sµ²¤è¦¡¡G
;1.¶}±Ò¡u©R¥O´£¥Ü¦r¤¸¡v
;2.¿é¤J¡uMASM64¡v
;3.¤Á´«¨ì¡uE:\HomePage\SOURCE\Win64\FIRST\¡v¤l¥Ø¿ý
;4.¿é¤J¡uML64 FIRST1.ASM¡v§¹¦¨
OPTION          CASEMAP:NONE
EXTRN           MessageBoxExA:PROC
EXTRN           ExitProcess:PROC
INCLUDELIB      e:\masm32\lib64\kernel32.lib
INCLUDELIB      e:\masm32\lib64\user32.lib
MB_OK                   EQU     0
LANG_ENGLISH            EQU     9
SUBLANG_ENGLISH_US      EQU     1
;***************************************************************************************************
.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
        mov     ax,SUBLANG_ENGLISH_US
        shl     ax,10
        add     ax,LANG_ENGLISH
        mov     WORD PTR [rsp+20h],ax
        call    MessageBoxExA
        xor     rcx,rcx
        call    ExitProcess
main    ENDP
;***************************************************************************************************
END

FIRST1.ASM ¤¤©I¥s¨â­Ó Win64 API¡G①MessageBoxExA¡B②ExitProcess¡C«eªÌ¥u¦³¤­­Ó°Ñ¼Æ¡A«áªÌ¥u¦³¤@­Ó°Ñ¼Æ¡C©Ò¥H¦b²Ä 22 ¦æ¦³¡usub rsp,28h¡v¡A«O¯d°Ñ¼Æ©ó°ïÅ|¤º¡C©I¥s§¹²¦«á¡A¤]¤£¶·¾P·´«O¦s°Ñ¼Æªº°ïÅ|¡A¤Ï¥¿¥H«á´N·|¥Î±oµÛ¡CÁöµM«á­±ªº ExitProcess ¥u¦³¤@­Ó°Ñ¼Æ¡A¦ýªÅµÛ¤]¤£·|¦³¤°»ò®`³B¡C

°£¤F¤W­±¤£¦P¤§¥~¡AFIRST.EXE »P FIRST1.EXE ÁÙ¦³¤T³B¤£¦P¡G

­º¥ý¡AFIRST °õ¦æªºµ²ªG¬O¡G¡A¦Ó FIRST1 °õ¦æªºµ²ªG¬O¡G¡A«Ü©úÅã´N¥u¦³§â¡u½T©w¡v«ö¶sÅܦ¨¤F¡uOK¡v¡C

²Ä¤G¡GFIRST ©I¥sªº¬O¡uMessageBoxA¡v¡A¦Ó FIRST1 ©I¥sªº¬O¡uMessageBoxExA¡v¡CFIRST1 ©I¥sªº MessageBoxExA ¦³¤­­Ó°Ñ¼Æ¡A·Ó«e­±©Ò´£¨ìªº¡ARSP »Ý­n«O¯dµ¹°Ñ¼Æªº°O¾ÐÅé­n¦³ 28H ­Ó¦ì¤¸²Õ¡A¦Ó¥B¯à°÷¦¨¥\°õ¦æ¡AÅçÃÒ¤F¤W­±ªºÁ¿ªk¡C

²Ä¤T¡GFIRST ¤¤¡A¦]¬°©I¥s MessageBoxA ªº RCX °Ñ¼Æ¸ò©I¥s MessageBoxA ªº RCX °Ñ¼Æ¤@¼Ë¡A©Ò¥H©I¥s MessageBoxA «e§â RCX «O¦s¦b°ïÅ|¸Ì¡A¨ì©I¥s ExitProcess ®É¥Ñ°ïÅ|¨ú¥X¡CFIRST1 ªº°µªk§óª½±µ¡A¤£«O¦s RCX¡A¨ì©I¥s ExitProcess ®É¡A¦A¦Û¦æ­pºâ¡C

FIRST1.ASM ¤j³¡¤À³£»P FIRST.ASM ¬Û¦P¡A¥u³Ñ¤U MessageBoxExA¡C¦b¦¹­n»¡©úªº¬O¡AÁöµM²o¯A¨ì¦r¤¸©Î¦r¦êªº API ¦³ ANSI ª©»P¼e¦ì¤¸ª©¡A¦ý©¹«á³£¤£¦A»¡©ú¤F¡A¤]¤£¦A°Ï¤À¤F¡AAPI ¦WºÙµ²§Àªº¡uA¡v©Î¡uW¡v¤]¤£¦A´£¤F¡C

MessageBoxEx API

MessageBoxEx ¬O MessageBox ªº©µ¦ùª©¥» ( ¬Ý«á­±ªº¡uEx¡v´Nª¾¹D¡AEx ¥Nªí extend ªº·N«ä )¡A¨ä»yªk¬O¡G

invoke  MessageBoxEx,\
        hWnd,\          ; handle of owner window
        lpText,\        ; address of text in message box
        lpCaption,\     ; address of title of message box
        uType,\         ; style of message box
        wLanguageId     ; language identifier

«e¥|­Ó°Ñ¼Æ»P MessageBox ®t¤£¦h¡A¥i¥H¦Û¦æ¬d¾\ MSDN¡C¤p¤ì°¸¦b¦¹»¡©ú³Ì«á¤@­Ó°Ñ¼Æ¡AwLanguageId¡C¬Ý¥¦ªº¦WºÙ¡AwLanguageId¡A´Nª¾¹D¡uw¡v¥Nªí¥¦ªºªø«×¬O¤@­Ó¦r²Õ ( word )¡A¦Ó«á­±ªº¡uLanguageId¡v¥Nªí»y¨¥ÃѧO½X¡A³]©w¦¹°Ñ¼Æ¥i¥H¥Î¤£¦Pªº»y¨¥Åã¥Ü«ö¶s¤Wªº¤å¦r¡CwLanguageId ¬O¥Ñ¤Q¦ì¤¸ªº¥D­n»y¨¥©M¤»¦ì¤¸ªº¦¸­n»y¨¥²Õ¦¨ªº¡A¥D­n»y¨¥¦b wLanguageId ªº²Ä 0¡ã9 ¦ì¤¸¡A¦¸­n»y¨¥¦b wLanguageId ªº²Ä 10¡ã15 ¦ì¤¸¡C³¡¤À¥D­n»y¨¥©M¦¸­n»y¨¥ªº¦Cªí¦p¤U¡G

¥D­n»y¨¥¦¸­n»y¨¥
¤¤¤å
LANG_CHINESE = 4
¥¿Å餤¤å¡@SUBLANG_CHINESE_TRADITIONAL = 1
²Å餤¤å¡@SUBLANG_CHINESE_SIMPLIFIED = 2
­»´ä¤¤¤å¡@SUBLANG_CHINESE_HONGKONG = 3
·s¥[©Y¤¤¤å¡@SUBLANG_CHINESE_SINGAPORE = 4
­^¤å
LANG_ENGLISH = 9
¬ü°ê­^¤å¡@SUBLANG_ENGLISH_US = 1
­^°ê­^¤å¡@SUBLANG_ENGLISH_UK = 2
¿D¬w­^¤å¡@SUBLANG_ENGLISH_AUS = 3
¥[®³¤j­^¤å¡@SUBLANG_ENGLISH_CAN = 4

©¹«á¼¶¼gµ{¦¡®É¡A¤Þ¶i¥]§tÀÉ¡A´N·|¨Ï¥ÎÃþ¦ü LANG_CHINESE¡BLANG_ENGLISH µ¥²Å¸¹¡A¦b¥]§tÀɤ¤·|¥Î¡uEQU¡v°²«ü¥O«Å§i LANG_CHINESE µ¥©ó 4¡BLANG_ENGLISH µ¥©ó 9¡A³o¼Ë´N¯à¤@¬Ý¨ì²Å¸¹´N¤@¥Ø¤FµM¨ä·N¸q¡C

x86 «ü¥O¡GSHL/SAL »P SHR¡BSAR

¥ý»¡©ú SHL «ü¥O¡A¥¦ªº»yªk¦p¤U¡G

SHL     ¥Øªº¹Bºâ¤¸,1        ¦¡(1)
SHL     ¥Øªº¹Bºâ¤¸,CL       ¦¡(2)
SHL     ¥Øªº¹Bºâ¤¸,¥ß§Y­È   ¦¡(3)

SHL «ü¥O¬O¡ushift logical left¡vªº·N«ä¡A¬O«ü¥Øªº¹Bºâ¤¸¤ºªº¨C­Ó¦ì¤¸¦V¥ª²¾¦ì¼Æ­Ó¦ì¤¸¡A¦pªG¥u²¾¤@­Ó¦ì¤¸¡A´N¥Î¦¡ (1)¡F¦pªG¤@¦¸­n²¾¦n´X­Ó¦ì¤¸¡A¥Î¦¡ (2)¡A§â­n²¾¦ìªº¦ì¤¸¼Æ¨Æ¥ý¦s¤J CL ùØ­±¡C8086/8088 CPU ¥u¯à¥Î³o¨âºØ¤èªk¡A¸û°ª¶¥ªº CPU ¥i¥H¥Î¦¡ (3)¡A­n²¾¦ìªº¦ì¤¸¼Æª½±µ¥H¥ß§Y­Èªí¥Ü¡C©³¤UÁ|­Ó¨Ò¤l»¡©ú¡C

¥k¹Ï¬O»¡©ú AX ¼È¦s¾¹ùتº¨C­Ó¦ì¤¸¦V¥ª²¾¤@¦ìªº±¡§Î¡CAX ¼È¦s¾¹¦³¤Q¤»¦ì¤¸¡A³Ì°ª¦ì¤¸¬O²Ä 15 ¦ì¤¸¡A³Ì§C¦ì¤¸¬O²Ä 0 ¦ì¤¸¡C­ì¨Óªº AX ¸Ìªº¼Æ­È¬O 994AH¡A·í°õ¦æ¡uSHL AX,1¡v«ü¥O®É¡A²Ä 15 ¦ì¤¸·|³Q²¾¦ÜºX¼Ð¼È¦s¾¹ ( carry flag¡A²ºÙ CF ) ùØ¡AµM«á²Ä 14 ¦ì¤¸²¾¦Ü²Ä 15 ¦ì¤¸¡A¨ä¾l¨Ì¦¹Ãþ±À¡K¡K²Ä¹s¦ì¤¸²¾¦Ü²Ä¤@¦ì¤¸¡A¦Ó²Ä¹s¦ì¤¸«h¶ñ¤J 0 ( ¥k¹Ï¤¤¡A¥H¯»¬õ¦âªº 0 ªí¥Ü )¡C°õ¦æ§¹¡uSHL AX,1¡v«á¡AAX Åܦ¨ 3294H¡C

¦pªG¬O¦h¦¸¥ª²¾ªº¸Ü¡A¨Ò¦p AX ­ì¬° 994AH¡A°õ¦æ¡uSHL AX,2¡v«ü¥O¡A¨º´N¬O¥ý°õ¦æ¤@¦¸¥ª²¾Åܦ¨ 3294H¡A¦A¶i¦æ¤@¦¸¥ª²¾Åܦ¨ 6528H¡A¶i¦ìºX¼ÐÅܬ°³Ì«á¤@¦¸¥ª²¾ªºµ²ªG¡A©Ò¥H¬O NC¡C

SHL ©M SAL ( shift arithmetic left ) ªº¾÷±ñ½X¤@¼Ò¤@¼Ëªº¡A©Ò¥H¬O¬Û¦Pªº«ü¥O¡C

SHL ¦³¤@¶µ¯S©Ê¡A«D±`¦n¥Î¡A¨º´N¬O¥i¥H·í°µ­¼¥H 2 ªº¾­¤è¡C¨Ò¦p¡uSHL AX,1¡v¬Û·í©ó§â AX ­¼¥H 2¡A¡uSHL AX,2¡v¬Û·í©ó­¼¥H 22¡A¡uSHL AX,2¡v¬Û·í©ó­¼¥H 23¡K¡K¥H¦¹Ãþ±À¡CÁÙ¬O¥H¤Q¶i¦ì¼Æ­È¨Ó¤ñ³ë¦n¤F¡A12 ¦V¥ª²¾²¾¦ì¡A¤£´NÅÜ 120¡A¬Û·í©ó­¼¥H 10¡F¦V¥ª²¾¨â¦ì¡A´NÅܦ¨ 1200¡A¬Û·í©ó¦¨ 102¡C

SHR ¬OÅÞ¿è¥k²¾ ( shift logical right ) ªº·N«ä¡A¥ç§Y§â¥Øªº¹Bºâ¤¸¤¤ªº¨C­Ó¦ì¤¸¡A¦V¥k²¾¼Æ­Ó¦ì¤¸¡C¥u¦³²¾¦ì¤è¦V¦V¥k¥H¤Î¬Û·í©ó°£¥H 2 ªº¾­¤è¡A³o¨âÂI»P SHL ¤£¦P¡A¨ä¥L¯S©Ê³£¤@¼Ë¡A¥]§t³Ì°ª¦ì¤¸·|¸É¤W 0¡C

¦ý¬O SAR ( shift arithmetic right¡Aºâ³N¥k²¾ ) «o»P SHR ¤£¦P¡ASAR «ü¥O¦b²¾¦ìªº®É­Ô¡A³Ì°ª¦ì¤¸«O«ù­ì¨Óªº­È¡C¨Ò¦p AL ¬°¡u1000 1100¡v¡A°õ¦æ¡uSAR AL,1¡v«á¡AAL Åܦ¨¡u1100 0110¡v¡A¥B¶i¦ìºX¼Ð³Q²M°£¡C¦pªG AL ¬°¡u1000 1100¡v¡A°õ¦æ¡uSAR AL,2¡v«á¡AAL Åܬ°¡u1110 0011¡v¡A¶i¦ìºX¼Ð³Q²M°£¡C

SHL¡BSAL¡BSHR¡BSAR ¥|«ü¥O°õ¦æ«á¡A·|¼vÅT¦h­ÓºX¼Ð¡A¥]§t¶i¦ìºX¼Ð¡B¦P¦ìºX¼Ð¡B¹s­ÈºX¼Ð¡B²Å¸¹ºX¼Ð¡B·¸¦ìºX¼Ð¤­­ÓºX¼Ð¡C

FIRST1.ASM ¤¤ªº²Ä 27¡ã29 ¦æ¬O

        mov     ax,SUBLANG_ENGLISH_US
        shl     ax,10
        add     ax,LANG_ENGLISH

³o¤T¦æ¬O¥Î¨Ó²£¥Í»y¨¥ÃѧO½Xªº¡A¥D­n»y¨¥¦b wLanguageId ªº²Ä 0¡ã9 ¦ì¤¸¡A¦¸­n»y¨¥¦b wLanguageId ªº²Ä 10¡ã15 ¦ì¤¸¡C¥ý¨Ï AX

Win64 API ²Ä¤­­Ó°Ñ¼Æ¤Î¨ä¥H«áªº°Ñ¼Æ

¨Ì¾Ú Win64 API ªº©I¥sºD¨Ò¡A«e¥|­Ó°Ñ¼Æ¨Ì§Ç¦s©ñ¦b RCX¡BRDX¡BR8¡BR9 ¼È¦s¾¹¤¤¡A¶Çµ¹ Win64 API¡C¦pªG¶W¹L¥|­Ó°Ñ¼Æªº¸Ü¡A¶W¹Lªº³¡¤À¬O¥Ñ°ïÅ|¶Ç»¼µ¹ Win64 API¡A¦ý¬O¹ê»Ú¤Wªº°µªk¬O¦p¦ó©O¡H½Ð¬Ý¥k¹Ï¡C¥k¹Ï¬O°²·Q°ïÅ|ªº¤@³¡¤À¡A¨ä¦ì§}¤]¬O°²·Qªº¡A¦ý¬O¦b©I¥s«e¡A¤]´N¬O§Y±N°õ¦æ CALL «ü¥O«e¡ARSP «ü¦V¦ì§}³Ì¥½¦ì¬°¹sªº°O¾ÐÅé¡A¤]´N¬O WXYZ80 ³B¡C

¦¹¨èªº RSP ©Ò«üªº¦ì§}¡A¤]´N¬O°ïÅ|³»ºÝ¡A¨ä¹ê´N¬O RCX °Ñ¼Æ¹w©w¦s©ñ¦ì§}¡ARSP¡Ï8H ¬O RDX ¹w©w¦s©ñ¦ì§}¡A¨ä¥L¨Ì¦¹Ãþ±À¡C¦]¦¹²Ä¤­­Ó°Ñ¼Æ´N­n¦s©ñ¦b¦ì§}¬O¡uRSP¡Ï20H¡vªº°ïÅ|¸Ì¡A²Ä¤»­Ó°Ñ¼Æ´N­n¦s©ñ¦b¦ì§}¬O¡uRSP¡Ï28H¡vªº°ïÅ|¸Ì¡K¡K¨ä¾l¨Ì¦¹Ãþ±À¡C

PTR ¹Bºâ¤l

¯à¶i¦æ¹Bºâªº x86 «ü¥O¡A¦pªG»Ý­n¨â­Ó¹Bºâ¤¸¡A¨Ò¦p ADD¡BSUB¡BXOR¡K¡Kµ¥¡A³o¨â­Ó¹Bºâ¤¸ªº¦ì¤¸¼Æ³£­n¬Û¦P¡A¨Ò¦p¤£¯à¥Øªº¹Bºâ¤¸¬O¤Q¤»¦ì¤¸¡A¦Ó¨Ó·½¹Bºâ¤¸¬O¤K¦ì¤¸¡C¦ý¦³®É­Ô¡A¥²¶·±j­¢Åý¤w©w¸qªºÅܼƧïÅܸê®ÆÃþ«¬¡A¥H²Å¦X¥t¤@­Ó¹Bºâ¤¸¡C³o®É­Ô´N¥i¥H¥Î PTR ¹Bºâ¤l¡A¨ä¥Îªk¬O¡G

type    PTR     expression

type ¬O§ïÅܤ§«áªº¸ê®ÆÃþ«¬¡Aexpression «h¬OÅܼƦWºÙ©Î¬O¶¡±µ©w§}ªº°O¾ÐÅéÅܼơC¨Ò¦p©³¤Uªº¨Ò¤l¡G

number  DQ      589abh
        ⁝
        mov     rax,112233h
        mov     ax,WORD PTR number

¤@¶}©l©w¸q number ¬O¥|¦r²ÕÅÜ¼Æ ( 64 ¦ì¤¸ )¡A°²·Qµ{¦¡«á¨Ó»Ý­n§â number ¤§­È²¾¤J AX ¸Ì¡C¦ý AX ªø«×¬°¦r²Õ ( 16 ¦ì¤¸ )¡A¦]¦¹¥Î¡uWORD PTR¡v±j­¢ number ¼È®É§ï¦¨¦r²Õªº¸ê®ÆÃþ«¬¡C³o®É­Ô­n§â number ¤§¼Æ­È¼È®É·Q¦¨¬O 89ABH¡C°õ¦æ§¹¡umov ax,WORD PTR number¡v«á¡A¥u¦³ AX ¤§­È§ïÅÜ¡ARAX ¨ä¥L¦ì¤¸¤´¤£ÅÜ¡A©Ò¥H RAX ¤§­ÈÅܬ° 1189ABH¡C

ª½±µ©w§}»P¶¡±µ©w§}

x86 «ü¥O¥i¥H°w¹ï°O¾ÐÅ餺ªº¸ê®Æ°µ¹Bºâ¡A³o¨Ç«ü¥O¥]§t MOV¡BADD¡BSUB¡BXOR¡K¡Kµ¥¡C­n¹ï°O¾ÐÅ餺ªº¸ê®Æ¶i¦æ¹Bºâ¡A¥²¶·¥ý«ü©w¬O­þ¤@­Ó¦ì§}ªº°O¾ÐÅé¡A«ü©w°O¾ÐÅ骺¦ì§}ºÙ¬°©w§}¡A¤j­P¥i¥H¤À¬°¨âºØ¡G①ª½±µ©w§} ( direct addressing ) »P②¶¡±µ©w§} ( indirect addressing )¡C

¥ý¤¶²Ðª½±µ©w§}¡C¨ä¹ê»¡¬ï¤F¡Aª½±µ©w§}¨ä¹ê´N¬O¦s¨úÅܼƦӤw¡A¨Ò¦p©³¤Uªº¨Ò¤l¡G

number  DQ      589abh
        ⁝
        mov     rax,number

¨ä¤¤ªº¡umov rax,number¡v´N¬O§Q¥Îª½±µ©w§}ªº¤è¦¡¡A§â number ©Ò¦b¦ì§}ªº°O¾ÐÅ餺®e¡A²¾¨ì RAX ¸Ì¡C¦b«e­±¦­¤w¤¶²Ð¹L³oºØ¤èªk¡A³o¸Ì·íµM¤£·|µe³D²K¨¬¡A³o¸Ì­n¤¶²Ð¦b x64dbg ªºªí¥Ü¤è¦¡¡C§Ú­Ìª¾¹D¡AML64.EXE ·|­pºâ number Åܼƪº¦ì§}¡A·í­n¦s¨ú¦¹ÅܼƮɡA¡uª½±µ¡v¨Ì¾Ú¦¹¦ì§}¥h¦s¨ú§Y¥i¡C°²³] number ªº¦ì§}¬O¡u13F753010¡v¡A¦b x64dbg ªº¤Ï²ÕĶ°ÏÅã¥Ü¦¹«ü¥O®É¡A¦pªG¥H

        mov     rax,13F753010

ªí¥Ü¡A¨º´N·|Åý¤H»~·|¬O§â±`¼Æ 13F753010 ²¾¤J RAX ¤º¡A©Ò¥H RAX ¤ºªº¼Æ­ÈÅܬ°¡u13F753010¡v¡C³o·íµM¬O¿ù»~ªº¡A¦]¦¹ x64dbg ·|¥H¤@¹ï¤¤¬A¸¹¡u[]¡v±N¦ì§}¬A¦í¨Óªí¥Ü¡A¹³¤U­±ªº¼Ë¤l¡G

        mov     rax,[13F753010]

¦]¦¹§Ú­Ì­n³o¼Ë·Q¡A·í¥H¤¤¬A¸¹¬A¦í¼Æ­È®É¡A¦¹¼Æ­È¬Oªí¥Ü¦ì§}¡A¦Ó¾ã­Ó¦¡¤l ( ´N¬O¡u[¦ì§}]¡v) ¥Nªí¦¹¦ì§}¤ºªº¼Æ­È¡CÁ|¤W­±ªº¨Ò¤l¡A¡u[13F753010]¡v¥Nªí°O¾ÐÅé¦ì§} 13F753010 ³Bªº¤º®e¡A¬d¾\¦¹¦ì§}ªº°O¾ÐÅé¡Aµo²{¨ä¤º®e¬°¡u589AB¡v¡A§â¥¦²¾¤J RAX ¸Ì­±¡A©Ò¥H°õ¦æ§¹³o¹D«ü¥O«á¡ARAX ¤ºªº¼Æ­È´N¬O¡u589AB¡v¡A¨£¥k¹Ï¡C¨Æ¹ê¤W¡A¦b¼¶¼g²Õ¦X»y¨¥­ì©lµ{¦¡®É¡A§â

number  DQ      589abh
        ⁝
        mov     rax,number

¼g¦¨

number  DQ      589abh
        ⁝
        mov     rax,[number]

¤]¬O¥i¥Hªº¡A¨âªÌ·N¸q¬Û¦P¡C

±µ¤U¨Ó»¡©ú¶¡±µ©w§}¡C­è­è¤¶²Ðªºª½±µ©w§}¤¤¡A¤¤¬A¸¹¤ºªº¦ì§}¤£·|¦]¬°¬Y¨Çª¬ªp§ïÅÜ¡A¬O©T©wªº¡F¦Ó¶¡±µ©w§}«h¬O²o¯A¨ì¥H¼È¦s¾¹¬Æ¦Ü¦A¥[¤W¨ä¥L¼Æ­È¥N´À¤¤¬A¸¹¤ºªº¦ì§}¡C³o¼Ëªº¦s¨ú¤è¦¡¡ACPU ¦b¦s¨ú®É´N¥²¶·¥ý¬d¾\¼È¦s¾¹¤º®e¡A¦A¨Ì¦¹¤º®e¨M©w¦ì§}¡AµM«á¤~¨Ì¾Ú¦¹¦ì§}¦s¨ú¡C¦]¬°¦h¤F¦V¼È¦s¾¹¬d¾\ªº¨BÆJ¡A©Ò¥HºÙ¬°¡u¶¡±µ¡v¡C

¶¡±µ©w§}¤S¤À¦¨³\¦hÃþ¡G⑴¥u¦³¼È¦s¾¹¡B⑵¼È¦s¾¹¥[°¾²¾¦ì§}¡B⑶¤Gªº¾­¦¸¤è­¼¥H¼È¦s¾¹¡B⑷¤Gªº¾­¦¸¤è¦A­¼¥H¼È¦s¾¹¥[°¾²¾¦ì§}¡B⑸¨â­Ó¼È¦s¾¹¥[°¾²¾¦ì§}¡A¦A¥[¤W¥t¤@­Ó¼È¦s¾¹¡A¦A¥[¤W°¾²¾¦ì§}¡C¦b³o¸Ì¤p¤ì°¸¥u¤¶²Ð«e¨âÃþ¡C­nª`·Nªº¬O¡A¦b Win64 ¤¤°¾²¾¦ì§}¹w³]­È¬O¥H 32 ¦ì¤¸ªº¼Æ­Èªí¥Ü¡A³Ì¦h¤£¯à¶W¹L 0FFFFFFFFH¡A¦pªG¶W¹L­n¦b³sµ²®É¤U¹F¡u/LARGEADDRESSAWARE:NO¡v¿ï¶µ¡C

⑴¡B²Ä¤@ºØ¬O¶¡±µ©w§}³Ì²³æªº±¡§Î¡A¶È¶È¥H¤@­Ó¼È¦s¾¹¥N´À¤¤¬A¸¹¤ºªº¦ì§}¡A¦p¤U­±ªºµ{¦¡¡G

        mov     r9,13F753010H
        mov     rax,[r9]

¨ä¤¤¡umov rax,[r9]¡v´N¬O§Q¥Î²Ä¤@ºØ¶¡±µ©w§}¡CCPU ·|¥ý¹î¬Ý R9 ¤§­È¬°¦ó¡Aµo²{¬O¡u13F753010¡v¡A´N¨ì¦¹¦ì§}¥h¡A§â¦s©ñ¦b³o­Ó¦ì§}ªº¤º®e²¾¤J RAX ¸Ì­±¡C©ÎªÌ¤]¥i¥H³o¼Ë·Q¡A§â R9 ¬Ý¦¨¬O¤@­Ó«ü¼Ð¡A©Ò«ü¦Vªº°O¾ÐÅé¦ì§}¬O¡u13F753010¡v¡A©ó¬O§â¦¹°O¾ÐÅ餺®e²¾¤J RAX ¤º¡C¦p¥k¹Ï©Ò¥Ü¡C

¥i¯à·|¦³¤Hı±o¶¡±µ©w§}¦h¤F¤@­Ó¨BÆJ¡A°Z¤£³Â·Ð¡H³o·íµM¦³¦n³B¡A¦pªG§ïÅܼȦs¾¹ªº¼Æ­È¡A©Ò«ü¦Vªº¦ì§}´N¤£¦P¡A¦Ó¦s¨úªº°O¾ÐÅ餺®e´N·|¤£¦P¡C©¹«á¦pªG³B²z¤j¶q¸ê®Æ®É¡A´N¦³¥i¯à·|³o¼Ë¨Ï¥Î¡A¨Ò¦p¦b²Ä¤E³¹¤¤¥H¤E¤Q´X­Ó¦ì§}²Õ¦¨ªº°}¦C¡A­n¦s¨ú¦¹°}¦C¤¤ªº¤¸¯À´N¥i¥Î³oºØ¤èªk¡C

⑵¡B²Ä¤GºØ±¡§Îªº§Î¦¡¦b¤@¹ï¤¤¬A¸¹¤º§t¦³¤@­Ó¼È¦s¾¹¡A¨Ã¥B¥[©Î´î¤@­Ó±`¼Æ¡A¨Ò¦p¤U­±µ{¦¡ªº²Ä¤G¡B¤T¦æ¡G

        mov     r9,13F753010H
        mov     rax,[r9-8]
        mov     rcx,[r9+8]

·í CPU ­nŪ¨ú¡u[r9+8]¡v°O¾ÐÅ餺ªº¸ê®Æ®É¡A¥²¶·¥ý¨ú¥X R9 ¼È¦s¾¹¤§¼Æ­È¡A¦A¥[¤W 8¡A¤~¯à±o¨ì¯u¥¿­nŪ¨úªº¦ì§}¡A¦A¨ì¦¹¦ì§}¤WŪ¨ú¼Æ­È¡C¨Ò¦p¥k¹Ï¤¤¡A°õ¦æ§¹³o¤T¹D«ü¥O«á¡ARAX ¬° 928H¡ARCX ¬° 5F¡C

²Ä¤T¡B¥|ºØ½Ð°Ñ¾\²Ä¤Q¤­³¹¡C