[SP-pm] Compilados ou Interpretados, mas sempre programas... [Was: Boas Vindas ao Otávio Fernandes]
Luis Motta Campos
luismottacampos em yahoo.co.uk
Quarta Abril 18 01:47:31 PDT 2007
On Apr 17, 2007, at 6:28 PM, Otávio Fernandes wrote:
> On 4/17/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
>> On Apr 17, 2007, at 3:00 PM, Otávio Fernandes wrote:
>>> será que mesmo usando o PAR::Filter::Crypto
>>> (http://search.cpan.org/~shay/Filter-Crypto-1.18/lib/PAR/Filter/
>>> Crypto.pm)
>>> o deparse ainda teria sucesso ?
>>
>> Claro. Como você espera que o Perl execute o seu programa? Alguém
>> tem de ter a chave para abrir a criptografia, ou o interpretador não
>> vai conseguir ler o código. Quando você abrir, entra o B::Deparse, e
>> adeus, código.
>
> hehehe, esperava que ele guardasse outras informações do programa,
> como o byte code, por exemplo, e fizesse uso deste como instrução e
> não como código, propriamente dito ...
Vamos falar sobre morfologia, a ciência que estuda a forma das
coisas, e também das linguagens de programação.
Qual é a diferença entre um programa Perl, um programa C
compilado, um programa assembly e linguagem de máquina,
morfológicamente falando? Existe alguma diferença na *forma* dos
programas?
A resposta mais simples é "não". Morfologicamente, todos os
programas são a mesma coisa: um conjunto de sinais elétricos que
estimula um pedaço de silício a produzir outro conjunto de sinais
elétricos de uma forma muito rápida e bem previsível. Assim, exceto
pelo "mito" criado sobre a engenharia eletrônica, programas de
computador não estão mais ou menos protegidos quando compilados.
Isso implica diretamente que todos os programas podem ser
"compilados" para outras linguagens: um programa C é "compilado" para
linguagem de máquina para ser executado por um processador
específico, mas o que o compilador gera, na verdade, nada mais é do
que um programa, como o que foi apresentado para ele inicialmente. Um
programa Perl, ou assembly, segue o mesmo caminho: são compilados
para linguagem de um processador específico, que "entende" e
"executa" as "instruções" que lhe são passadas. Que, na verdade, em
nada diferem de qualquer outra linguagem de programação.
Isso quer dizer que NADA IMPEDE QUE UM PROGRAMA EM LINGUAGEM DE
MÁQUINA (também conhecido como "executável" em algumas culturas) SEJA
COMPILADO DE VOLTA PARA UMA OUTRA LINGUAGEM DE PROGRAMAÇÃO QUALQUER.
Claro, tem complicantes e agravantes: um programa C normalmente
sofre otimizações horríveis, e faltam muitas informações, depois que
a gente compila ele para linguagem de máquina. É necessário um
profissional com profundos conhecimentos da linguagem de máquina e do
sistema operacional utilizado para "compilar" o programa em linguagem
de máquina para outra linguagem qualquer. Mas isso normalmente é
possível e relativamente fácil de fazer, comparativamente com o que
era alguns anos atrás.
Espero que isso ajude você a encontrar a luz... :)
Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão SaoPaulo-pm