首页
社区
课程
招聘
jmp指令遇到的问题
发表于: 2014-1-5 10:39 3761

jmp指令遇到的问题

2014-1-5 10:39
3761
最近几天在看Aleph One的smashing the stack for fun and profit,80年代的作品,很多东西跟现在不一样了,实现起来有点困难,经常遇到麻烦需要google。今天这个问题昨晚google了一晚也没找到。
先贴代码。

使用gcc -o shellcode -g shellcode.c编译链接。
gdb反汇编如下

我想实现的是jmp的相对当前地址的跳转,但是却变成了绝对地址跳转,跳到了0x0000002a。(跳转的字节数先不管正确与否,等能运行了再到gdb里计算,后面的call也一样)
是我指令的问题,还是编译选项的问题?
谢谢各位!
虚拟机截图图像质量不好,请包涵。
我只有20kx,全部家当拿出来了。。。。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
要用标号跳的吧。。。。实在不行就用文本编辑器改一下。。
2014-1-5 10:50
0
雪    币: 90
活跃值: (92)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
因为是要写shellcode,向其他的程序里插入shellcode插入不了标号,只能用地址。
不过感谢一下,可以用标号来在自己的电脑上让这个shellcode跑起来。
2014-1-5 10:53
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
指令错了,试试这个。
      1 int main()
      2 {
      3         __asm__("pushl %%eax\n\t"
      4                 "jmp L1\n\t"
      5                 ".byte 0xeb,0x2a\n\t"
      6                 "pushl %%ebx\n\t"
      7                 "L1:popl %%eax\n\t"
      8                 :::);
      9         return 0;
     10 }
~

反汇编
   0x00401190 <+0>:     push   %ebp
   0x00401191 <+1>:     mov    %esp,%ebp
   0x00401193 <+3>:     and    $0xfffffff0,%esp
   0x00401196 <+6>:     call   0x401210 <__main>
   0x0040119b <+11>:    push   %eax
   0x0040119c <+12>:    jmp    0x4011a1 <main+17>
   0x0040119e <+14>:    jmp    0x4011ca <cygwin_crt0+26>
   0x004011a0 <+16>:    push   %ebx
   0x004011a1 <+17>:    pop    %eax
   0x004011a2 <+18>:    mov    $0x0,%eax
   0x004011a7 <+23>:    leave
   0x004011a8 <+24>:    ret


eb 2a是近跳,jmp要写目的地址,   0x0040119e 的内容是eb 2a,下一句地址是   0x004011a0,    0x00401a0 +0x2a= jmp    0x4011ca <cygwin_crt0+26>,我也不是很熟,百度了下发现.byte似乎可以起到win下面的emit的作用。忘说了,具体能不能要在linux下试试,这是在cygwin下面的,gcc编译,代码的地址看起来有点怪。
2014-1-5 11:13
0
雪    币: 90
活跃值: (92)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
我明白了,是直接用jmp相对短跳转的机器码0xeb直接写!
我用的kalilinux,3.7内核,gcc4.7.2,gdb7.4.1,成功实现了jmp跳转到call那里。
2014-1-5 11:40
0
游客
登录 | 注册 方可回帖
返回
//