SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
1
Programando Software
      Livre em C
    Fernando Mercês




                       2
Agenda

●   Por que o C nunca vai sumir?

●   A suíte de compiladores GNU

●   Criando um projeto de exemplo

●   Distribuindo o software

●   Mercado




                                       3
Por que o C nunca vai sumir?

●Metade do universo é escrito em C (kernel Linux, Windows,
httpd, samba, squid, bind, java, python, php, openldap, wine...)

●   Desempenho: o compilador C gera código de máquina.

●Portabilidade: SIM, basta que seu código não dependa de
bibliotecas não portáveis! E ainda existe Cygwin!

●Quem falou que C é velho? A última atualização da
especificação foi em 2011.

●O comitê WG14 da ISO/IEC especificou na C11 recursos como
multithreading (thread.h), bound checking em funções como
strcpy() e estruturas anônimas.



                                                               4
A suíte de compiladores GNU

●GNU Compiler Collection, compila C, C++, Objective-C,
Fortran, Java, Ada e Go.

●   A versão 4.7.1 saiu em 14 de junho deste ano.

●   Conta com poderosos aliados como gdb e make.

●Extensa documentação, cheia de recursos, otimizações
para processadores específicos, proteções de código etc.

●   Mas existem outros livres como CLang, tcc...




                                                           5
Brinque com o tcc!

$ cat ate3.c
#!/usr/bin/tcc -run

#include <stdio.h>

int main(void)
{
   for (int i=0; i<3; i++)
      printf("%dn", i);

    return 0;
}

$ chmod +x ate3.c
$ ./ate3.c
                             ---
$ cat << EOF | tcc -run -
>main(void) { puts("Diz aê pro tcc!"); }
>EOF


                                           6
A suíte de compiladores GNU

●GNU Compiler Collection, compila C, C++, Objective-C,
Fortran, Java, Ada e Go.

●   A versão 4.7.1 saiu em 14 de junho deste ano.

●   Conta com um poderoso aliado: o GNU Debugger (gdb).

●Extensa documentação, cheia de recursos, otimizações
para processadores específicos, proteções de código etc.

●   Experimente também o tcc!




                                                           7
Criando um projeto de exemplo

●   O que eu quero?
     Setar um dispositivo de bloco (/dev/sdX) como
     somente leitura ou não, para evitar escrita acidental
     como echo 'lalalaal' > /dev/sdX.

●   #comofas
     O Linux possui a syscall (e uma wrapper na glibc)
     ioctl, que aceita os comandos BLKROSET e BLKROGET.

●   Consultar manual da função ioctl()
     $ man 2 ioctl
     int ioctl(int d, int request, ...);



                                                             8
Prova de conceito

#includes...

int fd = open(“/dev/sdc”, O_RDONLY);
int ro = 1;

ioctl(fd, BLKROSET, &ro);

---

# dd if=<(echo 'doingshit') of=/dev/sdc
dd: writing to `/dev/sdc': Operation not permitted




                                                     9
Antes de virar um projeto...

●   E se der erro?
     Tratamento de erro (if).

●   O usuário sabe o que o software faz?
     help(), usage(), documentação, manpages.

●   Quais as dependências?
     ldd.

●   Preciso licenciar o código?
    ● Cabeçalho GPL ou de outra licença livre.




                                                 10
Antes de virar um projeto (cont.)...

●   E o Makefile?

     all:
              gcc -W -Wall -Wextra -o devprot devprot.c

     clean:
              rm -f devprot

●   Compilando o devprot.c

     $ make

●   Testes
     Várias máquinas, diferentes arquiteturas.
     Diferentes dispositivos de blocos (para este caso).

                                                           11
Distribuindo o software

●   Tenho fegonha! Ah, focê chula?!

●   Controle de versão para *código*.

●Source Forge para todo o resto, como binários pré-
compilados.

●   No Github é muito fácil enviar e receber patches.




                                                        12
Mercado para C

●Kernel, aplicações 'core', alto desempenho, real time,
embarcados.

●Google, Opera, Mandriva, Red Hat, várias de
embarcados, de telecom, de segurança...

●   Em alta, por tempo inderteminado!

●   C++ também!

●   Lucro (in)direto: colaborando com SL.

●Outras linguagens “nativas” como D e Go vão demorar
um pouco para “colar”. Enquanto isso, divirta-C. ;-)

                                                          13
Referências

●   Especificações da linguagem C
    http://www.mentebinaria.com.br/artigos/0x1c/0x1c-cspecs.html

●   WG14
    http://www.open-std.org/jtc1/sc22/wg14/

●   Mudanças no gcc 4.7
    http://gcc.gnu.org/gcc-4.7/changes.html

●   BLKROGET e BLKROSET definidos em /usr/src/linux/fs.h

●   devprot.c completo
    http://www.mentebinaria.com.br/files/devprot.c

●   Escolha um pra colaborar:
    https://github.com/merces



                                                                   14
Obrigado




  Fernando Mercês
contato@4Linux.com.br


     @4LinuxBR

       /4linux




                        15

Mais conteúdo relacionado

Mais procurados

Programação concorrente
Programação concorrenteProgramação concorrente
Programação concorrenteFabio Duarte
 
FISL16 :: Escalabilidade - de uma máquina para múltiplos data centers
FISL16 ::  Escalabilidade - de uma máquina para múltiplos data centersFISL16 ::  Escalabilidade - de uma máquina para múltiplos data centers
FISL16 :: Escalabilidade - de uma máquina para múltiplos data centersLeandro Moreira
 
Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Leandro Moreira
 
ESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxJorge Pereira
 
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)Messias Batista
 
Vagrant você deveria está usando
Vagrant   você deveria está usandoVagrant   você deveria está usando
Vagrant você deveria está usandoHudson Brendon
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programaçãomoiplabs
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Luís Gustavo Martins
 
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Tchelinux
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Jorge Cardoso
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 

Mais procurados (15)

Programação concorrente
Programação concorrenteProgramação concorrente
Programação concorrente
 
FISL16 :: Escalabilidade - de uma máquina para múltiplos data centers
FISL16 ::  Escalabilidade - de uma máquina para múltiplos data centersFISL16 ::  Escalabilidade - de uma máquina para múltiplos data centers
FISL16 :: Escalabilidade - de uma máquina para múltiplos data centers
 
Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17
 
Gcc
GccGcc
Gcc
 
ESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no Linux
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
 
Vagrant você deveria está usando
Vagrant   você deveria está usandoVagrant   você deveria está usando
Vagrant você deveria está usando
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programação
 
Flutter
FlutterFlutter
Flutter
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
 
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 

Destaque

OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayDiego Santos
 
Cryptorave apresentacao
Cryptorave apresentacaoCryptorave apresentacao
Cryptorave apresentacaoSergio Amadeu
 
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Diego Santos
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!Diego Santos
 
Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.4LinuxCursos
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...Diego Santos
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITDiego Santos
 

Destaque (10)

OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlay
 
Cryptorave apresentacao
Cryptorave apresentacaoCryptorave apresentacao
Cryptorave apresentacao
 
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!
 
Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Cloud é Linux
Cloud é LinuxCloud é Linux
Cloud é Linux
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MIT
 

Semelhante a Programando Software Livre em C

Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Tchelinux
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsFernando Mercês
 
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteComo ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteTchelinux
 
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containersTDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containerstdc-globalcode
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02profwtelles
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteTchelinux
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedorGit e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedorFelipe Pedroso
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Serverpichiliani
 
.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016Renato Groff
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldThiago Soares
 
Dia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no LinuxDia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no LinuxJorge Pereira
 

Semelhante a Programando Software Livre em C (20)

Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
 
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteComo ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
 
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containersTDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Bricklayer
BricklayerBricklayer
Bricklayer
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedorGit e Github: qual a importância dessas ferramentas para o desenvolvedor
Git e Github: qual a importância dessas ferramentas para o desenvolvedor
 
Minicurso GNU/Linux
Minicurso GNU/LinuxMinicurso GNU/Linux
Minicurso GNU/Linux
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Server
 
01 informatica - 17-01
01   informatica - 17-0101   informatica - 17-01
01 informatica - 17-01
 
.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016.NET Core e C# 7.0 - InterCon 2016
.NET Core e C# 7.0 - InterCon 2016
 
C# básica
C#   básicaC#   básica
C# básica
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorld
 
Gcc
Gcc Gcc
Gcc
 
Dia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no LinuxDia Debian 2007 - Desenvolvendo aplicações no Linux
Dia Debian 2007 - Desenvolvendo aplicações no Linux
 

Mais de Diego Santos

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend ServerDiego Santos
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?Diego Santos
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixDiego Santos
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaDiego Santos
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformDiego Santos
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pevDiego Santos
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosDiego Santos
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxDiego Santos
 

Mais de Diego Santos (9)

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend Server
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com Zabbix
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a Bonita
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo Platform
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pev
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
 

Programando Software Livre em C

  • 1. 1
  • 2. Programando Software Livre em C Fernando Mercês 2
  • 3. Agenda ● Por que o C nunca vai sumir? ● A suíte de compiladores GNU ● Criando um projeto de exemplo ● Distribuindo o software ● Mercado 3
  • 4. Por que o C nunca vai sumir? ●Metade do universo é escrito em C (kernel Linux, Windows, httpd, samba, squid, bind, java, python, php, openldap, wine...) ● Desempenho: o compilador C gera código de máquina. ●Portabilidade: SIM, basta que seu código não dependa de bibliotecas não portáveis! E ainda existe Cygwin! ●Quem falou que C é velho? A última atualização da especificação foi em 2011. ●O comitê WG14 da ISO/IEC especificou na C11 recursos como multithreading (thread.h), bound checking em funções como strcpy() e estruturas anônimas. 4
  • 5. A suíte de compiladores GNU ●GNU Compiler Collection, compila C, C++, Objective-C, Fortran, Java, Ada e Go. ● A versão 4.7.1 saiu em 14 de junho deste ano. ● Conta com poderosos aliados como gdb e make. ●Extensa documentação, cheia de recursos, otimizações para processadores específicos, proteções de código etc. ● Mas existem outros livres como CLang, tcc... 5
  • 6. Brinque com o tcc! $ cat ate3.c #!/usr/bin/tcc -run #include <stdio.h> int main(void) { for (int i=0; i<3; i++) printf("%dn", i); return 0; } $ chmod +x ate3.c $ ./ate3.c --- $ cat << EOF | tcc -run - >main(void) { puts("Diz aê pro tcc!"); } >EOF 6
  • 7. A suíte de compiladores GNU ●GNU Compiler Collection, compila C, C++, Objective-C, Fortran, Java, Ada e Go. ● A versão 4.7.1 saiu em 14 de junho deste ano. ● Conta com um poderoso aliado: o GNU Debugger (gdb). ●Extensa documentação, cheia de recursos, otimizações para processadores específicos, proteções de código etc. ● Experimente também o tcc! 7
  • 8. Criando um projeto de exemplo ● O que eu quero? Setar um dispositivo de bloco (/dev/sdX) como somente leitura ou não, para evitar escrita acidental como echo 'lalalaal' > /dev/sdX. ● #comofas O Linux possui a syscall (e uma wrapper na glibc) ioctl, que aceita os comandos BLKROSET e BLKROGET. ● Consultar manual da função ioctl() $ man 2 ioctl int ioctl(int d, int request, ...); 8
  • 9. Prova de conceito #includes... int fd = open(“/dev/sdc”, O_RDONLY); int ro = 1; ioctl(fd, BLKROSET, &ro); --- # dd if=<(echo 'doingshit') of=/dev/sdc dd: writing to `/dev/sdc': Operation not permitted 9
  • 10. Antes de virar um projeto... ● E se der erro? Tratamento de erro (if). ● O usuário sabe o que o software faz? help(), usage(), documentação, manpages. ● Quais as dependências? ldd. ● Preciso licenciar o código? ● Cabeçalho GPL ou de outra licença livre. 10
  • 11. Antes de virar um projeto (cont.)... ● E o Makefile? all: gcc -W -Wall -Wextra -o devprot devprot.c clean: rm -f devprot ● Compilando o devprot.c $ make ● Testes Várias máquinas, diferentes arquiteturas. Diferentes dispositivos de blocos (para este caso). 11
  • 12. Distribuindo o software ● Tenho fegonha! Ah, focê chula?! ● Controle de versão para *código*. ●Source Forge para todo o resto, como binários pré- compilados. ● No Github é muito fácil enviar e receber patches. 12
  • 13. Mercado para C ●Kernel, aplicações 'core', alto desempenho, real time, embarcados. ●Google, Opera, Mandriva, Red Hat, várias de embarcados, de telecom, de segurança... ● Em alta, por tempo inderteminado! ● C++ também! ● Lucro (in)direto: colaborando com SL. ●Outras linguagens “nativas” como D e Go vão demorar um pouco para “colar”. Enquanto isso, divirta-C. ;-) 13
  • 14. Referências ● Especificações da linguagem C http://www.mentebinaria.com.br/artigos/0x1c/0x1c-cspecs.html ● WG14 http://www.open-std.org/jtc1/sc22/wg14/ ● Mudanças no gcc 4.7 http://gcc.gnu.org/gcc-4.7/changes.html ● BLKROGET e BLKROSET definidos em /usr/src/linux/fs.h ● devprot.c completo http://www.mentebinaria.com.br/files/devprot.c ● Escolha um pra colaborar: https://github.com/merces 14
  • 15. Obrigado Fernando Mercês contato@4Linux.com.br @4LinuxBR /4linux 15