Funções de C/C++ sendo executadas em Perl

Perl é ótimo quando se trata de Redes/Segurança da Informação e Manipulação de textos.
É possível usar linguagem C em seus scripts Perl. Aqui na Insecuritynet temos uma vasta biblioteca de funções em C utilizada para a construção do Insecuritynet 3.X, tudo pode ser aproveitado em scripts Perl sem a necessidade de ser reprogramado.
Vamos ver passo a passo como isto é feito
Clique aqui para baixar todos os códigos presentes no tutorial
1) Programando em C
Se você não conhece a linguagem C, clique aqui e baixe o Dev C/C++.
É o compilador que irá transformar seus códigos em um aplicativo.
Vamos criar uma simples função que soma dois números:
Abra o DEV C/C++ e entre em:
Arquivo -> Novo -> Arquivo Fonte

Copie este código no programa:
#include <stdio.h> #include <conio.h> #include <windows.h> int main() { int a = 20; int b = 30; int x = a + b; printf ("%d + %d = %d",a,b,x); system ("pause > nul"); } |
Clique em compilar e salve o programa como “primeiro_programa”

Clique no programa que você criou:


2-) Programando em Perl
Se você não conhece a linguagem Perl, clique aqui e baixe o Active Perl.
É o ativador que irá transformar seus códigos em um aplicativo.
Baixe tambem o Notepad++, irá te auxiliar a manipular códigos.
Vamos criar um simples "ola mundo"
Depois de instalado o Active Perl e o Notepad++, abra o Notepad++ e copie este código:
#!/usr/local/bin/perl print "Ola Mundo!"; system "pause > nul"; |
Salve o script como “primeiro_programa_perl.pl”

Execute o script que você criou


3-) Criando um DLL em C
Vamos fazer com que a função feita em linguagem C funcione sobre o script Perl.
Para isto devemos colocar a função compilada dentro de uma DLL
Para criar a DLL, abra o DEV C/C e entre em:
Arquivo -> novo -> Projeto-> DLL
Salve com o nome “minha_dll”

Note que agora temos duas abas:
dllmain.cpp e dll.h

Na aba “dllmain.cpp” copie este código:
#include "dll.h" #include <windows.h> extern "C" __declspec(dllexport) int __stdcall funcao_somar_numeros(int a, int b) { int i = 0; i = a + b; return i; } |
Na aba “dll.h” copie este outro código:
#ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ extern "C" __declspec(dllexport) int __stdcall funcao_somar_numeros(int a, int b); #endif |
Clique em salvar, nas duas abas:

Agora compile seu projeto:

Agora você tem sua DLL

4-) "Lendo" a DLL dentro do Perl
Agora vamos carregar a função soma que está na DLL em nosso Perl Script.
Copie o arquivo “minha_dll.dll” para o diretorio onde se encontra seu Script Perl.

Vamos editar nosso Perl Script

Copie este codigo:
#!usr/bin/perl -w print "Ola Mundo! \n"; use Win32::API; my $a = 5; my $b = 3; Win32::API->Import('minha_dll', 'int funcao_somar_numeros(int a, int b)',); my $resultado= funcao_somar_numeros($a, $b); print "$a + $b = $resultado"; system "pause > nul"; |
Execute seu Perl Script

Veja que a os números foram somados e a função que fez a soma está na DLL.
Este tutorial foi bem superficial, sem detalhes dos código, a intenção é apenas mostrar que as duas linguagens podem interagir entre si, e isto acaba abrindo um grande leque de possibilidades, por exemplo:
Você pode criar Web-sites com Perl (assim como é feito com PHP), sendo assim você pode transformar um programa feito em C em um serviço online de forma muito simples.
Gostaria de aprender mais sobre programação em Perl, conheça nosso Curso PPAS.