API C: carregar e executar o mesmo binário.

1. API C: carregar e executar o mesmo binário.

???
gokernel

(usa Linux Mint)

Enviado em 04/12/2016 - 09:00h

Olá !

Estou "vendo" como implementar a chamada e execução de arquivos binários multi-plataforma ( só windows e linux ;) ) ...

No Windows usa-se arquivos tipo ( PE / COFF ) no Linux usa-se arquivos tipo ( ELF ), vou tentar fazer o meu aplicativo executar um único binário ( não estou falando de java não ) nas 2 plataformas.

Pergunta:
Existe uma API em C que já faça isso ( carregar e executar o mesmo binário ) nas 2 plataformas ? ou vou ter de começar do zero ?

Por gentileza não citar JAVA, é eu já sei ;).

Grato !



  


2. Re: API C: carregar e executar o mesmo binário.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/12/2016 - 11:21h

Um arquivo não tem como ser PECOFF e ELF ao mesmo tempo. Então a questão possivelmente não é apenas um problema de API (ao menos não num nível da aplicação).

A chamada execve() é a chamada ao kernel do Unix que cuida da execução de novos programas a partir de arquivos, e ela reconhece apenas alguns tipos de arquivos como prontamente executáveis pelo sistema. Para adicionar novos tipos de arquivos, como o PECOFF, você teria de mexer no kernel, acrescentando código para tratar um novo formato.

O Linux tem o mecanismo binfmt_misc, que permite a você registrar formatos que o kernel deve aceitar como executáveis, mas submetendo a carga dos respectivos arquivos e o disparo de sua execução a algum interpretador, que executa fora do kernel. O WINE pode funcionar dessa maneira: você associa a assinatura de arquivos PECOFF ao interpretador /usr/bin/wine (ou qualquer outro lugar em que ele esteja instalado). Também programas em Java podem ser configurados para trabalhar de modo semelhante (mas possivelmente usando o sufixo do nome do arquivo, em vez de assinatura).

Não se assuste com o nome “interpretador”. Não significa que você não possa executar código nativo diretamente no processador, nem que você estará dentro de uma máquina virtual ou coisa parecida; pode ser assim se você quiser (ou necessitar), mas nada o impede de, após carregar o arquivo para a memória e fazer os devidos ajustes, dar tão somente um JUMP para um endereço mapeado do arquivo carregado.


3. Re: API C: carregar e executar o mesmo binário.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/12/2016 - 11:36h

Que mal lhe pergunte, qual o objetivo final do que você quer fazer?


4. Re: API C: carregar e executar o mesmo binário.

???
gokernel

(usa Linux Mint)

Enviado em 04/12/2016 - 13:35h

paulo1205 escreveu:
Que mal lhe pergunte, qual o objetivo final do que você quer fazer?

Olá paulo1205 !

Estou querendo implementar na SIMPLE Language(compilador) a geração de binário para as 2 plataformas... isso é interessante quando pretende-se proteger tipo um aplicativo onde mexe com "informaçoes protegidas".

Acho que vou criar o meu próprio "tipo de arquivo" binário.


5. Re: API C: carregar e executar o mesmo binário.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/12/2016 - 21:58h

Você disse que o seu aplicativo vai chamar o arquivo binário? Nesse caso, em que o seu aplicativo vai fazer o papel de loader, você é quem determina como se dará a carga e o início da execução.

Se você quiser fazer com que o seu compilador gere executáveis nativos, talvez queira gerar apenas código objeto como resultado da compilação, e depois submeter esse objeto ao linker do sistema.

Eu nunca brinquei com esse tipo de coisa mas, vendo a documentação, parece que o linker do Linux, que é o GNU ld, aceita como entrada arquivos objeto em múltiplos formatos simultaneamente. Desse modo, o seu compilador poderia produzir apenas objetos COFF, e esse formato poderia ser aceito tanto pelo linker do Windows, que o emprega nativamente, quando pelo do Linux, que (supostamente) o reconhece, mesmo sem ser o nativo e preferido no sistema.


6. Re: API C: carregar e executar o mesmo binário.

???
gokernel

(usa Linux Mint)

Enviado em 05/12/2016 - 10:40h

Olá +1 vez paulo1205 !

Cara, acho que vou implementar algo próprio ... tipo assim: quem quiser usar a API(de grátis) usa tipo "script" mas quem tem interesse em "proteger as informaçoes" usa uma version paga(sim paga e encriptada) ... sacou $ ?.

Ententeu a lógica ? ...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts