multiplica a,b
Cargar a
Cargar b
multiplica a,b
Guardar a
SRAM
DRAM
Hardvard | Von Neumann | |
---|---|---|
x86 (CISC) | INTEL/AMD | |
avr (RISC) | ATmega328P (Arduino) |
|
pic (RISC) | PIC16F84A | |
arm (RISC) | QUALCOMM | |
e.t.c. |
busqueda de la instruccion en la memoria
decodificacion de la instruccion
ejecucion de la instruccion
almacenamiento de los resultados
Ubuntu
sudo apt-get install nasm build-essential
Arch
sudo pacman -S nasm
Fedora y Opensuse
se be primero agregar el repositorio al gestor de paquetes para poder instalar
El codigo objeto almacena el codigo maquina de un programa en ensamblador. Los formatos pueden ser coff, elf, obj, win32, e.t.c.
El proceso de enlazamiento combina el codigo maquina con instrucciones y directivas para que sistema operativo sea capaz de interpretar correctamente el archivo ejecuble.
El enlazador por defecto de los sistemas operativos MAC OS X y GNU/Linux es LD
Para crear un ejecutable con NASM en el sistema operativo GNU/LInux se emplea un par de instrucciones.
nasm -f elf archivo.asm
se empleara el formato elf por que es el formato mas popular compatible con el kernel Linux.
ld -m elf_i386 -o nombre_ejecutable archivo.o
porque crearemos ejecutables de 32 bits, a partir de un archivo en formato elf.
#include <stdio.h>
int main(){
int contrasenia = 1;
if (contrasenia==2){
printf("Exito\n");
}
return 0;
}
~/Desktop $ ./ejemplo
~/Desktop $ sudo r2 -w ejemplo
-- What about taking a break? Here, have this nice 0xCC.
[0x00000520]> pd32
....
,=< 0x0000063d 750c jne 0x64b
| 0x0000063f 488d3d9e0000. lea rdi, qword str.Exito ; 0x6e4 ; "Exito"
| 0x00000646 e8c5feffff call sym.imp.puts
`-> 0x0000064b b800000000 mov eax, 0
....
[0x00000520]> 0x0000063d
[0x0000063d]> wx 740c
[0x0000063d]> pd32
,=< 0x0000063d 740c je 0x64b
| 0x0000063f 488d3d9e0000. lea rdi, qword str.Exito ; 0x6e4 ; "Exito"
| 0x00000646 e8c5feffff call sym.imp.puts
`-> 0x0000064b b800000000 mov eax, 0
~/Desktop $ ./ejemplo
Exito