Download - AULA-ASSEMBLY.ppt
-
ASSEMBLY aula 2Hugo CalazansAndr Ricardo
-
Roteiro1- Intel x AT&T2- Pilha e command line arguments3- Procedimentos4- Simulando alguns comandos C5- Assembly inline6- Criando um projeto C/C++ no eclipse7- Exemplos de cdigo c/c++8- Exemplos de cdigo Assembly inline9- Linux Man Pages10- Referncias
-
Intel x AT&TDiferenas:1- Ordenao entre source e destination2- Nome dos registradores3- Operandos imediatos (immediate)4- Tamanho dos operandos5- Operandos na memria
-
Intel x AT&T
Intel CodeAT&T Codemov eax,1mov ebx,0ffhint 80hmov ebx, eaxmov eax,[ecx]mov eax,[ebx+3]mov eax,[ebx+20h]add eax,[ebx+ecx*2h]lea eax,[ebx+ecx]sub eax,[ebx+ecx*4h-20h]movl $1,%eaxmovl $0xff,%ebxint $0x80movl %eax, %ebxmovl (%ecx),%eaxmovl 3(%ebx),%eaxmovl 0x20(%ebx),%eaxaddl (%ebx,%ecx,0x2),%eaxleal (%ebx,%ecx),%eaxsubl -0x20(%ebx,%ecx,0x4),%eax
-
Intel x AT&T- Exemplo: FatorialC
int fatorial (int numero) {int y = 1;if (numero
-
Intel x AT&T- Exemplo: FatorialIntel
.globl mainmain:mov eax, 5mov ebx, 1L1: cmp eax, 0 //compara 0 com o valor em eaxje L2 //pula p/ L2 se 0==eax (je pula se igual)imul ebx, eax // ebx = ebx*eaxdec eax //decrementa eaxjmp L1 // pulo incondicional para L1L2: ret
-
Intel x AT&T- Exemplo: FatorialAT&T
.globl mainmain:movl $5, %eaxmovl $1, %ebxL1: cmpl $0, %eax //compara 0 com o valor em eaxje L2 //pula p/ L2 se 0==eax (je pula se igual)imull %eax, %ebx // ebx = ebx*eaxdecl %eax //decrementa eaxjmp L1 // pulo incondicional para L1L2: ret
-
Intel x AT&T- Exemplo: Ponto de entradaNASM
section .data
section .text global _start
_start: push epbmov ebp,esppush ebxpush esipush edi
; cdigo do seu programa
pop edipop esipop ebxmov esp,ebppop ebp
-
Intel x AT&T- Exemplo: Ponto de entradaAT&T
.data
.globl main
main: pushl %epbmovl %ebp,%esppushl %ebxpushl %esipushl %edi
; cdigo do seu programa
popl %edipopl %esipopl %ebxmovl %esp,%ebppopl %ebp
-
Pilha e Argumentos de linha de comandoExemplo:./programa infra software 677
PILHA4programainfrasoftware677
-
Pilha e Argumentos de linha de comandoExemplo:./programa infra software 677
INTELAT&TO que ?pop eaxpop ebxpop ecxpop edxpop eaxpop %eaxpop %ebxpop %ecxpop %edxpop %eax# de argsprogramainfrasoftware677
-
Procedimentos?Diferentemente do TASM, NASM no possui o conceito de procedimentoTudo Label!Nada de keywords "proc" ou "endp"basta colocar uma labelBoa prticacomentrios delimitando o bloco de cdigo
-
Procedimentos?No DOS, sim!DOS
proc fileWrite: mov ah, 40h mov bx, [filehandle] mov cl, [stuffLen] mov dx, offset stuffToWrite int 21h retendp fileWrite
-
Procedimentos?No Linux, no. Labels!INTEL
fileWrite: mov eax,4 mov ebx, [filedesc] mov ecx, stuffToWrite mov edx, [stuffLen] int 80h ret ; endp fileWriteAT&T
fileWrite: movl $4, %eaxmovl ($filedesc), %ebx movl $stuffToWrite, %ecx movl ($stuffLen), %edx int $0x80 ret ; endp fileWrite
-
Gerando Cdigo AssemblyComo gerar cdigo assembly de um programa escrito em C?gcc -S nomeDoPrograma.cSer gerado um arquivo assembly com o nome nomeDoPrograma.sEstratgia muito boa para se aprender assemblyConstruir programas em C e compilar com o parmetro -S para gerar o cdigo .s
-
Simulando comandos C- If-then-elseC
if (EAX == 'w') { writeFile();} else { doSomethingElse();}NASM
cmp eax, 'w'jneskipWrite ; Se no, skip
callwriteFilejmp outOfThisMess
skipWrite:call doSomethingElse
outOfThisMess: ...; resto do programa
-
Simulando comandos C- If-then-elseC
if (EAX == 'w') { writeFile();} else { doSomethingElse();}AT&T
cmpl 'w, %eaxjneskipWrite ; Se no, skip
callwriteFilejmp outOfThisMess
skipWrite:call doSomethingElse
outOfThisMess: ...; resto do programa
-
Simulando comandos C- whileC
int i = 0;
while(i< 100){i = i + 1;}NASM
mov eax, 0whileLoop:mov ebx, 100cmp eax, ebxjge WhileTerminadoinc eaxjmp WhileLoop
WhileTerminado:;resto do cdigo
-
Simulando comandos C- whileC
int i = 0;
while(i< 100){i = i + 1;}AT&T
movl $0, %eaxwhileLoop:movl $100, %ebxcmpl %ebx, %eaxjge WhileTerminadoincl %eaxjmp WhileLoop
WhileTerminado:;resto do cdigo
-
Assembly Inline- funes inline em CO que inline function?Uma forma de instruir o compilador a inserir o cdigo de uma determinada funo dentro do cdigo de quem a chama
-
Assembly Inline- funes inline em CBenefciosReduo do overhead existente para a chamada de uma funoPossvel simplificaes em tempo de compilao, de forma que no necessariamente todo o cdigo da funo inline precise ser includo
-
Assembly Inline- funes inline em CDesvantagensPossvel aumento do tamanho do cdigoComo usar?Colocando a palavra chave inline na declarao da funo
-
Assembly InlineRotinas assembly escritas como funes inline
CaractersticasConvenientesVelozesAmplamente utilizadas na programaes de sistemas
-
Assembly InlineComo declarar?asm("assembly code"); ImportnciaAtua como interface entre funes assembly e os programas C que as contmAtuao sobre operandos e produo de resultados visveis para variveis C
-
Assembly InlineExemplo 1:Move o contedo de ecx para eax: __asm__("movl %ecx, %eax");
Exemplo 2:Move o contedo de ecx para o endereo da memria apontado por eax:asm("movb %ecx, (%eax)");}
Observe nos dois exemplos acima a possibilidade de se utilizar __asm__(cdigo) ou asm(cdigo)
-
Assembly InlineNo caso de mais de uma instruo:Escreve-se uma por linhaEntre aspasCom o sufixo \n\t ao final da instruoIsso se deve ao fato de que GCC envia cada instruo como uma String ao GNU Assembler
-
Assembly InlineExemplo 3: #include int main(){__asm__ ("movl %eax, %ebx\n\t"movl $56, %esi\n\t"movl %ecx, $label(%edx,%ebx,$4)\n\t" "movb %ah, (%ebx)");}
-
Assembly InlineExemplo 4: #include int main(){ __asm__("movl$1,%eax// SYS_exit xor %ebx,%ebxint $0x80 ");}
-
Criando um projeto C/C++ no eclipse
-
Exemplo Cdigo C/C++
-
Executando a aplicao
-
Hello World usando Interrupes
-
Chamando funes externas
-
Chamando funes externas (mltiplos parametros)
-
Chamando funes externas (mltiplos parametros)
-
Obtendo o tempo de sistema
-
Criando e Modificando Arquivos
-
Linux Man PagesO que so?documentao extensiva presente na maior parte dos SOs da famlia UNIXComandoman tima referncia para system callsSection 2Executadas a partir do servio de interr 80h
-
Linux Man Pages- Organizao tpica1. General Commands2. System Calls3. Subroutines4. Special Files5. File Formats6. Games and screensavers7. Macros and Conventions8. Maintenence Commands
-
Linux Man PagesA partir do terminal do unix:Exemplo: digite man 2 writeOnline:http://www.linuxmanpages.com/http://man.he.net/http://www.die.net/doc/linux/man/
-
Assembly Referncias
http://www/~htcrs/if677/assembly/referencias.txt