- 论坛徽章:
- 0
|
最近写了一个linux内联汇编代码
#include <stdio.h>
int main(){
__asm__("jmp 0x2a\n\t"
"popl %esi\n\t"
"movl %esi,0x8(%esi)\n\t"
"xorl %eax,%eax\n\t"
"movl %eax,0x7(%esi)\n\t"
"movl %eax,0xc(%esi)\n\t"
"movl %esi,%ebx\n\t"
"movb $0xb,%al\n\t"
"leal 0x8(%esi),%ecx\n\t"
"leal 0xc(%esi),%edx\n\t"
"int $0x80\n\t"
"xorl %ebx,%ebx\n\t"
"movl %ebx,%eax\n\t"
"inc %eax\n\t"
"int $0x80\n\t"
"call -0x1f\n\t"
".string \"/bin/sh\""
);
}
#gdb a.out
(gdb)disassembly main
push %ebp
mov %esp,%ebp
sub $0x8,%esp
and $0xfffffff0,%esp
mov $0x0,%eax
add $0xf,%eax
add $0xf,%eax
shr $0x4,%eax
shl $0x4,%eax
sub %eax,%esp
jmp 0x4
popl %esi
mov %esi,0x8(%esi)
xor %eax,%eax
mov %eax,0x7(%esi)
mov %eax,0xc(%esi)
movl %esi,%ebx
movb $0xb,%al
lea 0x8(%esi),%ecx
lea 0xc(%esi),%edx
int $0x80
xor %ebx,%ebx
mov %ebx,%eax
inc %eax
int $0x80
call 0x4
das
bound %ebp,0x6e(%ecx)
das
jae 0x80483e8 <__libc_csu_fini+16>
add %cl,%cl
ret
为什么在gdb汇编代码中jmp 的地址和call的地址都成了0x4?真是奇怪了 |
|