我想学习的execve的shellcode,
操作系统:Linux 2.6.39.4 BT
根@ BT:〜/#利用猫gshell.s
.globl _start
_start:
nop
jmp MyString
shell:
popl %esi
xorl %eax,%eax
movl %al,9(%esi)
movl %esi,10(%esi)
movl %eax,14(%esi)
movb $11,%al
movl %esi, %ebx
leal 0xa(%esi),%ecx
leal 0xe(%esi),%edx
int $0x80
movl $1,%eax
movl $0,%ebx
int $0x80
MyString:
call shell
shellvar:
.ascii "/bin/bashADDDDCCCC"
根@ BT:〜/利用#作为-gstabs -o gshell.o gshell.s
根@ BT:〜/利用#LD -o gshell gshell.o
根@ BT:〜/利用#./gshell分段故障(核心转储)根@ BT:〜/利用#
GDB:
(GDB)断裂* _start断点1在0x8048054:文件gshell.s,线6。
(GDB)R启动程序:/根/利用/ gshell
计划接收信号SIGSEGV,分割过错。 壳()在gshell.s:14 14 MOVB%的Al,9(%ESI)
(GDB)打印/ X $ ESI $ 1 = 0x804807a(GDB)X / 16CB $ ESI 0x804807a:47 '/' 98 'B' 105的 'i' 110 'N' 47 '/' 98 'B' 97的 'A' 115 'S' 0x8048082:104 'H' 65 'A' 68 'd' 68 'd' 68 'd' 68 'd' 67 'C' 67 'C'(GDB)
从上面的输出似乎我已经成功地pope'd / bin / sh的地址进入ESI寄存器但是,当我尝试移动到0 9(%ESI) - >它会导致分段错误。 甚至试图修改此程序:MOVL $ 0 $ ESI。 要知道,如果它被限制在0x804807a地址写? 这导致该故障? 以及如何我可以成功运行该的shellcode进行
谢谢,littlejack