滴水逆向_学习笔记

滴水逆向第三期学习笔记


第六节 2、标志寄存器

<h4>记住知识点:</h4> <h6>1、各个标志寄存器的名称和对应的编号。</h6> <h6>2、哪些是条件标志,哪些是控制标志(TID是控制标志,其他全是条件标志)。</h6> <h6>3、不同标志寄存器的作用。</h6> <h6>4、CF与OF的区别,如果做无符号数运算,关注CF标志位(CF标志位与<code>无符号数运算</code>有关);如果做有符号数运算,关注OF标志位(OF标志位与<code>有符号数运算</code>有关)。</h6> <h6>5、使用标志位前,先要确认数据是有符号还是无符号,确认数据宽度。</h6> <hr /> <hr /> <h4>巧记方法:CF、PF、AF、ZF</h4> <h4>C-P-A-Z----&gt; 产品安装(0,2,4,6)</h4> <h4>SF、TF、IF、DF、OF</h4> <h4>stido----&gt;对应<code>stdio.h</code>头文件,将<code>d</code> -- <code>i</code>互换就是标志寄存器顺序(7,8,9,10,11)</h4> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/c2d1670b3637c04d350f02bb2017fe8a" alt="" /></p> <h2>0、CF进位标志:</h2> <h4>用于反映运算是否产生进位或借位。如果<code>运算结果</code>的<code>最高位产生一个进位或借位</code>,则CF置1,否则置0。运算结果的最高位包括<code>双字操作的第32位</code>和<code>字操作的第16位</code>和<code>字节操作的第8位</code>。移位指令也会将操作数的最高位或最低位移入CF。</h4> <p>如果<code>eax:FFFF2222</code> <code>add eax,10000</code>执行后,进位---注:操作的是32位数据宽度,所以进位看第32位是否进位 <code>add ax,0x1</code>执行后,不会进位 <code>add ax,0xDDDC</code>执行后,进位---注:操作的是16位数据宽度,所以进位看第16位是否进位 <code>add al,0xDC</code>执行后,进位---注:操作的是8位数据宽度,所以进位看第8位是否进位</p> <h2>2、PF奇偶标志:</h2> <h4>解释1:用于反映<code>运算结果低8位</code>中“1”的个数。“1”的个数为偶数,则PF置1,否则置0。</h4> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/cfdb0b8d2dbd04ea48f827836f40bb89" alt="" /></p> <h2>4、AF辅助进位标志:</h2> <h4>算数操作结果的第三位(从0开始计数)如果产生了进位或者借位则将其置为1,否则置为0,常在BCD(binary-codedecimal)算术运算中被使用。</h4> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/c9f89e04e4639708c58e1018c6898139" alt="" /> <img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/bbda62030195cef4c3707f5e3f0bf988" alt="" /></p> <h2>6、ZF零标志:</h2> <h4>用于判断结果是否为0。运算结果0,ZF置1,否则置0。</h4> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/c45c4e0187d459a09a8163d19f612533" alt="" /></p> <h4>案例对比:</h4> <h6><code>XOR EAX,EAX</code> 修改ZF零标志位的值。</h6> <h6><code>MOV EAX,0</code> 不修改ZF零标志位的值。</h6> <h2>7、SF符号标志:</h2> <h4>符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。</h4> <h6>该标志被设置为有符号整型的最高有效位</h6> <h6>(0表示结果为正,1表示结果为负)</h6> <h6>意思其实就是,运算完之后看下符号位 是0(正)还是1(负)</h6> <h6>当然如果是无符号数运算就不用看了</h6> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/06393fa603ee729b6b0e9ace987f070e" alt="" /></p> <h2>11、OF溢出标志:</h2> <h6>一、学习CF与OF,要始终牢记一点。<code>CF是无符号数溢出标志</code>,<code>OF是有符号数溢出标志</code>。</h6> <h6>二、判断OF是否溢出定理:</h6> <h6><code>正 + 正 = 正</code> ;如果结果是负数,则说明有溢出</h6> <h6><code>负 + 负 = 负</code> ;如果结果是正数,则说明有溢出</h6> <h6><code>正 + 负</code>   ;永远不会溢出</h6> <h6>三、快速判断CF标志位的值是1或者0</h6> <h6><code>(方法1)</code>:</h6> <h6>看 <code>加数1</code>,<code>加数2</code>,和 <code>结果数3</code>的符号位即可。</h6> <h6>1 1 0 或者 0 0 1发生溢出,OF = 1。</h6> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/c9fb7b9e692a0077e32f7272c85dffb1" alt="" /></p> <h6><code>(方法2)</code>:</h6> <h6><code>加数1 ⊕ 加数2 ⊕ 结果数3 ⊕ 最高进位数4</code></h6> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/1e4744ad93e4fc46fce69e4b77bb0278" alt="" /></p> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/589cbfb6e57e4b9ee61662685c6a23e4" alt="" /><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/3266ec4ac19323a7cebb0a11e8a043c9" alt="" /></p>

页面列表

ITEM_HTML