Pergunta

Eu tenho um executável de linha de comando que altera algumas bits em um arquivo que eu quero usar do meu programa. É possível criar o meu próprio executável que usa esta ferramenta e distribuir apenas um executável?

[editar] Esclarecimento:

A ferramenta de linha de comando leva um deslocamento e alguns bits e muda os bits neste deslocamento em um determinado arquivo. Então, eu quero criar um patcher para um aplicativo que muda bits específicos para um valor específico, então o que posso fazer eu escrever algo como um arquivo de lote para fazê-lo, mas eu quero criar um executável que faz isso, ou seja, inserir a ferramenta no um programa wrapper que chama-lhe com valores específicos.

Posso invólucro código (Windows) c \ c ++, asm mas nenhum .net favor.

Foi útil?

Solução

Seria mais fácil para rolar sua própria implementação deste programa do que escrever o invólucro; parece que ele é trivial -. basta abrir o arquivo, procure o local certo, escrever seus bits, feche o arquivo, você está feito

Outras dicas

A maneira mais fácil é para incorporar este exe em seu próprio e escrevê-lo em disco para executá-lo.

Você pode adicionar o executável como um recurso fluxo binário em seu executável e quando você precisar dele você pode extraí-lo em uma pasta temporária e criar novo processo com o arquivo temporário.

O código exato que você precisa fazer isso depende se você está escrevendo código .NET ou C ++.

resposta curta: Não.

Menos resposta curta:. A não ser que ele é um instalador ou um auto-extraível executeable arquivo

Longer, resposta especulativa: se os suportes do sistema de arquivos fluxos de dados alternativos, você poderia adicionar um fluxo que contém o utilitário para o seu programa, então o seu programa pode acessar seu próprio fluxo de dados alternativo, extraindo o utilitário quando você precisar dele. Ahaha.

Você pode anexar a um executável para o final do outro e escrever algum código para descompactá-lo para uma pasta temporária.

Eu fiz uma coisa semelhante antes, mas com um arquivo de configuração e alguns bitmaps anexado a um EXE no Windows. A maneira que eu fiz foi para anexar em primeiro lugar as minhas coisas para o final do EXE e, em seguida, escrever um pouco struct depois daquela que contém o arquivo de compensação dos dados que no seu caso seria o deslocamento da 2ª exe.

Ao executar o aplicativo, procurar ao final do arquivo menos o tamanho da estrutura, extraia o arquivo offset e copiar o 2º exe para uma pasta temporária, em seguida, iniciá-lo.

OK, aqui é um pouco mais de detalhes como requestd. Este é um pseudo-código para criar o EXE combinado. Este é um pequeno utilitário é executado depois de compilar o EXE principal:

Open destination file
Open main exe as a binary file
Copy main exe to destination file
offset = size of main exe
Open 2nd exe as a binary file
Copy 2nd exe to the output file
Write the offset to the output file

Agora, para o procedimento de extração. Isto vai em seu EXE principal:

Find the location of our own EXE file (GetModuleFileName() under Windows)
Open the file in binary mode
Seek to the end minus sizeof(offset) (typically 4 bytes)
Read the offset value
Seek to the offset position
Open a temporary file in binary mode
Read bytes from the main EXE and write to the temporary file
Launch the temporary file

Eu acho que a maneira mais fácil de fazer isso para seus propósitos é, provavelmente, usar um auto-extraível pacote executável. Por exemplo, usar uma ferramenta como Paquet Builder que irá embalar o exe (e qualquer outro arquivos que você deseja) e pode ser configurado para chamar o exe ou um arquivo de lote ou qualquer outra coisa que você quer quando o usuário descompacta o executável de extração automática.

Se o exe foi construído para ser relocatable (essentiall sinalizador de vinculador / fixo: não), você pode realmente fazer um LoadLibrary sobre ele, obter o endereço base, criar uma cadeia de chamadas e chamada (salto) para ele. Não valeria a pena o esforço, e muito poucos do exe são construídos dessa maneira para que você teria que ter o código para reconstruí-lo, momento em que você não seria neste exercício.

Então ... Não.

Estou mais intrigado com o desenvolvedor que não se importa escrevendo em C / C ++ / asm, mas 'não .net' - mas é, aparentemente frustrados por fopen / fseek / fwrite - já que é sobre todo o programa que descrevem Soa como ele está fazendo.

Eu acho que isso também é possível usando de AutoIt função FileInstall . Para isso, você vai ter que AutoIt configuração, crie um script com a função FileInstall para incluir o que exe do e, em seguida, usar f.i. função RunWait para executá-los. Compilação para um exe e você deve ser feito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top