movs 指令用於將乙個記憶體運算元的值「複製」到另乙個記憶體運算元,使用 movs 前要把目標記憶體的位址移入 edi,源目標記憶體移入 esi。(記憶方法:d表示destination,目標;s表示source,源)
執行指令,注意 es:[edi] 和 ds:[esi] 的區別,兩個段不一樣。
movs dword ptr es:[edi],dword ptr ds:[esi]
結果如下,edi 指向的記憶體變成了2。
指令執行後,edi 和 esi 均+4,這個取決於方向標誌位,如果d標誌為0,則+4,如果d標誌為1,則-4。如果記憶體寬度限定為 word 或 byte,則相應地會±2或±1.
因為 edi 和 esi 會自動+4,利用這個特性,配合 rep 指令可以快速批量修改大量記憶體。
stos 指令將 al/ax/eax 的值儲存到 [edi] 指定的記憶體單元。
執行stos byte ptr es:[edi]
將 0x0019ff6c 的低8位修改為78,同時 edi 會+1.
rep 指令可用於重複執行 movs 和 stos,重複次數由 ecx 指定。
舉例:將棧頂的10個dword 複製到 0x402000
mov ecx,0xa
mov edi,crackme.00402000
mov esi,esp
rep movs dword ptr es:[edi],dword ptr ds:[esi]
結果如下,可以看到 esi,edi 都增加了28h,也就是十進位制的40,記憶體也成功複製了。
rep 配合 stos 則可以快速初始化大量記憶體,比如,將 0x402000 開始的40個位元組初始化為ff
mov ecx,0a
mov edi,crackme.00402000
mov eax,-1
rep stos dword ptr es:[edi]
結果如下
Win32彙編基礎
常用指令 mov 目標運算元,源運算元 mov eax,0x0 進行資料傳遞 movzx mov zero x 以0填充高位,用法同上,push poppushad 所有暫存器壓棧 8個 popad 所有暫存器出棧 8個 lea 取位址指令,類似c語言中的 call 呼叫函式指令 add 加 sub...
Win32彙編 實數
386 選擇的處理器 model flat,stdcall option casemap none 指明識別符號大小寫敏感 include kernel32.inc 要引用的標頭檔案 includelib kernel32.lib 要引用的庫檔案 includelib msvcrt.lib 引用c庫...
開始學習win32彙編
前段時間對於csdn的部落格系統徹底失望,在我現在寫的東西都還不知道能不能正常發出去,鬱悶,加上過年有這麼久沒有來了。這段時間開始學習彙編,說到彙編,大學開過兩門相關課程,微機原理和微控制器都是學這方面的,不過那都是8086,51級別的彙編,感覺根本跟不上時代,那時候學的還不錯 現在想學習學習win...