day03.Jmp指令的使用

day03. Jmp指令的使用

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int  i,gi;
void  * address;
void  main()
{
     _asm {
         mov eax,eax
         mov address,offset _lb1
         jmp address
     }
     i = 2;
  _lb1:
     gi = 12;
}


假设我们构造一个mov指令,想要JMP指令跳转到mov此处,这段指令执行完后,EIP的指令会指向下面的一行地址,如果不指向下一行的地址程序会报错。因此我们在mov指令后面应该放一条指令,让程序回到正常的流程。JMP指令正好达成正个目的,看如下使用ollydbg工具调试在window里情况:


1
2
3
4
004113A0    C705  54754100  BA134100      MOV DWORD PTR DS:[ 417554 ],demo.004113BA
004113AA    FF25  54754100                JMP NEAR DWORD PTR DS:[ 417554 ]           ; demo.004113BA
004113B0    C705  64754100  02000000       MOV DWORD PTR DS:[ 417564 ], 2
004113BA    C705  68754100  0C000000      MOV DWORD PTR DS:[ 417568 ],0C


使用gcc工具调试在linux里情况:(注意:windows上的内嵌汇编不能通用的,需要理解完后,写成正向代码)

使用命令: gcc -S -masm=intel  demo03.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
         .file    "demo03.c"
         .intel_syntax noprefix
         .comm   i, 4 , 4
         .comm   j, 4 , 4
         .text
         .globl  main
         .type   main, @ function
main:
.LFB0:
         .cfi_startproc
         push    rbp
         .cfi_def_cfa_offset  16
         .cfi_offset  6 , - 16
         mov     rbp, rsp
         .cfi_def_cfa_register  6
         mov     QWORD PTR [rbp- 8 ], rdi
.L2:
         mov     edx, DWORD PTR j[rip]
         mov     rax, QWORD PTR [rbp- 8 ]
         mov     DWORD PTR [rax], edx
         mov     DWORD PTR j[rip],  12
         mov     DWORD PTR i[rip],  2
         jmp     .L2                      //指向j的内存地址(位移量)
         .cfi_endproc
.LFE0:
         .size   main, .-main
         .ident   "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609"
         .section        .note.GNU-stack, "" ,@progbits

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随行之旅

python国产化自动化

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值