сборка кода оболочки - PullRequest
       3

сборка кода оболочки

1 голос
/ 08 ноября 2011

Я пытаюсь написать шелл-код, используя следующий asm-код, но я всегда получаю segfault на movl% esi, 0x8 (% esi), есть идеи, почему?На самом деле, только запуск movl% esi, 0x8 (% esi) делает ошибку сегмента.

void main() {
    __asm__(
    "mov $0x80, %edx\n\t"
    "jmp l1\n\t"
    "l2:popl %esi\n\t"
    "movl %esi,0x8(%esi)\n\t"
    "movb $0x0,0x7(%esi)\n\t"
    "movl $0x0,0xc(%esi)\n\t"
    "movl $0xb,%eax\n\t"
    "movl %esi,%ebx\n\t"
    "leal 0x8(%esi),%ecx\n\t"
    "leal 0xc(%esi),%edx\n\t"
    "int $0x80\n\t"
    "movl $0x1, %eax\n\t"
    "movl $0x0, %ebx\n\t"
    "int $0x80\n\t"
    "l1:call l2\n\t"
    ".string \"/bin/sh\"\n\t"
   );
  }

1 Ответ

4 голосов
/ 08 ноября 2011

Проблема, как сказал пользователь 786653, в том, что сегмент кода недоступен для записи.Вы можете писать в стеке, хотя:

subl $0x8, %esp        # make room
movl $0x0, 0x4(%esp)   # null
movl $0x0, (%esp)      # here too
movl $0xb, %eax        # syscall no. 11
movl %esi, %ebx        # pointer to string
leal 0x4(%esp), %ecx   # first null  (argv)
leal (%esp), %edx      # second null (envp)
int $0x80              # go
...