Ensamblaje - Instrucción LODS

En criptografía, un cifrado César es una de las técnicas de cifrado más simples conocidas. En este método, cada letra de los datos que se van a cifrar se reemplaza por una letra con un número fijo de posiciones en el alfabeto.

En este ejemplo, cifremos un dato simplemente reemplazando cada alfabeto en él con un cambio de dos alfabetos, así a será sustituido por c, b con d y así.

Usamos LODS para cargar la cadena original 'contraseña' en la memoria.

section .text
   global _start         ;must be declared for using gcc
	
_start:                  ;tell linker entry point
   mov    ecx, len
   mov    esi, s1
   mov    edi, s2
	
loop_here:
   lodsb
   add al, 02
   stosb
   loop    loop_here          
   cld
   rep     movsb
	
   mov     edx,20        ;message length
   mov     ecx,s2        ;message to write
   mov     ebx,1         ;file descriptor (stdout)
   mov     eax,4         ;system call number (sys_write)
   int     0x80          ;call kernel
	
   mov     eax,1         ;system call number (sys_exit)
   int     0x80          ;call kernel
	
section .data
s1 db 'password', 0 ;source
len equ $-s1

section .bss
s2 resb 10               ;destination

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

rcuuyqtf