Vamos ver agora um terceiro programa. Simples também, mas que resgata uma informação que já se encontra em determinados segmentos de memória do processador: o seu fabricante.
#OBJETIVO: escrever algo dentro de um arquivo txt
#
#ENTRADA: nenhuma
#
#OUTPUT: arquivo open.txt com uma frase de conteúdo
#
#VARIÁVEIS:
# string1 = mensagem a ser exibida
# string2 = o que será escrito dentro do arquivo
# tam1 = tamanho de string1
# tam2 = tamanho de string2
# arq = path e nome do arquivo
# perm = modo do arquivo, que estará como leitura/escrita
#
.section .data
string1: .string "Criar um arquivo e inserir conteúdo \n"
tam1: .long . - string1
string2: .string "Cogumelo binário\n"
tam2: .long . - string2
arq: .string "/tmp/arquivo.txt"
perm: .string "O_RDWR"
.section .text
.globl _start
_start:
movl $4, %eax # syscall write
movl $1, %ebx
leal string1, %ecx
movl tam1, %edx
int $0x80
movl $5, %eax # syscall open (5)
movl $arq, %ebx # arquivo que será aberto
movl $perm, %ecx # modo do arquivo
movl $0, %edx # Permissão 0
int $0x80
movl %eax, %esi # Move o retorno da funcao open para ESI
movl $4, %eax # syscall write, para efetuar a escrita no arquivo
movl %esi, %ebx # local de escrita, arquivo.txt
leal string2, %ecx # escrita do conteúdo de string2 para dentro do arquivo
movl tam2, %edx # O tamanho da variavel
int $0x80
movl $6, %eax # syscall close (6)
movl %esi, %ebx # Fecha o arquivo
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
Vamos ficar por aqui com esse paper, mas há muito mais coisas a serem ditas sobre Assembly. A gente nem sequer chegou nos loops e estruturas condicionais com JMP.
Mas acredito que tenha sido possível, ao menos, fazer com que tenham um primeiro contato com essa linguagem tão poderosa. Quem sabe em um outro paper, não nos aprofundamos mais no assunto?
[2] Comentário enviado por dimasdaros em 20/12/2011 - 16:35h
Ossa, eu aprendi assembly para PIC há uns 5 anos atrás, quando cursei um técnico em Eletrônica, não me lembro de quase nada, mas era meio diferente ainda hehe
Ótimo artigo.
Uma pergunta, não tive como ler o artigo ao todo, pois estou em horário de trabalho, mas existe alguma linguaguem de programação de baixo nível para web? Que os navegadores podem interpretar? Fiquei com essa dúvida agora, que estou estudando web.
Mas de qualquer forma excelente conteúdo, como todos os que você posta.
Parabéns
[8] Comentário enviado por 9u31220 em 24/12/2011 - 14:20h
Parabéns Luiz Vieira, o artigo está bom.
Na página 4 no comando de linkedição do programa leia foi usado #lf... ao invés de #ld...
Eu testei os programas aqui e o último não funcionou, ele não cria nenhum arquivo arquivo.txt.
Você poderia citar as fontes no final, posso estar enganado mas acho que tudo o que foi dito sobre a sintaxe AT&T, o ciclo de execução de instrução do processador e os registradores pode ser encontrado em http://download.savannah.gnu.org/releases/pgubook/
[9] Comentário enviado por luizvieira em 28/12/2011 - 18:50h
Valeu pessoal!
Rafael, além do Programming From the Ground Up, que inclusive indiquei em minha palestra sobre Exploits no Hack'n Rio, utilizei o livro abaixo como fonte:
E com relação a sintaxe AT&T e o ciclo de execução, confesso que sempre tenho em mente as explicações do livro citado (Programming From the Ground Up), mas o conteúdo não foi retirado ipsis literis do referido livro, posto que não há muito o que acrescentar nessas informações. Logo, o conteúdo deve estar bem parecido :-)
Sobre o comando, ld, valeu pela correção, devo ter deixado o dedo escorregar hehehe, mas percebi que o erro consta apenas na linkedição do segundo código.
Quanto ao último programa, darei uma olhada no que pode ser... O mesmo foi testado em um Ubuntu 11.10, com proc. Core i7 e funcionou bem. Inclusive acabei de testar e verifiquei que o funcionamento está ok.
[10] Comentário enviado por luizvieira em 28/12/2011 - 18:59h
firebits, meu brother, utilizei o GNU Assembler, que é o padrão do Linux.
taiar, realmente o artigo não deve ter nada "haver" :-)
Mas para informar, a arquitetura é x86, como explicado na resposta acima dado ao 9u31220. E com relação ao título de Assembly para Linux, é apenas para frisar que o foco é a sintaxe AT&T, já que deve ter ficado bem claro no artigo que há duas sintaxes: Intel (Windows) e AT&T (Unix like).
[11] Comentário enviado por 9u31220 em 28/12/2011 - 21:44h
@liuzvieira
vlw pelas fontes
Deculpe a minha preguiça em não depurar o que aconteceu que o último programa não funcionou aqui, eu estou usando um crunch bang 10 com proc intel atom.
O arquivo arquivo.txt foi aberto com modo de arquivo "O_RDWR" que é uma string (não deveria ser um número?). Bastou substituir a linha 37:
movl $perm, %ecx # modo do arquivo
por
movl $03101, %ecx