Mover byte a direcciones dentro de un registro

0

Estoy intentando escribir un decodificador de inserción de shell (mi codificador funciona como se esperaba). Pero cuando intento mover un byte a la dirección dentro de un registro me enfrento a una falla de Segmentación.

El error ocurre en esta línea:

mov    BYTE PTR [rdi],bl

Aquí está mi código de ensamblaje:

global _start

section .text

_start:
    jmp call_decoder
    rri_shellcode: db 0x48,0x48,0x5b,0x48,0x90,0x5b

init_decoder:
    lea rsi, [rel rri_shellcode]
    mov rdi, rsi
    inc rdi
    xor rax, rax
    add rax, 1
    xor rbx, rbx

loop_decoder:
    mov bl, byte [rsi + rax + 1]
    mov byte [rdi], bl
    inc rdi
    inc rax
    loop loop_decoder

call_decoder:
    call init_decoder

¿Qué sucede si no puedo mover el byte dentro de bl a la dirección almacenada en rdi?

PS .: Sé que el bucle no funcionará porque todavía no configuré rcx.

Gracias de antemano,

: wq!

    
pregunta alacerda 29.06.2017 - 04:20
fuente

1 respuesta

3

rdi apunta a rri_shellcode + 1. Esto se encuentra en el segmento .text que no se puede escribir de forma predeterminada, lo que provoca la falla de segmentación.

Puede vincularlo mediante la opción ld -N si realmente necesita la sección .text para convertirse en lectura / escritura.

    
respondido por el rhodeo 29.06.2017 - 06:15
fuente

Lea otras preguntas en las etiquetas