Получил ошибку сегментации после запуска скомпилированного файла asm

segment .text
    global _start

_start:
    jmp call_shellcode

shellcode:

    pop rbx
    xor rax, rax

    mov [rbx+7], al
    mov [rbx+8], rbx
    mov [rbx+16], rax

    mov al, 59
    lea rdi, [rbx+7]
    lea rsi, [rbx+8]
    lea rdx, [rbx+16]

    syscall
call_shellcode:
    call shellcode
    shellpath db "/bin/sh0aaaaaaaabbbbbbbb"

Я попытался запустить программу, скомпилированную из этого asm-файла. Я проверял каждый шаг, думал, что все в порядке, но все равно получаю ошибку сегментации. Может ли кто-нибудь помочь мне с этим?


person xyu    schedule 21.02.2016    source источник
comment
Спасибо! так что я должен добавить в конце?   -  person xyu    schedule 21.02.2016
comment
да .. Я новичок в asm и шеллкоде. Этот код предназначен для запуска оболочки, где путь к оболочке указывает на каталог оболочки.   -  person xyu    schedule 21.02.2016
comment
Я удалил свои старые комментарии, потому что начинаю понимать, что пытается сделать код. Кажется, хитрым способом пытается получить адрес shellpath, выталкивая его из стека (оставленный там call). Откуда это взялось?   -  person lurker    schedule 21.02.2016
comment
это одно из упражнений, которые я делаю. Есть ли у вас какие-либо предложения по изменению этого кода, чтобы он работал?   -  person xyu    schedule 21.02.2016
comment
Проблема в том, что код пытается записать значение в сегмент .text, что не разрешено. Вот простой пример кода x86_64, который порождает оболочку.   -  person lurker    schedule 21.02.2016
comment
это сработает, но мне нужно поместить окончательный шеллкод в программу на C. Вот почему я использую вышеуказанный формат   -  person xyu    schedule 21.02.2016
comment
Если вы попытаетесь записать в текстовый сегмент, произойдет сбой. Вот почему вы видите ошибку.   -  person lurker    schedule 21.02.2016
comment
Я удалил заголовок сегмента .text, но он все еще дает мне ту же ошибку... вздох   -  person xyu    schedule 21.02.2016
comment
Вероятно, по умолчанию используется сегмент кода (текста). И вы не можете определить код в разделе bss, который является разделом, в который вы помещаете записываемые данные.   -  person lurker    schedule 21.02.2016