Como compilar programas em código nativo em C++

on sexta-feira, 23 de novembro de 2012
Neste tutorial irei mostrar como compilar programas em códigos nativos, gerando executáveis em código assemble ao invés de códigos compilados com base de .Net Framework, o que deixa seu aplicativo muito mais leve, rápido, e mais seguro.



Porque gerar códigos nativos?


Programas desenvolvidos em .Net Framework são executados com base em suas bibliotecas, ou seja, você executa o programa, e ao invés dele executar diretamente usando recursos do Sistema Operacional, ele busca recursos em dlls do .Net Framework, e com isso é como se o seu programa fosse compilado duas vezes, o que demora muito mais do que um programa que roda diretamente com base nos recursos do Sistema Operacional.

Irei mostrar 3 métodos para compilar seus programas em códigos nativos, utilizando os seguintes softwares:

1: Visual Studio
2: wxDevc++ 
3: C++ Builder

Ambos desenvolvem aplicativos em C++ e todos eles são capazes de gerar códigos nativos em assemble do seu executável.

O Visual Studio trabalha com base em .Net Framework, porem aplicativos desenvolvidos em C++, dependendo de sua finalidade, não necessita de .Net Framework, por isso você pode gerar códigos nativos e deixar seus aplicativos mais leve e rápido para serem executados.

Exemplos


Obs: se você ja sabe a diferença entre programas com código .Net Framework e códigos assemble, sugiro que pule esta parte de exemplos.

Para ficar mais fácil de entender vou dar um exemplo, há vários programas que "desmontam" seus arquivos executaveis ou dlls e mostram o código fonte, e programas com base em .Net o código é mantido intacto, o que deixa seu programa nada seguro, vou mostrar um exemplo do programa "Net Reflector" que faz esse processo inverso e mostra o código fonte de executáveis desenvolvidos em .Net.

Fiz um programa "Olá Mundo" em C++ com base em .Net e depois de pronto, descompilei com o programa Net Reflector e veja o resutlado:


O código está la, exatamente como foi programado, o que é uma grande desvantagem para programadores que desenvolvem grandes programas para o mercado, já que seu código fonte fica totalmente acessível a qualquer pessoa.

Agora veja a diferença entre um programa compilado em código nativo gerando um executável em assemble:


O programa ja não mostra o código fonte igual a programas com base em .Net, e mesmo utilizando outro programa para analizar o código fonte, o mesmo mostra apenas códigos assemble, o que dificulta e muito a interpretação do código e deixa seu programa bem mais seguro:


Esse é um dos motivos para você preferir compilar seus programas em códigos nativos ao invés de compilar com base em .Net, não estou dizendo que .Net é uma plataforma insegura ou ruim, até mesmo porque utilizando a plataforma .Net você consegue desenvolver grandes softwares, mas por outro lado este acaba sendo um ponto fraco da plataforma, claro que você pode utilizar programas para "ofuscar" o código fonte, mas não abordaremos neste tópico.

Como criar programas C++ em códigos nativos utilizando o Visual Studio?


Crie um novo projeto MFC


Clique em Next:


Selecione "Dialog based" e depois marque a opção "Use MFC in a static library", assim você poderá distribuir seus programas sem depender de nenhuma dll, e depois clique em "Finish", veja a imagem:


Pronto, você já pode desenvolver seus programas em C++ e ao compilar o executável, ele ira gerar códigos nativos em assemble.


O bom desta opção é que você pode utilizar recursos de arrastar e soltar botões na janela, não precisando programar onde vai ficar cada objeto.

Como criar programas C++ em códigos nativos utilizando o wxWidgets?


Na verdade, programas desenvolvidos no wxWidgets já são compilados em códigos nativos, e o bom é que você pode desenvolver um programa na mesma estrutura e com poucas alterações ou até mesmo nenhuma, você poderá compilar para Windows e Linux utilizando o mesmo código que irá funcionar sem problemas, claro que se você utilizar funções específicas do Windows, e utilizar no Linux, você terá que alterar estas funções de acordo com o sistema.

o wxWidgets é gratuito, e nesta versão que deixarei o link para download, ele esta integrado com o DevC++, criando o programa wxDevC++.

http://www.wxwidgets.org/downloads/

Não irei mostrar prints com configurações, pois o mesmo não possui nenhuma opção que caso não seja configurada corretamente impede que o executável seja compilado em código nativo.

Como criar programas C++ em códigos nativos utilizando o C++ Builder?


O C++ Builder também gera códigos nativos quando compilado, o que eu quero mostrar para vocês é como tirar a dependência das dlls e arquivos .bpl que o executável gera, caso não seja configurado corretamente.

Primeiro vamos remover a dependência dos arquivos .bpl "rtl170.bpl, rtl170.bpl e rtl170.bpl".

Crie um projeto normalmente, pode ser em VCL mesmo, depois clique com o botão direito em cima do projeto e escolha "Options":


Procure por "Packages > Runtime Packages" e desmarque a opção "Link with runtime packages"



Assim você remove a dependência dos arquivos .bpl que o programa gera quando é compilado, caso você não remova esta opção, quando o aplicativo for executado em outro computador que não tenha o C++ Builder instalado ira ocorrer o erro:

O programa não pode ser iniciado porque está faltando rtl170.bpl no
seu computador. Tente reinstalá-la para resolver esse problema.

Agora vamos remover a dependência das dlls "borlndmm.dll" e "cc32120mt.dll"

Também em options, procure por "C++ Linker" e desmarque a opção "Link with Dynamic RTL"


Faça o mesmo para o modo "Release", expanda a opção "Build Configurations" e clique duas vezes em cima de Release, a opção irá ficar em negrito, mostrando que está selecionada:


Se você configurar apenas em Debug, as alterações não serão feitas em Release e vice versa, portanto configure nos dois modos.

Assim você remove a dependência das dlls, e seu software pode ser distribuído normalmente, e quando for executado em outro computador, não irá ocorrer nenhum erro com falta de dll ou arquivo bpl.

Bonus


O C++ Builder vem com alguns skins disponíveis, o que deixa seus programas muito mais bonitos.

Para selecionar skins para seu programa, na mesma janela "Options", procure por "Application > Appearance"



Selecione um skin e clique em Preview para ver sua aparência, depois de selecionar seu skin clique em OK, quando seu programa for executado ele ira mostrar o skin que você selecionou:


O bom é que você pode desenvolver todo o software, e depois de pronto pode optar ou não por adicionar um skin ao seu software, o que não é a mesma facilidade no Visual Studio e em outros programas.

Créditos


Gostaria de deixar meus devidos créditos ao nosso amigo Fergo e TerraSkilll por ter me ajudado a resolver o problema de como gerar códigos nativos em C++ no VS e por terem me ajudado também a resolver os problemas com erros de .bpl e dlls no C++ Builder, muito obrigado.

Tutorial by rflfn

0 comentários:

Postar um comentário

Não use palavrões, não use letras MAIÚSCULAS, não poste spans ou material ofensivo, respeite a todos para ser respeitado.

.