Pregunta

Tengo un ejecutable de línea de comando que altera algunos bits en un archivo que quiero usar desde mi programa. ¿Es posible crear mi propio ejecutable que use esta herramienta y distribuir solo un ejecutable?

[edit] Aclaración:

La herramienta de línea de comando toma un desplazamiento y algunos bits y cambia los bits en este desplazamiento en un archivo dado. Entonces, quiero crear un parche para una aplicación que cambie bits específicos a un valor específico, así que lo que puedo hacer es escribir un archivo por lotes para hacerlo, pero quiero crear un ejecutable que lo haga, es decir, incrustar la herramienta en un programa contenedor que lo llama con valores específicos.

Puedo codificar el contenedor en (windows) c \ c ++, asm pero no .net por favor.

¿Fue útil?

Solución

Sería más fácil implementar su propia implementación de este programa que escribir el contenedor; parece trivial: simplemente abra el archivo, busque la ubicación correcta, escriba sus bits, cierre el archivo, listo.

Otros consejos

La forma más fácil es incrustar este exe en el tuyo y escribirlo en el disco para ejecutarlo.

Puede agregar el ejecutable como un recurso de flujo binario en su ejecutable y cuando lo necesite puede extraerlo en una carpeta temporal y crear un nuevo proceso con el archivo temporal.

El código exacto que necesita hacer esto depende de si está escribiendo código .Net o C ++.

Respuesta corta: No.

Respuesta menos breve: no, a menos que sea un instalador o un archivo ejecutable autoextraíble.

Respuesta especulativa más larga: si el sistema de archivos admite flujos de datos alternativos, posiblemente podría agregar un flujo que contenga la utilidad a su programa, entonces su programa podría acceder a su propio flujo de datos alternativo, extrayendo la utilidad cuando la necesite. Jajaja.

Puede agregar un ejecutable al final del otro y escribir un código para descomprimirlo en una carpeta temporal.

He hecho algo similar antes pero con un archivo de configuración y algunos mapas de bits adjuntos a un EXE en Windows. La forma en que lo hice fue agregar primero mis cosas al final del EXE y luego escribir una pequeña estructura después de eso que contiene el desplazamiento del archivo de los datos que en su caso sería el desplazamiento del 2do exe.

Cuando ejecute su aplicación, busque el final del archivo menos el tamaño de la estructura, extraiga el desplazamiento del archivo y copie el segundo exe en una carpeta temporal, luego ejecútelo.

OK, aquí hay un poco más de detalles según lo solicitado. Este es un pseudocódigo para crear el EXE combinado. Esta es una pequeña utilidad que ejecuta después de compilar su 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

Ahora para el procedimiento de extracción. Esto va en su 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

Creo que la forma más fácil de hacer esto para sus propósitos es probablemente usar un paquete ejecutable autoextraíble. Por ejemplo, use una herramienta como Paquet Builder que empaquetará el exe (y cualquier otro archivos que desee) y puede configurarse para llamar al exe o un archivo por lotes o cualquier otra cosa que desee cuando el usuario desempaque el ejecutable autoextraíble.

Si el exe fue construido para ser reubicable (essentiall linker flag / fixed: no), en realidad puede hacer un LoadLibrary en él, obtener la dirección base, configurar una cadena de llamadas y llamar (saltar). No valdría la pena el esfuerzo, y muy pocos ejecutables se crean de esta manera, por lo que tendría que tener el código para reconstruirlo, momento en el que no estaría en este ejercicio.

Entonces ... No.

Estoy más intrigado por el desarrollador que no le importa escribir en C / C ++ / asm, pero 'no .net', pero aparentemente está bloqueado por fopen / fseek / fwrite, ya que se trata de todo el programa que describe suena como si lo estuviera haciendo.

Creo que esto también es posible utilizando función FileInstall de AutoIt . Para ello, tendrá que configurar AutoIt, crear un script con la función FileInstall para incluir el who exe y luego usar f.i. función RunWait para ejecutarlos. Compile a un exe y ya debería haber terminado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top