ASSEMBLY - PowerPoint PPT Presentation

About This Presentation
Title:

ASSEMBLY

Description:

ASSEMBLY aula 2 Hugo Calazans htcrs_at_cin.ufpe.br Roteiro 1- Recapitula o (Intel x AT&T) 2- Pilha e command line arguments 3- Procedimentos 4- Simulando alguns ... – PowerPoint PPT presentation

Number of Views:153
Avg rating:3.0/5.0
Slides: 34
Provided by: Lucas161
Category:

less

Transcript and Presenter's Notes

Title: ASSEMBLY


1
ASSEMBLY aula 2
  • Hugo Calazans
  • htcrs_at_cin.ufpe.br

2
Roteiro
  • 1- Recapitulação (Intel x ATT)
  • 2- Pilha e command line arguments
  • 3- Procedimentos
  • 4- Simulando alguns comandos C
  • 5- Assembly inline
  • 6- Linux Man Pages

3
Intel x ATT- recapitulação
Intel Code ATT Code
mov eax,1 mov ebx,0ffh int 80h mov ebx, eax mov eax,ecx mov eax,ebxplus3 mov eax,ebx20h add eax,ebxecx2h lea eax,ebxecx sub eax,ebxecx4h-20h movl 1,eax movl 0xff,ebx int 0x80 movl eax, ebx movl (ecx),eax movl 3(ebx),eax movl 0x20(ebx),eax addl (ebx,ecx,0x2),eax leal (ebx,ecx),eax subl -0x20(ebx,ecx,0x4),eax
4
Intel x ATT- recapitulação
  • Diferenças
  • 1- Ordenação entre source e destination
  • 2- Nome dos registradores (prefixação)
  • 3- Operandos imediatos (prefixação)
  • 4- Menção feita ao tamanho dos operandos
  • 5- Manipulação de operandos na memória

5
Intel x ATT- Exemplo Fatorial
  • C
  • int fatorial (int numero)
  • int fat 1
  • if (numero lt 1)
  • return 1
  • fat numero fatorial (numero - 1)
  • return fat

6
Intel x ATT- Exemplo Fatorial
  • Intel
  • mov eax, 5
  • mov ebx, 1
  • L1 cmp eax, 0 //compara 0 com o valor em eax
  • je L2 //pula p/ L2 se 0eax (je pula se
    igual)
  • imul ebx, eax // ebx ebxeax
  • dec eax //decrementa eax
  • jmp L1 // pulo incondicional para L1
  • L2 ret

7
Intel x ATT- Exemplo Fatorial
  • ATT
  • movl 5, eax
  • movl 1, ebx
  • L1 cmpl 0, eax //compara 0 com o valor em eax
  • je L2 //pula p/ L2 se 0eax (je pula se
    igual)
  • imull eax, ebx // ebx ebxeax
  • decl eax //decrementa eax
  • jmp L1 // pulo incondicional para L1
  • L2 ret

8
Intel x ATT- Exemplo Ponto de entrada
  • NASM
  • section .data
  • section .text
  • global _start
  • _start
  • push epb
  • mov ebp,esp
  • push ebx
  • push esi
  • push edi
  • código do seu programa
  • pop edi
  • pop esi
  • pop ebx
  • mov esp,ebp
  • pop ebp

9
Intel x ATT- Exemplo Ponto de entrada
  • ATT
  • .data
  • .globl main
  • main
  • pushl epb
  • movl ebp,esp
  • pushl ebx
  • pushl esi
  • pushl edi
  • código do seu programa
  • popl edi
  • popl esi
  • popl ebx
  • movl esp,ebp
  • popl ebp

10
Pilha e Argumentos de linha de comando
  • Exemplo
  • ./programa infra software 677

PILHA
4
programa
infra
software
677
11
Pilha e Argumentos de linha de comando
  • Exemplo
  • ./programa infra software 677

INTEL ATT O que é?
pop eax pop ebx pop ecx pop edx pop eax pop eax pop ebx pop ecx pop edx pop eax de args programa infra software 677
12
Procedimentos?
  • Diferentemente do TASM, NASM não possui o
    conceito de procedimento
  • Tudo é Label!
  • Nada de keywords "proc" ou "endp"
  • basta colocar uma label
  • Boa prática
  • comentários delimitando o bloco de código

13
Procedimentos?No DOS, sim!
  • DOS
  • proc fileWrite mov ah, 40h mov bx,
    filehandle mov cl, stuffLen mov dx,
    offset stuffToWrite int 21h ret
  • endp fileWrite

14
Procedimentos?No Linux, não. Labels!
  • INTEL
  • fileWrite mov eax,4 mov ebx, filedesc mov
    ecx, stuffToWrite mov edx, stuffLen int
    80h ret endp fileWrite
  • ATT
  • fileWrite movl 4, eax movl (filedesc),
    ebx movl stuffToWrite, ecx movl (stuffLen),
    edx int 0x80 ret endp fileWrite

15
Gerando Código Assembly
  • Como gerar código assembly de um programa escrito
    em C?
  • gcc -S nomeDoPrograma.c
  • Será gerado um arquivo assembly com o nome
    nomeDoPrograma.s
  • Estratégia muito boa para se aprender assembly
  • Construir programas em C e compilar com o
    parâmetro -S para gerar o código .s

16
Simulando comandos C- If-then-else
  • C
  • if (EAX 'w') writeFile()
  • else doSomethingElse()
  • NASM
  • cmp eax, 'w'
  • jne skipWrite Se não, skip
  • call writeFile
  • jmp outOfThisMess
  • skipWrite
  • call doSomethingElse
  • outOfThisMess ... resto do programa

17
Simulando comandos C- If-then-else
  • C
  • if (EAX 'w') writeFile()
  • else doSomethingElse()
  • ATT
  • cmpl 'w, eax
  • jne skipWrite Se não, skip
  • call writeFile
  • jmp outOfThisMess
  • skipWrite
  • call doSomethingElse
  • outOfThisMess ... resto do programa

18
Simulando comandos C- while
  • C
  • int i 0
  • while(ilt 100)
  • i i 1
  • NASM
  • mov eax, 0
  • whileLoop mov ebx, 100
  • cmp eax, ebx
  • jge WhileTerminado
  • inc eax
  • jmp WhileLoop
  • WhileTerminado
  • resto do código

19
Simulando comandos C- while
  • C
  • int i 0
  • while(ilt 100)
  • i i 1
  • ATT
  • movl 0, eax
  • whileLoop movl 100, ebx
  • cmpl ebx, eax
  • jge WhileTerminado
  • incl eax
  • jmp WhileLoop
  • WhileTerminado
  • resto do código

20
Assembly Inline- funções inline em C
  • O que é inline function?
  • Uma forma de instruir o compilador a inserir o
    código de uma determinada função dentro do código
    de quem a chama

21
Assembly Inline- funções inline em C
  • Benefícios
  • Redução do overhead existente para a chamada de
    uma função
  • Possível simplificações em tempo de compilação,
    de forma que não necessariamente todo o código da
    função inline precise ser incluído

22
Assembly Inline- funções inline em C
  • Desvantagens
  • Possível aumento do tamanho do código
  • Como usar?
  • Colocando a palavra chave inline na declaração
    da função

23
Assembly Inline
  • Rotinas assembly escritas como funções inline
  • Características
  • Convenientes
  • Velozes
  • Amplamente utilizadas na programações de sistemas

24
Assembly Inline
  • Como declarar?
  • asm("assembly code")
  • Importância
  • Atua como interface entre funções assembly e os
    programas C que as contêm
  • Atuação sobre operandos e produção de resultados
    visíveis para variáveis C

25
Assembly Inline
  • Exemplo 1
  • Move o conteúdo de ecx para eax
  • __asm__("movl ecx, eax")
  • Exemplo 2
  • Move o conteúdo de ecx para o endereço da memória
    apontado por eax
  • asm("movb ecx, (eax)")
  • Observe nos dois exemplos acima a possibilidade
    de se utilizar __asm__(código) ou
    asm(código)

26
Assembly Inline
  • No caso de mais de uma instrução
  • Escreve-se uma por linha
  • Entre aspas
  • Com o sufixo \n\t ao final da instrução
  • Isso se deve ao fato de que GCC envia cada
    instrução como uma String ao GNU Assembler

27
Assembly Inline
  • Exemplo 3
  • include ltstdio.hgt
  • int main()
  • __asm__ ( "movl eax, ebx\n\t
  • "movl 56, esi\n\t
  • "movl ecx, label(edx,ebx,4)\n\t"
    "movb ah, (ebx)")

28
Assembly Inline
  • Exemplo 4
  • include ltstdio.hgt int main()
  • __asm__("
  • movl 1,eax // SYS_exit xor ebx,ebx
  • int 0x80 ")

29
Linux Man Pages
  • O que são?
  • documentação extensiva presente na maior parte
    dos SOs da família UNIX
  • Comando
  • man ltpage_namegt
  • Ótima referência para system calls
  • Section 2
  • Executadas a partir do serviço de interr 80h

30
Linux Man Pages - Organização típica
  • 1. General Commands
  • 2. System Calls
  • 3. Subroutines
  • 4. Special Files
  • 5. File Formats
  • 6. Games and screensavers
  • 7. Macros and Conventions
  • 8. Maintenence Commands

31
Linux Man Pages
  • A partir do terminal do unix
  • Exemplo digite man 2 write
  • Online
  • http//www.linuxmanpages.com/
  • http//man.he.net/
  • http//www.die.net/doc/linux/man/

32
Assembly Referências
  • www.cin.ufpe.br/htcrs/if677/

33
Exercício
  • Escreva programas em C que implementem
  • Loops
  • Impressão de String na tela
  • Gere o código assembly correspondente a esses
    programas
  • Analise o código gerado
Write a Comment
User Comments (0)
About PowerShow.com