Escolar Documentos
Profissional Documentos
Cultura Documentos
Hugo Calazans
André Ricardo
Roteiro
1- Intel x AT&T
2- Pilha e command line arguments
3- Procedimentos
4- Simulando alguns comandos C
5- Assembly inline
6- Criando um projeto C/C++ no eclipse
7- Exemplos de código c/c++
8- Exemplos de código Assembly inline
9- Linux Man Pages
10- Referências
Intel x AT&T
Diferenças:
1- Ordenação entre source e destination
2- Nome dos registradores
3- Operandos imediatos (immediate)
4- Tamanho dos operandos
5- Operandos na memória
Intel x AT&T
PILHA
4
“programa”
“infra”
“software”
“677”
Pilha e Argumentos de
linha de comando
Exemplo:
– ./programa infra software 677
proc fileWrite:
mov ah, 40h
mov bx, [filehandle]
mov cl, [stuffLen]
mov dx, offset stuffToWrite
int 21h
ret
endp fileWrite
Procedimentos?
No Linux, não. Labels!
INTEL AT&T
fileWrite: fileWrite:
mov eax,4 movl $4, %eax
mov ebx, [filedesc] movl ($filedesc), %ebx
mov ecx, stuffToWrite movl $stuffToWrite,
mov edx, [stuffLen] %ecx
int 80h movl ($stuffLen), %edx
ret int $0x80
; endp fileWrite ret
; endp fileWrite
Gerando Código Assembly
skipWrite:
call doSomethingElse
outOfThisMess:
... ; resto do programa
Simulando comandos C
- If-then-else
C AT&T
cmpl 'w‘, %eax
if (EAX == 'w') {
writeFile(); jne skipWrite ; Se não, skip
} else {
doSomethingElse(); call writeFile
} jmp outOfThisMess
skipWrite:
call doSomethingElse
outOfThisMess:
... ; resto do programa
Simulando comandos C
- while
C NASM
WhileTerminado:
;resto do código
Simulando comandos C
- while
C AT&T
WhileTerminado:
;resto do código
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
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
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
Assembly Inline
Características
– Convenientes
– Velozes
– Amplamente utilizadas na programações
de sistemas
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
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)");
}
#include <stdio.h>
int main()
{
__asm__("
movl $1,%eax // SYS_exit
xor %ebx,%ebx
int $0x80
");
}
Criando um projeto
C/C++ no eclipse
Exemplo Código C/C++
Executando a aplicação
Hello World usando
Interrupções
Chamando funções
externas
Chamando funções externas
(múltiplos parametros)
Chamando funções externas
(múltiplos parametros)
Obtendo o tempo de
sistema
Criando e Modificando
Arquivos
Linux Man Pages
O que são?
– documentação extensiva presente na
maior parte dos SOs da família UNIX
Comando
– man <page_name>
Ótima referência para system calls
– Section 2
Executadas a partir do serviço de interr 80h
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
Linux Man Pages
http://www/~htcrs/if677/assembly/referencias.txt