Ensamblador

Páginas: 6 (1468 palabras) Publicado: 5 de agosto de 2015
Ensamblador en GNU/Linux

Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Introducción
¿Para qué vale saber programar en ensamblador?
Optimización
en cuanto a tamaño.
en cuanto a velocidad de ejecución (desenrollado
de bucles, sin redundancias, etc.).
Modificación de binarios (no tenemos el código
fuente):
adaptación de drivers
cracking
virus

Pablo Garaizar Sagarminaga
Copyleft, allrights reversed

Ensamblador en UNIX
Llamadas al sistema (syscalls):

Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Ensamblador en UNIX
Llamadas al sistema (syscalls):
Normalmente los programas no hacen syscalls,
llaman a funciones de la libC:
...
push string
call printf
...

Programa en C

printf:
...
...
...
int 80h

libC

KERNEL

Núcleo
Pablo Garaizar Sagarminaga
Copyleft, allrights reversed

Ensamblador en UNIX
Llamadas al sistema (syscalls):
Diferentes maneras de utilizarlas en Linux, BSD, etc:
open(path, flags, mode);
Linux

FreeBSD

open:
mov eax,
mov ebx,
mov ecx,
mov edx,
int 80h

syscall:
int 80h
ret
open:
push dword mode
push dword flags
push dword path
mov eax, 05h
call syscall

05h
path
flags
mode

Pablo Garaizar Sagarminaga
Copyleft, all rights reversed Ensamblador en UNIX
Diferentes sintaxis para programar:
Intel: nasm
operación destino, fuente: mov eax, 05h
AT&T: gas, as
operación fuente, destino: movl $0x05, %eax
Sufijos en los opcodes (l(ong), w(ord), b(byte))
indicando el tamaño de los operandos.
Los registros han de ir precedidos de “%” y los literales
de “$”.
Diferencias en referencias:
mov edx, [ebp+ecx*4+040000000h] =
movl$0x4000000(%ebp,%ecx,4), %edx
Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Primer programa con nasm
section .text
global _start
msg db 'Hello, world!',0Ah
len equ $ - msg
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 80h
mov eax,1
int 80h
nasm –f elf hello.asm –o hello.o
ld hello.o –o hello
Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Ensamblar y enlazar
Ensamblado y enlazado:Ensamblar con nasm:
nasm –f elf fichero.asm –o fichero.o
Enlazado:
ld:
ld -s --dynamic-linker /lib/ld-linux.so.2
-lc fichero.o -o fichero
gcc:
gcc fichero.o -o fichero
Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Demostración

Programar un "hola, mundo!" con nasm.
Ensamblarlo y enlazarlo.
Ejecutarlo.
Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Programando en GNU/LinuxEstructura de un programa con nasm:
section .bss: datos sin inicializar:
temporal

resb 255

section .data: datos inicializados:
 

contador db 0Ah (
contador EQU 0Ah)
zerobuf: times 64 db 0
section .text: código del programa
mov eax, 01h
...
Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Programando en GNU/Linux
Condiciones iniciales:
Registros
En kernels > 2.2: todos los registros a0.
En kernels < 2.2: ebp y ecx distintos de 0.
Pila:
[esp] = argc
[esp+4] = argv[0]
[esp+8] = argv[1]
...
[esp+n*4] = envp

Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Programando en GNU/Linux
Estructura de un ejecutable en GNU/Linux (ELF):

Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Herramientas disponibles
Editores:
BIEW, HTE, ELFe...
Volcadores:
od, objdump,ELFDump...
Desensambladores:
IDA (desde dosemu/wine), LDasm, DCC, Monodis,
jad...
Depuradores:
GDB, Fenris, PrivateICE, front-ends de GDB...
Trazadores:
ltrace, strace, gccchecker...
Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

BIEW
BIEW:
Interfaz intuitivo, similar al HIEW o MC.
Múltiples vistas: binario, octal,
hexadecimal, desensamblado.
Análisis de la cabecera de los ELF.
Modificaciónsencilla del binario.

Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

Demostración

Abrir un ejecutable con BIEW.
Analizar sus secciones y cabeceras.
Desensamblarlo.
Editarlo.
Comprobar el cambio en su funcionamiento.
Pablo Garaizar Sagarminaga
Copyleft, all rights reversed

GDB
GNU Debugger, escrito inicialmente por Richard
Stallman.
Orientado al debugging durante el desarrollo de...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • ensamble
  • Ensamblador
  • Ensambles
  • Ensamblado
  • ENSAMBLE
  • Ensamblado
  • Ensamblador
  • Ensamble

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS