martes, 6 de julio de 2010

ASM vs C

A continuación, 2 ejemplos de ejecutables bajo GNU/Linux.

Los 2 cumplen el mismo objetivo, solo que uno es escrito en el lenguaje de programación C y es compilado con GCC, y el otro está escrito en el lenguaje de programación ASM y está compilado con Nasm.

En caso de no tener instalado nasm, puedes instalar con:

apt-get install nasm


C

#include <unistd.h> // Para Write
#include <string.h> // Para strncpy
#define ARG 3

int main(void)
{
char msg[ARG];
strncpy (msg, "Hi", ARG);
write (1, msg, ARG);
return 0;
}


ASM

section .data
msg db "Hi"

section .text

global _start
_start:

;SYSCALL write(1, msg, 2)
mov eax, 4 ;Función
mov ebx, 1 ;Param1
mov ecx, msg ;Param2
mov edx, 3 ;Param3
int 0x80 ;Interrupción

;SYSCALL exit(0)
mov eax, 1 ;Función
mov ebx, 0 ;Param1
int 0x80 ;Interrupción





Para compilar el archivo en C usamos gcc archivo.c -Wall

Para compilar el archivo en ASM usamos nasm -f elf archivo.asm y ld archivo.o

En los 2 casos creamos un binario llamado a.out, el cual podemos ejecutar escribiendo ./a.out

No hay comentarios:

Publicar un comentario