逆向學習第五天
阿新 • • 發佈:2021-07-22
標誌暫存器要記的:
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:從高地址向低地址傳送