seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[tutorial] int 0x80 - write e read (nasm)

Ir para baixo  Mensagem [Página 1 de 1]

1[tutorial] int 0x80 - write e read (nasm) Empty [tutorial] int 0x80 - write e read (nasm) Qui Ago 22, 2013 11:27 pm

Kodo no Kami

Kodo no Kami
master
master

bom galera para usar a api write no nasm com linux, basta usar a interrupçao 0x80, atribuir o valor 0x4 para o registrador eax isso diz para o processador q tamos usando o write, 0x1 para o registrador ebx isso seria o stdout, no registrador ecx seria a variavel com a string, e por fim o registrador edx q seria a quantidade de caracter da string, tambem usei o _exit no exemplo abaixo

Código:
section .text
 global _start

_start:
 mov eax,0x4 ;syscall write
 mov ebx,0x1 ;stdout
 mov ecx,fts ;variavel fts
 mov edx,tam ;tamanho
 int 0x80 ;interrupçao para kernell linux

 mov eax,0x1 ;syscall _exit
 mov ebx,0x0 ;argumento
 int 0x80 ;interrupçao para kernell linux

section .data
 fts db 'by hfts315' ;a string para ser mostrada
 tam equ 0xa ;0xa e igual ao valor 10 em decimal
para compilar

fts315@skynet:~/Desktop$ nasm -f elf32 fts.asm
fts315@skynet:~/Desktop$ ld fts.o -o hack
fts315@skynet:~/Desktop$ ./hack
by hfts315
para melhorar o codigo no tamanho podemos definir $ - nome da variavel assim conseguindo o tamanho exato da varaivel

Código:
section .text
 global _start

_start:
 mov eax,0x4 ;syscall write
 mov ebx,0x1 ;stdout
 mov ecx,fts ;variavel fts
 mov edx,tam ;tamanho
 int 0x80 ;interrupçao para kernell linux

 mov eax,0x1 ;syscall _exit
 mov ebx,0x0 ;argumento
 int 0x80 ;interrupçao para kernell linux

section .data
 fts db 'by hfts315' ;a string para ser mostrada
 tam equ $ - fts ;seria equivalente ao strlen
o mesmo programa usando as mesmas api com a linguagem c

Código:
#include <unistd.h>
#include <string.h>

int main(void)
{
 char fts[] = "by hfts315";
 int tam = strlen(fts);

write(0x1,fts,tam);
 _exit(0);
}
embora foi o uso da mesma api o executavel com assembly fico 600bits equanto o executavel da linguagem c fico quase 10x maior '-'

para usar o read usamos a interrupçao 0x80 denovo, no eax usamos o valor 0x3 q seria o read, no registrador ebx usamos o valor 0x0 q seria o stdin, no ecx a variavel, e no edx o tamanho

Código:
section .text
 global _start

_start:
 mov eax,0x3 ;syscall read
 mov ebx,0x0 ;stdin
 mov ecx,fts ;variavel fts
 mov edx,0xff ;0xff e equivalente a 255
 int 0x80 ;interrupçao para kernell linux

 mov eax,0x1 ;syscall _exit
 mov ebx,0x0 ;argumento
 int 0x80 ;interrupçao para kernell linux

section .bss
 fts resb 0xff ;a variavel
para melhorar o codigo vamos usar o write antes do read exibindo uma string e depois exibindo oq agente escreveu

Código:
section .text
 global _start

_start:
 mov eax,0x4 ;syscall write
 mov ebx,0x1 ;stdout
 mov ecx,hack ;variavel hack
 mov edx,tamhack ;tamanho da string
 int 0x80 ;interrupçao para kernell linux

 mov eax,0x3 ;syscall read
 mov ebx,0x0 ;stdin
 mov ecx,fts ;variavel fts
 mov edx,0xff ;0xff e equivalente a 255
 int 0x80 ;interrupçao para kernell linux

 mov eax,0x4 ;syscall write
 mov ebx,0x1 ;stdout
 mov ecx,fts ;variavel hack
 mov edx,0xff ;tamanho da string
 int 0x80 ;interrupçao para kernell linux

 mov eax,0x1 ;syscall _exit
 mov ebx,0x0 ;argumento
 int 0x80 ;interrupçao para kernell linux

section .bss
 fts resb 0xff ;a variavel

section .data
 hack db "digite seu nome: "
 tamhack equ $ - hack
o mesmo programa em c

Código:
#include <unistd.h>
#include <string.h>

int main(void)
{
 char fts[0xff];
 char hack[] = "digite seu nome: ";
 int tamhack = strlen(hack);
 int tamfts;
 
write(0x1,hack,tamhack);
 read(0x0,fts,0xff);
 tamfts = strlen(fts);
 write(0x1,fts,tamfts);
 _exit(0);
}
bom galera e isso ^^

by hfts315

https://endoffile.umforum.net

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos