能力值:
( LV2,RANK:10 )
|
-
-
2 楼
要用标号跳的吧。。。。实在不行就用文本编辑器改一下。。
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
因为是要写shellcode,向其他的程序里插入shellcode插入不了标号,只能用地址。
不过感谢一下,可以用标号来在自己的电脑上让这个shellcode跑起来。
|
能力值:
( 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编译,代码的地址看起来有点怪。
|
能力值:
( LV5,RANK:60 )
|
-
-
5 楼
我明白了,是直接用jmp相对短跳转的机器码0xeb直接写!
我用的kalilinux,3.7内核,gcc4.7.2,gdb7.4.1,成功实现了jmp跳转到call那里。
|
|
|