滴水逆向_学习笔记

滴水逆向第三期学习笔记


JMP指令

<h2>JMP指令:跳转指令</h2> <h4>功能等同于 <code>MOV EIP</code></h4> <h3>用法:</h3> <p>```c++ jmp short 标号 jmp near ptr 标号 jmp far ptr 标号 jmp 16位reg jmp word ptr 内存单元地址 jmp dword ptr 内存单元地址</p> <pre><code>-------------------- --- ### jmp short 标号 段内短转移 对IP的修改范围是-128~127 向前 移动时可以最多越过128个字节,向后 移动可以最多越过127个字节 依据位移进行转移,转移指令结束后,CS:IP指向标号处的指令 (IP)=(IP)+8位位移 ```c 8位位移 = 要跳转去的标号地址 - 减去jmp指令后第一条指令的起始地址 8位位移的范围是:-128~127 8位位移使用 补码 形式表示</code></pre> <h3>依据位移进行转移,跳转到标号s处开始执行指令</h3> <pre><code class="language-c">assume cs:codesg codesg segment start: mov ax,0 mov bx,0 jmp short s add ax,1 s: inc ax codesg ends end start </code></pre> <hr /> <hr /> <h3>jmp near ptr 标号</h3> <pre><code>段内近转移 (IP)=(IP)+16位位移</code></pre> <pre><code class="language-c">(CS) = 标号所在段的段地址 (IP) = 标号在段中的偏移地址</code></pre> <pre><code>依据段地址和偏移地址进行转移</code></pre> <pre><code class="language-c">assume cs:codesg codesg segment start: mov ax,0 mov bx,0 jmp far ptr s db 256 dup (0) s: add ax,1 inc ax codesg ends end start</code></pre> <h4>读出目的段地址和目的偏移地址</h4> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/087e3b334b23c148f1045e6e031fd2f8" alt="" /></p> <pre><code class="language-c">0B016A07 0B 01 ----- 010B 目的偏移地址 6A 07 ---- 076A 目的段地址 CS:IP 指向 076A:010B</code></pre> <hr /> <hr /> <p>jmp 16位reg</p> <pre><code>jmp 某一合法寄存器 : 用寄存器中的值修改IP寄存器中的值</code></pre> <pre><code class="language-c">jmp ax 指令执行前 ax=1000H CS=2000H IP=0003H 指令执行后 ax=1000H CS=2000H IP=1000H IP寄存器中的值被修改成和ax一样的了</code></pre>

页面列表

ITEM_HTML