1. 程式人生 > 其它 >逆向學習第五天

逆向學習第五天

標誌暫存器要記的: 1.進位標誌暫存器CF:如果運算結果的最高位產生了一個進位或借位,那麼,其值為1,否則其值為0 首先應該確定數字的寬度 (確定資料寬度之後才能說什麼是最高位) (無符號計算的時候看這個標誌位) 2.奇偶標誌位PF:奇偶標誌位PF用於反映運算結果中“1”的個數的奇偶性,如果"1"的個數位偶數,則PF的值為1,否則為0 3.輔助進位標誌AF: 在發生下列情況時,輔助進位標誌AF的值會被置為1,否則其值為0 (1)在字操作時,發生低位元組向高位元組進位或借位時 (2)在位元組操作時,發生低4位向高4位進位或者借位時 32位時FFFFFFFF看這個進不進位 16位時FFFF看這個進不進位 8位FF看這個進不進位 4.零標誌ZF:零標誌ZF用來反映執行結果是否為0 如果運算結果為0,則其值為1,否則其值為0,在判斷運算結果是否為0時,可使用此標誌位 (mov 指令不算運算)(mov eax,0 ZF不改變) xor eax,eax(這個指令的作用時清零) 5.符號標誌SF(sign flag):符號標誌SF用來反映運算結果的符號,他與運算結果的最高位相同 6.溢位標誌位OF(有符號運算的看這個OF) 溢位主要是給有符號運算使用的,在有符號的運算中,有如下規律: 負+負=負 如果結果是正數,則說明有溢位 正+負 永遠都不會溢位 ADC :帶進位的加法(使用CF標誌暫存器,如果CF為一就要將結果加1) 格式:ADC R/M,R/M/IMM 兩邊不能同時為記憶體 寬度要一樣 ADC AL,CL ADC byte ptr DS:[12FFC4],2 SBB指令:帶借位的減法 XCHG指令:交換指令(不能有立即數) xchg eax,ecx(交換eax和ecx的值) MOVS指令:mov移動資料 記憶體-記憶體(幾乎所有的指令都不能將資料從記憶體移向記憶體) 從esi移到edi movs dword ptr ES:[EDI],DWORD PTR DS:[ESI] 將DS:[ esi]裡面的資料放到ES:[edi]然後自動esi+4 edi+4 如果將dword換成word就自動+2 rep指令: 根據cx的值重複執行後面的指令 rep movs rep stos 當DS位位0時是加,DS位為1是減 STOS指令:將AL/AX/EAX的值儲存到EDI指定的記憶體單元 STOS BYTE PTR ES:[EDI] STOS WORD PTR ES:[EDI] STOS DWORD PTR ES:[EDI] 具體是AL/AX/EAX那就要看具體的寬度是多少,STOS指令會受D(Dirction Flag)位影響,當D位為1的時候,EDI的值會減,當D位為0時,EDI的值會加 MOVS指令也會受D位影響 之前往記憶體裡面寫內容的時候我們都用的時DS:[],現在如果要用到EDI的時候就需要用到ES:[EDI] cld:從低地址向高地址傳送 std:從高地址向低地址傳送