send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[NASM] Reverse string

  • 2 Respuestas
  • 2455 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Sanko

  • *
  • Underc0der
  • Mensajes: 541
  • Actividad:
    0%
  • Reputación 0
  • ¿Puedes?
    • Ver Perfil
    • Underc0de
« en: Febrero 18, 2014, 06:12:47 am »
Bueno aqui os dejo mi primer código en ASM, tan solo da la vuelta a un string pero bueno, aun me cuesta pensar las cosas por este sector xd.
Don't judgue me.

Código: ASM
  1. ;Script for reverse strings
  2.  
  3. segment .data
  4.         ; text to print
  5.         output1 db 'Reversed: ', 0
  6.         len_output1 equ $-output1
  7.        
  8.        
  9. segment .bss
  10.         ;MAX LIMIT 50 bytes, 50 chars...
  11.         msg resb 50
  12.         lmsg resb 50
  13.        
  14.         ;creating 2 counters
  15.         counter resb 2
  16.         counter2 resb 2
  17.        
  18. segment .text
  19.        
  20.         global _start
  21.         _start:
  22.                 mov eax, 3                                      ;sys_read
  23.                 mov ebx, 0
  24.                
  25.                 mov ecx, msg                            ;leyendo input
  26.                 mov byte [counter], 0x30        ;counter as 0
  27.                 mov byte [counter2], 0x30       ;counter as 0
  28.                 mov edx, 50                            
  29.                 mov esi, lmsg
  30.                 int 0x80                                        ;call kernel
  31.                
  32.                
  33.         _loop:
  34.                 cmp byte [ecx], 0x00            ;comparing [ecx]
  35.                 je _reverse                                     ;jumping to reverse function
  36.                 inc ecx
  37.                 inc byte [counter]
  38.                 inc byte [counter2]
  39.                 jmp _loop                                       ;repeating
  40.                
  41.                
  42.         _reverse:
  43.                 cmp byte [counter2], 0x30       ;comparing counter2
  44.                 je _output                                      ;jumping to output function
  45.                 mov al, [ecx-1]                         ;last letter of msg
  46.                 mov [esi], al                           ;operation origin
  47.                
  48.                 dec byte [counter2]                     ;counter2 - 1
  49.                 dec ecx                                         ;ecx(msg) - 1
  50.                 inc esi                                         ;esi + 1
  51.                 jmp _reverse                            ;repeating
  52.                
  53.                
  54.         _output:
  55.                 int 0x80                                        ;call kernel
  56.                 mov eax, 4                                      ;sys_write
  57.                 mov ebx, 1                                      ;stdin
  58.                 mov ecx, output1                        ;printing output
  59.                 mov edx, len_output1            ;length of msg
  60.                
  61.                 int 0x80
  62.                 mov eax, 4
  63.                 mov ebx, 1
  64.                 mov byte [esi+1], 0xA
  65.                 mov ecx, lmsg
  66.                 mov edx, 50d
  67.                 int 0x80
  68.                
  69.                 mov eax, 1                                      ;sys_exit
  70.                 int 0x80
      
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #1 en: Febrero 21, 2014, 03:25:07 pm »
No esta mal, aunque te tienes que acostumbrar a no hacer contadores con variables mientras tengas registros libres.

Código: ASM
  1. ; FASM 1.71.17  y Windows XP Sp3.
  2. ; Juan fary
  3. ; Dar la vuelta a una cadena.
  4.  
  5. include 'win32ax.inc'
  6.  
  7. .data
  8.  
  9.     cadena      db 'Hola me llamo Juan',0  ; cadena a dar la vuelta
  10.     buffer      rb 50 ; buffer de destino cadena al reves
  11.  
  12. .code
  13. start:
  14.     mov ecx, -1
  15.  
  16.     StrLen:    ; obtenemos longitud de la cadena
  17.     inc ecx
  18.     cmp byte[cadena+ecx],0
  19.     jne StrLen
  20.  
  21.     StrReverse: ; le damos la vuelta
  22.     dec ecx
  23.     mov dl, byte[cadena+ecx]
  24.     mov byte[buffer+eax], dl
  25.     inc eax
  26.     cmp ecx,-1
  27.     jne StrReverse
  28.  
  29.     invoke MessageBoxA,0 ,buffer ,0 ,0 ; Mostramos el resultado
  30.  
  31.     ret
  32.  
  33. .end start
  34.                      

Desconectado Sanko

  • *
  • Underc0der
  • Mensajes: 541
  • Actividad:
    0%
  • Reputación 0
  • ¿Puedes?
    • Ver Perfil
    • Underc0de
« Respuesta #2 en: Febrero 22, 2014, 07:52:03 am »
Perfecto bro, lo tendre en cuenta para el próximo.
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

 

¿Te gustó el post? COMPARTILO!



[Guía NASM] Introducción a Netwide Assembler (Partes 1 y 2) (Descarga PDF)

Iniciado por yoyomismo

Respuestas: 5
Vistas: 6983
Último mensaje Abril 10, 2013, 12:07:21 pm
por yoyomismo
Socket con nasm... al fin lo logre

Iniciado por proxy_lainux

Respuestas: 2
Vistas: 2496
Último mensaje Julio 20, 2013, 07:43:30 pm
por Expermicid
RunPE NASM

Iniciado por ragaza

Respuestas: 0
Vistas: 671
Último mensaje Abril 04, 2018, 06:01:24 am
por ragaza