This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

Eliminar null en un hola mundo en nasm

  • 2 Replies
  • 1948 Views

0 Members and 1 Guest are viewing this topic.

Offline proxy_lainux

  • *
  • Underc0der
  • Posts: 133
  • Actividad:
    3.33%
  • Reputación 0
  • belial grimoire
    • View Profile

Eliminar null en un hola mundo en nasm

  • on: February 26, 2018, 12:34:02 am
Hola

Estoy aprendiendo a eliminar los nulls en ensamblador, lo estoy intentando con algo simple como un hola mundo en nasm, la manera en que lo hice fue haciendo un call y con xor en los demas registros para que pasara algo asi

Code: (asm) You are not allowed to view links. Register or Login
    global _start
     
    section .data
     
    section .text
     
    _start:
     
    jmp mess
     
    proc:
    xor rax, rax
    mov al, 1
    xor rdi, rdi
    mov dil, 1
    pop rsi
    xor rdx, rdx
    mov dl, 0x12       
    syscall
     
     
    ;exit
     
    xor rax, rax
    mov al, 60
     
    xor rdi, rdi
    mov dl, 11
    syscall
     
    mess:
    call proc
    MSG db 'Hola mundo x64',0x0A
    /code]


Así call mete en la pila MSG y luego lo retoma RSI con un pop, solo que no recuerdo si lo retoma en esp o en esp+4, lo analice en GDB pero no estoy seguro si es rsp o rsp + 4

(gdb) x/s $rsi
0x4000a8 <MSG>: "Hola mundo x64"

¿Alguien me podría decir cual de las dos formas sería la correcta?

[code]|------------
|rsp ---- MSG
---------------------

Code: You are not allowed to view links. Register or Login
|
|rsp + 4 ---- MSG
/code]

Pero también quisiera saber si hay otra forma de lograr eliminar los null sin tener que hacer el call

así lo había dejado pero me encontré con el problema de no saber como eliminar el null de rsi

[code=asm]global _start

section .data

MSG: db 'Hola mundo x64'
length: equ $-MSG

section .text

_start:

xor rax, rax
mov al, 1
xor rdx, rdx
mov bl, 1
xor rsi, rsi
mov rsi, MSG
xor rdx, rdx
mov dl, length
syscall


;exit

xor rax, rax
mov al, 60

xor rdi, rdi
mov dl, 11
syscall

Si ven, el único que me faltaría es RSI que analizandolo con objdump se vería de ésta forma

Code: You are not allowed to view links. Register or Login
00000000004000b0 <_start>:
  4000b0: 48 31 c0              xor    rax,rax
  4000b3: b0 01                mov    al,0x1
  4000b5: 48 31 d2              xor    rdx,rdx
  4000b8: b3 01                mov    bl,0x1
  4000ba: 48 31 f6              xor    rsi,rsi
  4000bd: 48 be dc 00 60 00 00 movabs rsi,0x6000dc
  4000c4: 00 00 00
  4000c7: 48 31 d2              xor    rdx,rdx
  4000ca: b2 0e                mov    dl,0xe
  4000cc: 0f 05                syscall
  4000ce: 48 31 c0              xor    rax,rax
  4000d1: b0 3c                mov    al,0x3c
  4000d3: 48 31 ff              xor    rdi,rdi
  4000d6: b2 0b                mov    dl,0xb
  4000d8: 0f 05                syscall

¿Pero que otra forma se les ocurre que podría eliminar esos null's?

Y ya de paso otra pregunta más, RET solo se utiliza en EBP o también en ESP, me explico

Code: You are not allowed to view links. Register or Login
|
|rsp + 8
|------------
|rsp + 4
|-----------
|rbp
|------
|ret
|-------
|rbp + 8
--------------
---------------------------------
Code: You are not allowed to view links. Register or Login
|
|rsp + 8
|------------
|rsp + 4
|-----------
|ret
--------------
« Last Edit: February 27, 2018, 11:57:43 pm by proxy_lainux »

Offline .:UND3R:.

  • *
  • Underc0der
  • Posts: 226
  • Actividad:
    0%
  • Reputación 0
    • View Profile

Re:Eliminar null en un hola mundo en nasm

  • on: February 27, 2018, 03:14:09 am
Code: (asm) You are not allowed to view links. Register or Login
movabs rsi,0x6000dc
Modifiquemos un poco este valor: 0x006000dc

Code: You are not allowed to view links. Register or Login
0x006000dc + 0x11111111 = 0x117111ED
Podrías hacer esto:
Code: (asm) You are not allowed to view links. Register or Login
mov rsi, 0x117111ED
sub rsi, 0x11111111

Saludos

EDIT: Con respecto a eso de "usar" no te entendí muy bien pero en realidad tanto RBP como RSP su usan.

RSP siempre apunta a la cima del stack, mientras que RBP es utilizado como Frame Pointer (epílogo y prólogo):
« Last Edit: February 27, 2018, 03:18:17 am by .:UND3R:. »

Offline proxy_lainux

  • *
  • Underc0der
  • Posts: 133
  • Actividad:
    3.33%
  • Reputación 0
  • belial grimoire
    • View Profile

Re:Eliminar null en un hola mundo en nasm

  • on: February 27, 2018, 11:57:01 pm
Claro, no lo había pensado en sub

Muchas gracias.

Lo del ret solo es una duda sobre la posición del stack, pero no importa mucho.