Переписываем небольшой execve шеллкод

Проходя черезhttp://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html

Я понял программу Nasm, которая вызываетexecve и пытался переписать это.

Некоторая справочная информация:

int execve(const char *filename, char *const argv[], char *const envp[]);

Так,eax = 11 (номер вызова функции дляexecve),ebx следует указать на,char* filenameecx следует указать наargv[] (который будет таким же, какebx так как первый аргумент является*filename сам, например "/ Бен / ш» в этом случае) иedx будет указывать на (envp[]null в этом случае).

Оригинальный код носа:

global _start

section .text
_start:

xor eax, eax
push eax

; PUSH //bin/sh in reverse i.e. hs/nib//

push 0x68732f6e
push 0x69622f2f

mov ebx, esp

push eax
mov edx, esp

push ebx
mov ecx, esp

mov al, 11
int 0x80

Стек выглядит следующим образом:

Теперь я попытался оптимизировать это, уменьшив несколько инструкций. Я согласен, что доmov ebx, esp код останется прежним. Тем не менее, так какecx нужно будет указать наebxЯ могу переписать код следующим образом:

global _start

section .text
_start:

xor eax, eax
push eax

; PUSH //bin/sh in reverse i.e. hs/nib//

push 0x68732f6e
push 0x69622f2f
mov ebx, esp

mov ecx,ebx

push eax
mov edx, esp

mov al, 11
int 0x80

Однако, я получаю ошибку сегментации, когда я запускаю свой переписанный код.

Мой стек выглядит следующим образом:

Есть идеи, почему переписанный код не работает? Я'Мы также запустили GDB, и значения адресов соответствуют моим представлениям, но он просто победил.Т беги.

Ответы на вопрос(1)

Ваш ответ на вопрос