Linguagem C. Análise estática de programas C - splint. Compilador de C - gcc. Compilador de C - gcc. Diagnóstico e correcção de problemas
|
|
- Leonor Carneiro Alves
- 5 Há anos
- Visualizações:
Transcrição
1 Conteúdo Diagnóstico e correcção de problemas (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho 1 Linguagem de programação C Análise estática de programas C Sistemas Operativos I Técnicas e ferramentas Linguagem de programação Análise estática de programas C Bibliotecas de apoio a debugging Debuggers genéricos Debuggers especializados Informação a ter em conta Tamanho da palavra do processador Endereçamento de memória Processador com unidade de gestão de memória Alinhamento byte-order do processador little-endian vs big-endian sizeof(int)! = sizeof(void *) Linguagem de programação C Linguagem de programação C Análise estática de programas C Análise estática de programas C - splint Algumas funcionalidades e propriedades a explorar Utilizar assert.h Substituir gets por fgets strcpy por strncpy strcat por strncat sprintf por snprintf Substituir if (p == 0) por if (0 == p) Utilização $ splint +flag1 -flag ficheiro.c Ficheiro de configuração:.splintrc ### Mode s e l e c t i o n f l a g s # weak, standard ( d e f a u l t ), checks, s t r i c t +checks ### Display Flags #+showscan +showsummary + s t a t s - gcc - gcc Algumas opções úteis -E - Executa apenas o passo de pré-processamento -S - Gera o ficheiro assembly (.s) -g - Gera informação de debugging -Wall - Activa a grande maioria dos avisos -Wextra - Activa ainda mais avisos -Werror - Os avisos passam a ser considerados erros -On - Nível de optimização (por omissão: -O0) -Wp,-D FORTIFY SOURCE=n - detecção de buffer overflows Exemplos gcc -E... gcc -S... gcc -Wall -Wextra... gcc -Wall -Wextra -std=c... gcc -Wall -Wextra -std=c -O0 -g... gcc -O -D FORTIFY SOURCE=... gcc -Wall -Wextra -Werror -O -Wp,-D FORTIFY SOURCE=... gcc -Wall -Wextra -g -lefence... gcc -Wall -Wextra -g -fmudflap -lmudflap...
2 Fortify Source Fortify Source: exemplo 1 FORTIFY SOURCE FORTIFY SOURCE é uma característica adquirida pelo gcc e pela glibc que permite detectar e prevenir um subconjunto de buffers overflows. Mecânica Há diversas situações em que o compilador consegue saber qual a dimensão de um buffer (alocado estaticamente ou alocado dinamicamente via malloc). Com este conhecimento, diversas funções que sobre ele irão operar podem garantir a não existência de buffer overflows. exemplo1.c - detecção: durante a compilação e a execução char s t r [ 4 ] ; s t r c p y ( s t r, 134 ) ; return 0; Fortify Source: exemplo 1 Fortify Source: exemplo $ gcc -O -Wp,-D FORTIFY SOURCE= exemplo1.c exemplo1. c : In f u n c t i o n main : exemplo1. c : : warning : c a l l to b u i l t i n s t r c p y c h k w i l l \ always overflow d e s t i n a t i o n b u f f e r $./a.out buffer overflow detected :. / a. out terminated ======= Backtrace : ========= / l i b / l i b c. so. ( c h k f a i l +0x41 ) [ 0 xaec4 ] / l i b / l i b c. so. ( s t r c p y c h k +0 x3f ) [ 0 xaed ]. / a. out [0 x043bc ] / l i b / l i b c. so. ( l i b c s t a r t m a i n +0 xdf ) [ 0 xadf ]. / a. out [0 x0431d ] ======= Memory map : ======== d000 r xp :0 30 / l i b / ld.3.. so 00d000 00e000 r xp :0 30 / l i b / ld.3.. so exemplo.c - detecção: durante a execução 3 i n t main ( i n t a t t r i b u t e ( ( unused ) ) argc, char argv [ ] ) char s t r [ 4 ] ; s t r c p y ( s t r, argv [ 1 ] ) ; return 0; Fortify Source: exemplo Fortify Source: referências $ gcc -O -Wp,-D FORTIFY SOURCE= exemplo.c $./a.out ok $./a.out overflow buffer overflow detected :. / a. out terminated ======= Backtrace : ========= / l i b / l i b c. so. ( c h k f a i l +0x41 ) [ 0 xaec4 ] / l i b / l i b c. so. ( s t r c p y c h k +0 x3f ) [ 0 xaed ]. / a. out [0 x043bd ] / l i b / l i b c. so. ( l i b c s t a r t m a i n +0 xdf ) [ 0 xadf ]. / a. out [0 x0431d ] ======= Memory map : ======== d000 r xp :0 30 / l i b / ld.3.. so 00d000 00e000 r xp :0 30 / l i b / ld.3.. so Referências Limiting buffer overflows with ExecShield http: // Object size checking to prevent (some) buffer overflows Permite detectar dois erros comuns associados à alocação dinâmica de memória: ultrapassar os limites do bloco de memória alocado aceder a memória já libertada com free() Mecânica Esta biblioteca utiliza o hardware de gestão de memória virtual do computador para colocar uma página de memória inacessivel imediatamente depois (ou antes) de cada bloco de memória alocado. Quando o software aceder em modo de leitura ou de escrita a uma das páginas inacessíveis, o hardware irá gerar um segmentation fault. Utilização Linkar o programa com a biblioteca efence Executar o programa modificando o comportamento da biblioteca através das variáveis de ambiente: EF ALIGNMENT EF PROTECT BELOW EF PROTECT FREE EF ALLOW MALLOC 0 EF FILL Permitir a geração de ficheiros core $ ulimit -c unlimited
3 : exemplo : exemplo exemplo.c #include <s t r i n g. h> 3 4 i n t main ( void ) { char s t r = ( char ) malloc ( ) ; s t r c p y ( s t r, 134 ) ; ( s t r 1) = \0 ; 10 f r e e ( s t r ) ; s t r = \0 ; 1 Compilar o programa gcc -Wall -Wextra -O0 -g -lefence -o exemplo exemplo.c Executar o programa (gerar core dumps) 1./exemplo EF ALIGNMENT=1./exemplo 3 EF PROTECT BELOW=1./exemplo Utilizar o debugger para localizar a fonte do problema gdb exemplo core.pid : exemplo $./exemplo E l e c t r i c Fence..0 Copyright (C) 1 1 Bruce Perens <bruce@perens. com> Segmentation f a u l t ( core dumped ) $ gdb exemplo core.34 GNU gdb Red Hat Linux ( fcrh ) Reading symbols from / l i b / ld l i n u x. so. done. Loaded symbols f o r / l i b / ld l i n u x. so. #0 0x0044a in main ( ) at efence. c : s t r = \ 0 ; ( gdb ) 3. é um sistema flexível para realizar o debugging e profiling de executáveis X/Linux, AMD4/Linux, PPC3/Linux e PPC4/Linux. O sistema consiste num núcleo, que fornece um processador sintético, e num conjunto de ferramentas que permitem realizar tarefas especificas de debugging ou profiling. Uma das principais ferramentas é a memcheck que permite detectar problemas associados à gestão de memória de programas. Algumas ferramentas cachegrind - simulador de cache memcheck - verificador de memória (ferramenta por omissão) : exemplo Opções de linha de comando ficheiro.valgrindrc no directório de trabalho ficheiro.valgrindrc na homedir do utilizador variável de ambiente VALGRIND OPTS Exemplo de algumas opções de linha de comando -v - imprime informação adicional (verbose) -q - modo silencioso; apenas imprime mensagens de erro (quiet) --tool=callgrind - selecionar ferramenta callgrind --leak-check=yes - detectar perdas de memória (valor por omissão: summary) exemplo.c i n t p = malloc (10 sizeof ( i n t ) ) ; p [ 1 0 ] = 0; ( p 1) = 0; 10 return 0; } : exemplo : exemplo Compilar o programa (desactivando optimizações e activando informação de debugging) gcc -Wall -Wextra -O0 -g -o exemplo exemplo.c Executar o programa valgrind exemplo valgrind -q exemplo valgrind --tool=memcheck exemplo valgrind --tool=memcheck -v exemplo valgrind --tool=memcheck --leak-checks=no exemplo valgrind --tool=memcheck --leak-checks=yes exemplo $ valgrind --tool=memcheck exemplo ==34== I n v a l i d w r i t e of s ize 4 ==34== at 0x043AE : main ( exemplo. c :) ==34== Address 0x1BF00 is 0 bytes after a block of size 40 alloc d ==34== at 0x1B0 : malloc ( vg replace malloc. c :130) ==34== by 0x043A1 : main ( exemplo. c :) ==34== ==34== I n v a l i d w r i t e of s ize 4 ==34== at 0x043BA : main ( exemplo. c :) ==34== Address 0x1BF04 is 4 bytes before a block of size 40 alloc d ==34== at 0x1B0 : malloc ( vg replace malloc. c :130) ==34== by 0x043A1 : main ( exemplo. c :) ==34== ==34== ERROR SUMMARY: errors from contexts ( suppressed : 13 from 1) ==34== malloc / f r e e : i n use at e x i t : 40 bytes i n 1 blocks. ==34== malloc / f r e e : 1 allocs, 0 frees, 40 bytes a l l o c a t e d. ==34== For counts of detected errors, rerun with : v ==34== searching f o r p o i n t e r s to 1 not freed blocks. ==34== checked 41 bytes. ==34== ==34== LEAK SUMMARY: ==34== d e f i n i t e l y l o s t : 40 bytes i n 1 blocks. ==34== possibly l o s t : 0 bytes i n 0 blocks. ==34== s t i l l reachable : 0 bytes i n 0 blocks. ==34== suppressed : 0 bytes in 0 blocks.
4 : referências Conteúdo Overflows Referências Valgring homepage The Quick Start Guide User Manual Overflows Alocação estática de memória 3 Overflows Overflow de buffers estáticos Alocação estática de memória Exemplo 1 - overflow de um buffer estático estatico 1.c Experimentar Utilizar o splint Activar avisos do gcc Compilar com a opção FORTIFY SOURCE Corrigir o programa char s t r [ 4 ] ; s t r c p y ( s t r, 134 ) ; return 0; Exemplo - overflow de um buffer estático Exemplo 3 - overflow de um buffer estático estatico.c char s t r [ 4 ] = N: ; s t r c a t ( s t r, 01 ) ; return 0; estatico 3.c 1 #include <s t d i o. h> #include <s t r i n g. h> 3 4 i n t main ( void ) { char s t r [ 4 ] = N ; s p r i n t f ( s t r, %s:%d\n, s t r, 1 ) ; 10 / / p r i n t f ( S t r i n g = <%s>\n, s t r ) ; 1 return 0; Exemplo 4 - overflow de um buffer estático Overflows Overflow de buffers alocados dinamicamente estatico 4.c i n t i ; i n t a [ 1 0 ] ; for ( i =0; i <=10; i ++) { a [ i ] = 0; 1 return 0; Experimentar Utilizar o splint Activar avisos do gcc Compilar com a opção FORTIFY SOURCE Utilizar a biblioteca Electric Fence Correr o programa com o Corrigir o programa
5 Overflows Exemplo 1 - overflow de um buffer alocado dinamicamente Overflows Exemplo - overflow de um buffer alocado dinamicamente dinamico 1.c #include <s t r i n g. h> 3 4 i n t main ( void ) { char s t r = ( char ) malloc ( 4 ) ; s t r c p y ( s t r, 134 ) ; 10 f r e e ( s t r ) ; 1 return 0; dinamico.c i n t i, p = malloc (10 sizeof ( i n t ) ) ; for ( i =0; i <=10; i ++) { p [ i ] = i ; } 10 f r e e ( p ) ; 1 Exemplo 3 - overwrite de buffers Overflows Conteúdo dinamico 3.c i n t i ; i n t p1 = malloc (10 sizeof ( i n t ) ) ; i n t p = malloc (10 sizeof ( i n t ) ) ; for ( i =0; i <10; i ++) { p [ i ] = ; } 10 for ( i =0; i <1; i ++) { p1 [ i ] = 1; } 1 return 0; Overflows Alocação estática de memória 3 associados à alocação de memória Exemplo 1 - problema associado à alocação de memória memoria 1.c Experimentar Utilizar o splint Activar avisos do gcc Compilar com a opção FORTIFY SOURCE Utilizar a biblioteca Electric Fence Correr o programa com o Corrigir o programa 4 i nt p1 = NULL ; p1 = ( i n t ) malloc ( sizeof ( i n t ) ) ; p1 = 0; } 10 i n t main ( void ) { f ( ) ; 1 return 0; Exemplo - problema associado à alocação de memória Exemplo 3 - problema associado à alocação de memória memoria.c 4 i nt p1 = NULL ; p1 = ( i n t ) malloc ( sizeof ( i n t ) ) ; f r e e ( p1 ) ; p1 = 0; } 10 i n t main ( void ) { 1 f ( ) ; memoria 3.c 4 i nt p1 = NULL ; p1 = ( i n t ) malloc ( sizeof ( i n t ) ) ; p1 = 0; f r e e ( p1 ) ; f r e e ( p1 ) ; 1 i n t main ( void ) { 13 f ( ) ; 14 return 0; 1 }
6 Exemplo 4 - problema associado à alocação de memória Exemplo - endereço de memória inválido memoria 4.c 4 i nt p1 = NULL, p ; p1 = ( i n t ) malloc ( sizeof ( i n t ) ) ; p = 0; f r e e ( p1 ) ; } 10 i n t main ( void ) { 1 f ( ) ; memoria.c 3 i n t f ( i n t i ) { 4 i n t p [ 1 0 ] ; p [ i ] = 1; return &p [ i ] ; } i n t main ( void ) { 10 i n t p i = f ( 4 ) ; i n t i = p i ; 1 return 0; Exemplo - endereço de memória inválido memoria.c 3 i n t f ( i n t i ) { 4 i n t p = ( i n t ) malloc (10 sizeof ( i n t ) ) ; p [ i ] = 1; f r e e ( p ) ; return &p [ i ] ; } 10 i n t main ( void ) { i n t p i = f ( 4 ) ; 1 i n t i = p i ;
Linguagem C. Diagnóstico e correcção de problemas. Arquitectura física. José Pedro Oliveira (jpo@di.uminho.pt) Linguagem de programação
Conteúdo Diagnóstico e correcção de problemas (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho 1 Arquitectura física Linguagem de
Leia maisFerramentas de desenvolvimento
Conteúdo Breve Introdução (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho 1 2 Sistemas Operativos I 2006-2007 - Exemplo de um programa
Leia maisChamada ao sistema: sbrk. Chamada ao sistema: brk. brk sbrk. Generalidades. José Pedro Oliveira calloc e malloc free
Generalidades (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho Sistemas Operativos I 2006-2007 1 s Chamada ao sistema: Chamada ao
Leia maisPrincípios de Desenvolvimento de Algoritmos MAC122
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Vazamento de memória & Erros em tempo de execução Vazamento de memória Introdução: Vazamento de memória (memory leak),
Leia maisCurso de Programação C em Ambientes Linux Aula 05
Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo
Leia maisIntrodução rápida ao gerenciamento de memória: ou como evitar o maldito segmentation fault
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Introdução rápida ao gerenciamento de memória: ou como evitar o maldito segmentation fault Moacir Ponti 2012 (v.1.1) Sumário
Leia maisGilberto A. S. Segundo. 24 de agosto de 2011
Exercícios - Alocação Dinâmica Gilberto A. S. Segundo Programação Aplicada de Computadores Engenharia Elétrica Universidade Federal do Espírito Santo - UFES 24 de agosto de 2011 1 / 23 Grupo de e-mail
Leia maisTutorial Ultra-rápido: desenvolvendo programas C em Unix
Tutorial Ultra-rápido: desenvolvendo programas C em Unix Jerônimo C. Pellegrini 1 Introdução Este é um breve guia para programação em C em Unix. O texto está longe de ser completo (na verdade nem tem estrutura
Leia maisProgramação. Cap. 12 Gestão de Memória Dinâmica
Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Cap. 12 Gestão de Memória Dinâmica Sumário : Utilização de memória Alocação
Leia maisDebugging. de aplicações em C e C++
Debugging de aplicações em C e C++ Nuno Lopes, NEIIST 7º Ciclo de Apresentações. 26/Abril/2007 Agenda Erros/Warnings do compilador Bugs típicos Ferramentas úteis (GDB, Valgrind, et all) Casos Reais Questões
Leia maisProgramação em Sistemas Computacionais
Programação em Sistemas Computacionais Linguagem C Introdução, tipos Centro de Cálculo Instituto Superior de Engenharia de Lisboa Jorge Martins (jmartins@isel.pt) baseado no slides de Pedro Pereira Enquadramento
Leia maisSISTEMAS OPERATIVOS I
Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática SISTEMAS OPERATIVOS I Ficha 6 Abril de 2006 Nuno Malheiro Maria João Viamonte Berta Batista Luis Lino Ferreira Sugestões
Leia maisINSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE Algoritmos ANSI C - Introdução Copyright 2014 IFRN Agenda Conceitos básicos ANSI C Hello World Funções em C Exercícios 2 /26 A linguagem
Leia maisProgramação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 11 Gestão de Memória Dinâmica
Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre T. 11 Gestão de Memória Dinâmica 1 Sumário : Utilização de memória Alocação Estática de Memória Alocação Dinâmica de Memória
Leia maisIntrodução à Lógica de Programação
Sistemas Operacionais e Introdução à Programação Introdução à Lógica de Programação Programação Tradução de um algoritmo para uma linguagem de programação Cada linguagem de programação possui sua sintaxe
Leia maisGuia Rápido: GCC, Makefile e Valgrind.
Guia Rápido: GCC, Makefile e Valgrind. Alexandro Ramos 10 de setembro de 2015 1 Sumário 1 Introdução 3 2 GCC 3 2.1 Outros parâmetros úteis no GCC....................... 4 3 Makefiles 6 3.1 Makefile 1....................................
Leia maisALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal
ALGORITMOS AULA 01 Baseado nas aulas do Prof. Jorgiano Vidal LINGUAGEM C Uma das grandes vantagens do C é que ele possui tanto caracterìsticas de "alto nìvel" quanto de "baixo nìvel". Linguagem de propósito
Leia maisArquitetura e Organização de Computadores. Compiladores e processamento
Arquitetura e Organização de Computadores Compiladores e processamento Verificar a existência dos pacotes: - GCC (Gnu C Compiler); - GDB (Gnu Debuger); - Libc (blibliotecas C); - nano, vi, emacs ou outro
Leia maisLinguagem C. Brian W. Kernighan, Dennis Ritchie (K&R) Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira
Linguagem C Brian W. Kernighan, Dennis Ritchie (K&R) Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira Centro de Cálculo Instituto Superior de Engenharia de Lisboa João
Leia maisReinaldo Gomes Alocação Dinâmica
Algoritmos e Lógica de Programação Linguagem C Alocação Dinâmica i de Memória Reinaldo Gomes reinaldo@cefet-al.br Alocação Dinâmica Quando declaramos uma variável ou um arranjo, o compilador automaticamente
Leia maisPonteiros e Alocação de Memória
Algoritmos e Estrutura de Dados I Ponteiros e Alocação de Memória Prof. Paulo Henrique Pisani fevereiro/2019 Memória Podemos entender a memória como um grande vetor de bytes devidamente endereçados: 0x1051
Leia maisMIEI Sistemas de Computação 2017/18. Níveis de Abstração. TPC5 e Guião laboratorial. Luís Paulo Santos e Alberto José Proença
MIEI Sistemas de Computação 2017/18 Níveis de Abstração TPC5 e Guião laboratorial Luís Paulo Santos e Alberto José Proença ------------------------------------------------------------------------------------------------------------------------------------------------
Leia maisProgramação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos
Leia maisSISTEMAS OPERATIVOS I
Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática SISTEMAS OPERATIVOS I Parte IV Abril de 2006 Nuno Malheiro Maria João Viamonte Berta Batista Luis Lino Ferreira Sugestões
Leia maisINF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 2 Alocação Dinâmica 17/02/2014 (c) Dept. Informática - PUC-Rio 1 Tópicos Alocação dinâmica Vetores locais e funções 17/02/2014 (c) Dept. Informática - PUC-Rio 2 Alocação Dinâmica
Leia mais1/34 GESTÃO DINÂMICA DE MEMÓRIA
1/34 GESTÃO DINÂMICA DE MEMÓRIA Memória Estática 2/34 Memória Estática Exemplo #include main() { int V[300], N; do{ printf ( N =? ); scanf ( %d, &N); while ((N < 0) (N > 300); for (i = 0; i
Leia maisLinguagem C Introdução. Contexto Histórico Principais diferenças do Java Funções em C Compilar programas em C no Linux
Linguagem C Introdução Contexto Histórico Principais diferenças do Java Funções em C Compilar programas em C no Linux Porquê C em AC? A linguagem C fornece um modelo de programação próximo da máquina física
Leia maisProgramação Procedimental GBC /1 Prof. Renan Cattelan Prática 10. Estruturas e alocação dinâmica
Programação Procedimental GBC014 2015/1 Prof. Renan Cattelan www.facom.ufu.br/~renan Prática 10 Estruturas e alocação dinâmica Exercício Crie um programa para armazenar uma agenda de contatos pessoais
Leia maisAna Paula Tomás. Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto 2010/2011
Ana Paula Tomás Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto 2010/2011 Aula 1 Objectivos e programa da disciplina. Critérios de avaliação. Um primeiro programa
Leia maisAlocação Dinâmica em C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara
Leia maisBásico: estrutura de programa, sintaxe Interface com linha de comando
Programação em C Sintaxe Básico: estrutura de programa, sintaxe Interface com linha de comando Preprocessamento e compilação Makefiles Ponteiros e estruturas Bibliotecas, ficheiros include e funções Referências
Leia maisDesenvolvimento para Sistemas Embarcados (CEA 513) Codificação Segura para Embarcados
Universidade Federal de Ouro Preto Departamento de Computação e Sistemas - DECSI Desenvolvimento para Sistemas Embarcados (CEA 513) Codificação Segura para Embarcados Vicente Amorim vicente.amorim.ufop@gmail.com
Leia maisLicenciatura em Eng.ª Informática Sistemas Operativos - 2º Ano - 1º Semestre. Trabalho Nº 1 - Linux e C
Trabalho Nº 1 - Linux e C 1. Introdução O sistema Linux e a linguagem C são as ferramentas essenciais de aprendizagem na cadeira de Sistemas Operativos. O sistema Linux é hoje em dia utilizado por milhões
Leia maisIntrodução a Programação. Ponteiros e Vetores, Alocação Dinâmica
Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes
Leia maisProfessor: Jó Ueyama Estagiário PAE: Heitor Freitas
Alocação Dinâmica de Memória Professor: Jó Ueyama Estagiário PAE: Heitor Freitas Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo SSC 300 - Linguagem de Programação e Aplicações
Leia maisExercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os
Leia maisAplicação. Programa Linguagem de Alto Nível. Programa em Linguagem Assembly. Programa em Linguagem Máquina
Níveis de Abstracção Nível 5 Nível 4 Nível 3 Nível 2 Nível 1 Nível 0 Aplicação Programa de Alto Nível Programa em Assembly Programa em Máquina Micro-programa em de Transferência de Registos Sistema Digital
Leia maisgdb - Introdução Adriano Cruz 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ
gdb - Introdução Adriano Cruz adriano@nce.ufrj.br 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ 1 Resumo Seção Introdução Depurando gdb 2 Bibliografia 1 http://sourceware.org/gdb/current/onlinedocs/gdb/
Leia maisProgramação. Module Introduction. Cap. 1 Fundamentos de Computadores
Engenharia Informática (5374) - 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) - 1º ano, 1º semestre Bioengenharia (9099) 2º ano, 1º semestre Ciências Biomédicas (10135) 2º ano, 1º semestre
Leia maisModulo 12: alocação dinâmica de memória
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 12: alocação dinâmica de memória Aura - Erick aconci@ic.uff.br, erickr@id.uff.br Roteiro porque e como utilizar a alocação dinâmica funções: malloc (
Leia maisProgramação em Paralelo OpenMP
Programação em Paralelo OpenMP N. Cardoso & P. Bicudo Física Computacional - MEFT 2012/2013 N. Cardoso & P. Bicudo Programação em Paralelo: OpenMP 1 / 15 Introdução Potencial do GPU vs CPU Cálculo: 367
Leia maisUSP - ICMC - SSC SSC o. Semestre 2010 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria
USP - ICMC - SSC SSC 0501-1o. Semestre 2010 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria Prof. Fernando Santos Osório Email: fosorio [at] { icmc. usp. br, gmail. com } Página Pessoal:
Leia maisEstruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto programa estiver executando
Leia maisGprof Avaliação de desempenho. Prof: Paulo Maciel Instrutor: Jamilson Dantas
Gprof Avaliação de desempenho Prof: Paulo Maciel prmm@cin.ufpe.br Instrutor: Jamilson Dantas jrd@cin.ufpe.br Agenda Porque medir a eficiência de um Algoritmo? Como Medir O que é o Gprof? Por que usar um
Leia mais16. Compilação no Linux
16. Compilação no Linux 16.1 Compilador X Interpretador Um código fonte pode ser compilado ou interpretado. Compiladores e interpretadores tratam o código de maneira diferente. Interpretador: Lê o código
Leia maisExercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,
Leia maisPonteiros & tabelas (cont.) K&R: Capítulo 5
Ponteiros & tabelas (cont.) K&R: Capítulo 5 Sinopse da aula de hoje Pointers in a nutshell & alocação dinâmica de memória Estruturas, funções e apontadores Estruturas auto-referenciadas Exemplo de aplicação:
Leia maisFundamentos de Programação
Fundamentos de Programação ET42G Aula 21 Prof. Daniel Cavalcanti Jeronymo Conversão de tipos. Alocação dinâmica de memória. Recursão. Criação de bibliotecas, arquivos de cabeçalhos e variáveis globais.
Leia maisProgramação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas
Programação MEAer e LEE Bertinho Andrade da Costa 2010/2011 1º Semestre Instituto Superior Técnico Argumentos da linha de comando Funções recursivas Programação 2010/2011 DEEC-IST Arg. da linha de comando;
Leia maisEstruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores 14/03/2011 e 16/03/2011 Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto
Leia maisDAS5102 Fundamentos da Estrutura da Informação
Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa
Leia maisProgramação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos
Leia maisProgramação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];
Leia maisPonteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1
Ponteiros em C Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1 Índice Introdução Operações sobre Ponteiros Exemplos Ponteiros e Funções Alocação Dinâmica em C UDESC - Rui J. Tramontin Jr.
Leia maisINSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE Algoritmos ANSI C - Gerenciamento de Memória Copyright 2014 IFRN Agenda Introdução Alocação dinâmica Funções malloc free calloc realloc
Leia maisAlocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger
Alocação Estática e Dinâmica Prof. M.Sc. Mariella Berger http://www.inf.ufes.br/~mberger mberger@inf.ufes.br mariellaberger@gmail.com Alocação Estática Estratégia de alocação de memória na qual toda a
Leia maisAlocação Dinâmica. Introdução à Computação
Alocação Dinâmica Introdução à Computação Alocação de memória Uso da memória: uso de variáveis globais (e está>cas): O espaço reservado para uma variável global existe enquanto o programa es>ver sendo
Leia maisAlgoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Leia maisProgramação de Computadores II. Cap. 5 Alocação Dinâmica
Programação de Computadores II Cap. 5 Alocação Dinâmica Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais
Leia maisMódulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Leia mais13. ALOCAÇÃO DINÂMICA DE MEMÓRIA
787878787878787878787878787878787878787878787878787878 13. ALOCAÇÃO DINÂMICA DE MEMÓRIA Sempre é necessário declarar o número de elementos do array. Mas e se ele for desconhecido? E se ele variar? Pode
Leia maisTrabalho 02: Cliente e Servidor em C
Trabalho 02: Cliente e Servidor em C Redes de Computadores 1 Descrição Este trabalho deve ser entregue no Moodle até a data correspondente de entrega. Envie sua resposta somente em texto a não ser que
Leia maisLinguagem C Ficheiros Compilação Separada
Linguagem C Ficheiros Compilação Separada typedef definição de tipos Apontadores para estruturas Ficheiros na bibiloteca standard do C Compilação Separada Definição de novos tipos em C É possível definir
Leia maisDepartamento de Engenharia Informática. Sistemas Operativos 1. Utilitário Make
Departamento de Engenharia Informática Sistemas Operativos 1 Utilitário Make Março 2003 1. Modelo de Compilação da Linguagem C Compilar um programa muito simples em C requer, pelo menos, o ficheiro de
Leia maisA linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.
Alocação de Memória Todo programa precisa utilizar memória para ser executado. Quando um programa inicia sua execução, ele começa a solicitar memória ao sistema operacional, ou seja, faz a alocação de
Leia maisIntrodução à linguagem C
Introdução à linguagem C Luís Charneca luis.charneca@gmail.com Introdução ao C O C nasceu na década de 70. O seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 correndo
Leia mais1 Exercícios com ponteiros
Computação para Informática Funções e Ponteiros1 EXERCÍCIOS COM PONTEIROS Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Funções e ponteiros O objetivo desta aula prática
Leia maisProgramação de Computadores II
Programação de Computadores II 2019.1 Endereço e Ponteiro Endereço Ao colocarmos o símbolo & temos o endereço daquela variável. Ponteiro Ao colocarmos o símbolo * temos o valor da variável armazenada num
Leia maisProjeto e Análise de Algoritmos Estruturas de Dados Básicas em C
Universidade Federal de Ouro Preto Departamento de Computação Projeto e Análise de Algoritmos Estruturas de Dados Básicas em C Prof. Haroldo Gambini Santos Por que C? Baixo nível: força contato com detalhes
Leia maisDesenvolvimento de programas em UNIX
4 Desenvolvimento de programas em UNIX Sumário: Fases de desenvolvimento de programas Compiladores Ficheiros em código objecto (.o) Visualização de símbolos dum ficheiro objecto (nm) Unificadores (linkers)
Leia maisPonteiros. Baseado nos slides do Prof. Mauro.
Baseado nos slides do Prof. Mauro. A memória do computador é uma sequência de bytes, na qual endereçamos cada um sequencialmente. Como vimos, uma variável é uma região da memória que reservamos para armazenar
Leia maisAula 3. Ivan Sendin. 22 de agosto de FACOM - Universidade Federal de Uberlândia SEG. Ivan Sendin.
Segurança Aula 3 FACOM - Universidade Federal de Uberlândia ivansendin@yahoo.com,sendin@ufu.br 22 de agosto de 2018 Informação =$$ Confidencialidade, Integridade e Disponibilidade (qual é mais importante?)
Leia mais13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Mestrado em Engenharia Física Tecnológica
13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Programação Mestrado em Engenharia Física Tecnológica Samuel M. Eleutério sme@tecnico.ulisboa.pt Departamento de Física
Leia maisEntender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação
Entender o problema Encontrar um algoritmo para resolvê-lo Implementar o algoritmo numa linguagem de programação Permitem implementar um algoritmo Expressar o algoritmo numa forma que o computador entenda
Leia maisBruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória
Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Alocação Dinâmica de Memória Alocação Estática x Dinâmica C: dois tipos de alocação de memória: Estática e Dinâmica Na alocação estática, o espaço
Leia maisIntrodução aos Algoritmos e Estruturas de Dados 2011/2012
INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados 2011/2012 Enunciado do 3 o Projecto Data de entrega: 09 de Dezembro de 2011 às 23h59 1 Introdução Neste projecto pretende-se desenvolver
Leia maisComputação 2. Aula 8. Profª. Fabiany Arquivos
Computação 2 Aula 8 Arquivos Profª. Fabiany fabianyl@utfpr.edu.br E/S com Arquivos A linguagem C não possui nenhum comando de E/S. Todas as operações de E/S ocorrem mediante chamadas a funções de biblioteca
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Vetores e alocação dinâmica Vetores Alocação dinâmica Vetores locais e funções ATENÇÃO Esta apresentação
Leia maisIntrodução aos Sistemas Operativos
Introdução aos Sistemas Operativos Baseado em: Andrew S. Tanenbaum. Modern Operating Systems, Prentice-Hall, 1992 FEUP/INESC http://www.fe.up.pt/~jlopes/teach/ jlopes@inescn.pt v 1.0, Outubro de 1997 Introdução
Leia maisJoão Correia Lopes. v 1.0, Outubro de Introdução aos Sistemas Operativos v1.0 1
Introdução aos Sistemas Operativos Baseado em: Andrew S. Tanenbaum. Modern Operating Systems, Prentice-Hall, 1992 FEUP/INESC http://www.fe.up.pt/~jlopes/teach/ jlopes@inescn.pt v 1.0, Outubro de 1997 Introdução
Leia maisProgramação Computacional Aula 16: Alocação Dinâmica de Memória
Programação Computacional Aula 16: Alocação Dinâmica de Memória Profa. Madeleine Medrano madeleine@icte.uftm.edu.br Definição Sempre que escrevemos um programa, é preciso reservar espaço para as informações
Leia maisTAD: Tipo Abstrato de Dados (parte 2)
TAD: Tipo Abstrato de Dados (parte 2) SCC0202 Algoritmos e Estruturas de Dados I Prof. Thiago A. S. Pardo Modularização em C Programa em C pode ser dividido em vários arquivos Arquivos fonte com extensão.c
Leia maisPor que C? Ferramentas Recomendadas. Padrões
Por que C? Baixo nível: força contato com detalhes de implementação de estruturas de dados Linguagem com muitas ferramentas de alta qualidade disponível: compiladores, analisadores estáticos de código,
Leia mais1 Exercícios com ponteiros
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Oitava Aula Prática - 29 de outubro de 2010 O objetivo desta aula prática é exercitar ponteiros e funções. 1 Exercícios com ponteiros
Leia mais- Mapa de memória de um processo - Ponteiros
1 MCTA028 Programação Estruturada - Mapa de memória de um processo - Ponteiros Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti Luiz Rozante 3Q-2018 2 Alocação de
Leia maisFunção Fundamental do SO
Função Fundamental do SO Gestão do Hardware Uma das funções fundamentais do sistema operativo é gerir os recursos do hardware de um modo o mais transparente possível ao utilizador Recursos principais a
Leia maisAlocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)
Alocação de Memória Linguagem de Programação Estruturada 1 Alocação dinâmica e ponteiros Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Sumario Introdução Alocação Estática
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 04 Alocação Dinâmica Edirlei Soares de Lima Vetores - Declaração e Inicialização Declaração de um vetor: int meu_vetor[10]; Reserva um espaço de memória
Leia maisPonteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto
Ponteiros e alocação dinâmica de memória Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto Agenda Ponteiros Ponteiros e vetores Passagem por cópia e por referência Alocação
Leia maisMódulo 3. Depuração de Programas
Módulo 3 Depuração de Programas 1. Introdução Pretende-se com esta sessão teórico-prática que os alunos acompanhem a execução de um programa instrução a instrução, visualizando as alterações ao estado
Leia maisALOCAÇÃO DINÂMICA DE MEMORIA Lista 10. A linguagem C/C++ possui recursos para alocação dinâmica de memoria.
ALOCAÇÃO DINÂMICA DE MEMORIA Lista 10 A linguagem C/C++ possui recursos para alocação dinâmica de memoria. As funções que trabalham com alocação de memoria se encontram na biblioteca void *calloc(int
Leia maisLinguagem C Apontadores. Endereços e apontadores Passagem de parâmetros para funções Apontadores e vectores Memória dinâmica
Linguagem C Apontadores Endereços e apontadores Passagem de parâmetros para funções Apontadores e vectores Memória dinâmica Endereços de Memória Podemos considerar a memória como um vector M, em que cada
Leia maisLinguagem de Programação C. Prof. Fabrício Olivetti de França
Linguagem de Programação C Prof. Fabrício Olivetti de França Linguagem C 2 Linguagem C Imperativo e estruturado Pequeno conjunto de palavras-chaves, operadores, etc. Tipagem estática, porém fraca Permite
Leia maisArgumentos da linha de comando Exemplos Recursividade de funções Exemplos
Sumário Argumentos da linha de comando Exemplos Recursividade de funções Exemplos Programação 2007/2008 DEEC-IST 1 Argumentos da linha de comando Motivação: Nas aulas de laboratório foi utilizado o compilador
Leia maisAula 18: Funções em C
Aula 18: Funções em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Funções em C Programação de Computadores IV 1 / 38 Agenda 1 Revisão e Contexto
Leia maisExercícios sobre textos; Alocação dinâmica.
s sobre textos; Alocação dinâmica. David Deharbe 1 1 s Escreva uma sub-rotina, chamada strchr, que recebe um string s (= o endereço onde está guardado um texto), um caracter c e retorna o endereço da primeira
Leia maisArquitetura e Organização de Computadores. Compiladores e processamento
Arquitetura e Organização de Computadores Compiladores e processamento Verificar a existência dos pacotes: - GCC (Gnu C Compiler); - GDB (Gnu Debuger); - Libc (blibliotecas C); - nano, vi, emacs ou outro
Leia mais