Relato do primeiro encontro do ASM Dojo

10 views
Skip to first unread message

Fabio Olive Leite

unread,
Sep 5, 2011, 11:47:10 AM9/5/11
to OeSC-Livre
Olá!

Na tarde ensolarada do Sábado dia 3/9 tivemos o primeiro encontro do
x86 ASM/boot Dojo (ASM Dojo pra simplificar) lá na Unoesc (novamente
obrigado Tiago!). Tivemos 5 participantes, o que é até uma surpresa dado
o assunto nada popular. :) Eu imagino que a participação se mantenha
entre 5 e 10 pessoas. Compareceram o Álvaro, o Carlos, Fábio (eu),
Franchesco e o Jarbas.

Também apareceram por lá brevemente o Jean e um amigo de sobrenome
Leite, que eu infelizmente esqueci o nome, mas eles estavam procurando
o grupo de estudos de Arduíno (fica a dica que o grupo existe!). De
qualquer forma, da rápida conversa saiu uma sugestão do Jean de
realizarmos installfests de tempos em tempos. Vamos trabalhar essa
idéia em um novo tópico.

Levamos uns minutos conversando e decidindo como estruturar os
trabalhos do grupo, e resolvemos criar algumas imagens de disco para
máquinas virtuais, contendo FreeDOS e outros sistemas igualmente "crus"
para facilitar o trabalho. Eu fiquei com os Action Items de criar
imagens e disponibilizar pro grupo. Com essas imagens a gente pode
trabalhar em um ambiente conhecido, em que todos tenham as mesmas
ferramentas. No caso do FreeDOS, poderemos tabalhar com assembly de
16bits, o que é bem interessante pra entender as limitações do processo
de boot.

http://www.freedos.org/
http://www.freedos.org/freedos/files/

Depois dessas conversas iniciais, começamos a entrar mais no assunto
assembly. Conversamos rapidamente sobre as diferenças entre a notação
Intel e a notação AT&T de assembly, em que na notação Intel o formato
das instruções geralmente é "OPERAÇÃO, DESTINO, FONTE" e a sintaxe em
geral é mais simples, enquando na notação AT&T a ordem dos operandos é
invertida: "OPERAÇÃO, FONTE, DESTINO".

Na notação AT&T também se usa mais prefixos e sufixos, tanto nas
instruções quanto ao referenciar registradores (%eax ao invés de
simplesmente eax) e ao usar valores literais imediatos ($5 ou
$0x42 ao invés de 5 e 0x42). O NASM usa notação Intel, e os GNU
binutils usam notação AT&T, portanto ao montar um programa com NASM e
desmontar ele com objdump, teremos nosso fonte em assembly Intel e a
saída do objdump em AT&T. Mas não complica tanto assim, é só perceber
as pequenas diferenças.

Falando nisso, abaixo vai um link (aqui de casa) para os manuais de
assembly publicados pela própria Intel. Eu lembro de ter baixado em
developer.intel.com/algumacoisa, porém desde então o site parece ter
mudado completamente e eu não acho mais os documentos. Interessante que
a AMD ainda tem um site assim... :) Peço que baixem os manuais aqui de
casa durante a noite, pois uso o link para trabalhar durante o dia. :)

Volume principal:
http://olive.homeunix.org:8080/livros/intel-manuals/253665.pdf
Todos os documentos:
http://olive.homeunix.org:8080/livros/intel-manuals/
Site da AMD:
http://developer.amd.com/documentation/guides/Pages/default.aspx#manuals

Começamos a brincar com um programa simples, teste.asm, que imprime uma
mensagem na tela e termina o programa, usando chamadas de sistema do
Linux diretamente. Já no início tivemos uma pequena complicação
interessante: a maneira de chamar o kernel em um sistema de 64bits (que
todos nós estávamos usando) é bem diferente do que o tradicional
"INT 0x80" que se usa em 32 bits. Tivemos que mexer um pouco nos
parâmetros de montagem e linkagem para criar executáveis de 32bits, que
podem seguir usando a "INT 0x80" para acessar o kernel.

----- teste.asm -----
bits 32

section .text

global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, 10
int 0x80

mov eax, 1
mov ebx, 5
int 0x80

section .data
msg: db "Mensagem!", 10
----- teste.asm -----

Montamos esse programinha com "nasm -f elf32 teste.asm" e linkamos o
executável final com "ld -static -m elf_i386 -o teste teste.o". Depois
disso ficamos algum tempo investigando o formato ELF e o código gerado
com hexedit, mexemos no arquivo e fizemos outras pequenas mudanças em
cima disso pra estudar.

Outro exercício simples mas interessante que fizemos foi criar um
arquivo em assembly que tinha 1000 instruções NOP (não faz nada)
seguidas de uma chamada a sys_exit() para terminar o programa. Parece
idiota, mas ao montar e linkar esse programa, ficamos com um "binário
genérico" pronto, e mexemos diretamente no código binário dele com
hexedit.

Para entender um pouco o que o processo de linkagem faz, nós copiamos
os bytes gerados pelas instruções do teste.asm para dentro do "nops"
diretamente usando hexedit, em um ponto qualquer no meio do programa.
Depois escolhemos outro ponto qualquer e escrevemos a string
"MENSAGEM?". Aí com "objdump -d nops" nós vimos em que endereço caiu o
início da mensagem, e editamos de novo com hexedit e colocamos esse
endereço diretamente nos bytes da instrução "mov ecx, ..." acima. Feito
isso, rodamos o programa "feito à mão" e vimos que ele imprimiu a
mensagem e terminou corretamente.

Também removemos a chamada para sys_exit(), tacando NOPs (hexadecimal
0x90) por cima das instruções no hexedit, e vimos o que acontece quando
um programa sai executando dados (segmentation fault, ou pior).

Enfim, dá pra ver que apesar de simples, foi muita diversão hard-core
no mundo dos bits. Vou tocar adiante meus Action Items de preparar as
imagens de FreeDOS e syslinux que vamos usar nos próximos encontros.
Quando estiverem prontas eu passo o link.

Combinamos de manter os encontros do Dojo a cada 4 semanas, se
possível. Logo logo vamos combinar onde e quando será o próximo!

Abraços!

--
[[ Fábio Olivé Leite, olive, FabioOlive ]]
TcheLinux.org, OeSC-Livre.org, Chapecó, SC
ex sed lex awk yacc, e pluribus unix, amem

Luis Claudio R. Goncalves

unread,
Sep 5, 2011, 12:33:19 PM9/5/11
to oesc-...@googlegroups.com
On Mon, Sep 05, 2011 at 12:47:10PM -0300, Fabio Olive Leite wrote:
| Ol�!
|
| Na tarde ensolarada do S�bado dia 3/9 tivemos o primeiro encontro do
| x86 ASM/boot Dojo (ASM Dojo pra simplificar) l� na Unoesc (novamente
| obrigado Tiago!). Tivemos 5 participantes, o que � at� uma surpresa dado
| o assunto nada popular. :) Eu imagino que a participa��o se mantenha
| entre 5 e 10 pessoas. Compareceram o �lvaro, o Carlos, F�bio (eu),
| Franchesco e o Jarbas.

Oi Fabio!

Fiquei muito feliz em saber que aconteceu o encontro e mais feliz ainda por
ver um report t�o rico em detalhes - j� estou co�ando os dedos aqui para
reproduzir as brincadeiras com o nasm. Se o grupo n�o se opuser, pe�o que
continuem reportando os resumos dos encontros aqui na lista.

Ali�s, quando montarem as imagens n�o esque�am de postar aqui na lista a
URL para a imagem ou ao menos a lista de ingredientes (ou receita de bolo)
para que os integrantes mais remotos possam participar tamb�m :)

Abra��o,
Luis
--
[ Luis Claudio R. Goncalves Bass - Gospel - RT ]
[ Fingerprint: 4FDD B8C4 3C59 34BD 8BE9 2696 7203 D980 A448 C8F8 ]

Jack

unread,
Sep 5, 2011, 1:08:58 PM9/5/11
to OeSC-Livre
Buenas Lista!

Fábio, parabéns novamente pela iniciativa...
Aos outros 4 heróis, parabéns pela participação. Pessoalmente acho que
este é o caminho realmente... eventos menores e bem dirigidos costumam
trazer bons e promissores resultados!

Ainda em tempo, conforme conversas anteriores em off, coloco à
disposição as instalações da ConexTI para a realização de uma próxima
edição do DOJO aqui em Concórdia. Só combinarmos dia e horário! ;-)


Abraços!
Jack


On 5 set, 12:47, Fabio Olive Leite <fabio.ol...@gmail.com> wrote:

Carlos O. Fazolo

unread,
Sep 5, 2011, 3:09:22 PM9/5/11
to oesc-...@googlegroups.com
Boa tarde a todos,

Gostaria de parabenizar (mais uma vez) o Fabio Olive pelo evento de sábado, foi de altissímo nível... ou melhor... baixissímo nível (hehe).
Realmente o assunto tratado são poucos que se interessam, e menos ainda quem tem conhecimento sobre, como o caso do Fabio.

O ASM Dojo foi muito legal, que teve seu auge na programação direta em hexadecimal (binário), que VIAGEM!!!

Farei o possível para participar e colaborar mais com as próximas edições...

Abraço a todos,

Carlos Orestes Fazolo
> --
> Mensagem enviada para <http://groups.google.com/group/oesc-livre>
------- End of Original Message -------

Marcelo Junior

unread,
Sep 5, 2011, 3:30:10 PM9/5/11
to oesc-...@googlegroups.com
Parabéns pessoal. Eu já tinha até me programado para ir, mas surgiu um contratempo e não pude ir pois acabou ficando muito em cima da hora (moro em Xanxerê), mas farei o possível para ir no próximo Dojo. Não é em todo lugar que se pode aprender um pouco desse submundo.
Marcelo I. Machado Júnior

Alvaro Pagliari

unread,
Sep 6, 2011, 8:45:59 AM9/6/11
to oesc-...@googlegroups.com
Olá!

Gostaria de parabenizar o Fábio pela organização e realização do ASM Dojo, o evento foi muito bom e produtivo, conseguimos discutir vários assuntos (diferentes notações de assembler, funcionamento de linkers, loaders, interrupções de kernel e um pouco do boot) e tudo isso em 2 horas!

Também me disponibilizo a auxiliar na organização do próximo evento e pretendo me aprofundar no assunto e trazer materiais para o grupo. Apesar de ser uma área complexa é importante entender o que se passa abaixo das nossas abstrações (S.O, runtimes e máquinas virtuais) para tirar melhor proveito do hardware, otimizar processos, entender o como/porque as linguagens implementam certos recursos e até resolver problemas "mais cabeludos".

Conversando com o Fábio sábado ficou acertado que o grupo irá realizar o dojo em várias cidades para que todos tenham a oportunidade de participar. Dessa forma, fica o convite para os que não puderam ir, que compareçam no próximo! Dá para fazer várias coisas divertidas em assembler!


bits    32
section .text
global  _start
_start:
  mov eax, 1
  mov ebx, 0
  int 0x80

--
Álvaro Gianni Pagliari
alvaropag [at] gmail [dot] com
Reply all
Reply to author
Forward
0 new messages