Autor
|
Tema: C / C++ bit by bit --- exe to text y text to exe (Leído 9,390 veces)
|
<<<-Basura->>>
Desconectado
Mensajes: 388
|
Listo mire tengo este código simple: #include<stdio.h> int main(){ FILE *file; unsigned char buffer; //file = fopen("Prueba.txt","r+"); file = fopen("HolaMundo.exe","r+"); if(file!=NULL){ //printf("Archivo Abierto con exito."); //fread(&buffer,1,1,file); //printf("%c",buffer); int linea = 1; while (fread(&buffer , 1, 1, file ) == 1) // expecting 1 // element of size // BUFFER_SIZE { // process buffer // print format if(linea>=1 && linea<=8) if(linea==8) if(linea>=9 && linea<=15) if(linea==16){ linea=0; } linea++; } { // hit end of file } else { // some other error interrupted read } }else{ printf("Apertura del Fichero no fue exitosa."); } return 0; }
Bueno el código expuesto puede leer archivos de texto plano y los va a leer perfectamente. ya lo probé. A la hora de leer un archivo *.exe tengo el pequeño que lo lee mal. Como pueden ver es absurda la salida, si pueden leer en la salida se puede leer algo como: This program can be run in dos modeEste programa puede ser corrido en dos modoPero cuando lo abro con notepad++ y lo guardo como txt si realizo lo que necesito, el problema es que no necesito abrirlo con notepad++ sino necesito hacer un programa que lo haga... NOTA: que se parece absurdo transformar un exe a texto. pero es que realmente lo necesito.
|
|
|
En línea
|
<<<--Basura-->>>
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
La salida esta bien, así es como son representados los caracteres en ANSI-ASCII. Los ejecutable no tiene nada que ver con la codificacion de caracteres. Podes abrir algun ejecutable con un editor hexadecimal y se mostrara la representación en hexadecimal y la codificación que tenga establecida generalmente ANSI-ASCII. para hacerlo así como ellos podes usar sprintf pasando byte por byte.
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! No intentes utilizar la función feof para saber si has llegado al final de un archivo binario. Te puede dar falsos positivos, y la mayor parte de las veces te los dará (no me preguntes porqué), y no podrás leer el contenido del archivo. Primero tienes que saber el tamaño, en bytes, del fichero (utilizando por ejemplo ftell y fseek), y luego empiezas a leer datos desde el principio hasta alcanzar el numero de bytes que tenga el fichero. Si no conoces las fuciónes anteriores en www.cplusplus.com encontraras mas información. ¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
<<<-Basura->>>
Desconectado
Mensajes: 388
|
La salida esta bien, así es como son representados los caracteres en ANSI-ASCII. Los ejecutable no tiene nada que ver con la codificacion de caracteres. Podes abrir algun ejecutable con un editor hexadecimal y se mostrara la representación en hexadecimal y la codificación que tenga establecida generalmente ANSI-ASCII. para hacerlo así como ellos podes usar sprintf pasando byte por byte.
La salida esta mal ya que no representa lo que necesito, estoy viendo el mismo contenido del "exe" en el notepad++ También se hex y binario, y ASCII code Se lo que necesito pero no se como hacerlo. ¡Buenas! No intentes utilizar la función feof para saber si has llegado al final de un archivo binario. Te puede dar falsos positivos, y la mayor parte de las veces te los dará (no me preguntes porqué), y no podrás leer el contenido del archivo. Primero tienes que saber el tamaño, en bytes, del fichero (utilizando por ejemplo ftell y fseek), y luego empiezas a leer datos desde el principio hasta alcanzar el numero de bytes que tenga el fichero. Si no conoces las fuciónes anteriores en www.cplusplus.com encontraras mas información. ¡Saludos! Gracias por tu información voy hacer la prueba de lo que me dices!! Muchas gracias!!
|
|
|
En línea
|
<<<--Basura-->>>
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
1. Hola bueno lo que necesito es simple, Quiero tomar un fichero binario y transformarlo en texto... luego cuando tengo el texto quiero transformarlo a exe. Como ya te comentaron un archivo es una secuencia de bytes, imprimir el valor de cada uno literalmente (65, 97, etc. en base 10 o cualquier otra base) o como un carácter de algún juego de caracteres (por ejemplo en ASCII A, a, etc.) es cuestión del usuario. 2. Quisiera saber también como leer este fichero en Binario. En el caso de C basta con abrir el archivo en modo binario "rb" y leer los caracteres con funciónes como fread, fgetc, etc. pero no estoy seguro si eso es lo que buscas. Con todo un ejemplo sencillo (un "poor man's hex viewer") en C: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define NOM_ACHIVO "main.exe" #define NUM_COLS 16 int main(void) { FILE *in; unsigned char ch[NUM_COLS]; size_t nc; size_t i; if ((in = fopen(NOM_ACHIVO , "rb")) == NULL ){ return EXIT_FAILURE; } while ((nc = fread(ch , 1, NUM_COLS , in )) != 0){ for (i = 0; i < NUM_COLS; i++) if (i < nc) else for (i = 0; i < nc; i++) else } return EXIT_SUCCESS; }
La idea es imprimir valores hexadecimales (lo usual) y también como texto (cuando sea posible). Un saludo
|
|
« Última modificación: 1 Marzo 2014, 02:57 am por rir3760 »
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
<<<-Basura->>>
Desconectado
Mensajes: 388
|
Gracias por publicar tu código: rir3760Gracias la ayuda brindada me ayudo a resolver el problema: do-whileYa tengo mi solución también, para quien la necesite: #include<stdio.h> int main(){ FILE * pFile; FILE * newFile; long size; pFile = fopen ("Hola.exe","rb"); newFile = fopen("EXE.exe","w+b"); if (pFile ==NULL && newFile ==NULL ) perror ("Error opening file"); else { fseek ( pFile , 0 , SEEK_END ); printf("Total de bytes: %d\n",size ); fseek ( pFile , 0 , SEEK_SET ); unsigned char buffer; for(int i = 0; i < size ; i++ ){ fread(&buffer ,1,1,pFile ); //printf("%c",buffer); fwrite(&buffer , 1, sizeof(buffer ), newFile ); } } return 0; }
|
|
« Última modificación: 1 Marzo 2014, 03:28 am por <<<-Underwar->>> »
|
En línea
|
<<<--Basura-->>>
|
|
|
Gh057
Desconectado
Mensajes: 1.190
|
hola <<<-Underwar->>> no te tira error de segmentación? también veo que debería haber un warning por la variable size, fue declarado long int pero lo visualizas como entero (línea 17)
saludos
|
|
|
En línea
|
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
|
|
|
<<<-Basura->>>
Desconectado
Mensajes: 388
|
La respuesta es no. Que compilador estas usando ?? Nota: Falta cerrar el Fichero: newFile
|
|
|
En línea
|
<<<--Basura-->>>
|
|
|
Gh057
Desconectado
Mensajes: 1.190
|
solo miré el código, pero en g++ lo deberías visualizar como %li.; si justamente por la falta del cierre de newfile es que te preguntaba si no te tiraba error. saludos
|
|
|
En línea
|
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
|
|
|
<<<-Basura->>>
Desconectado
Mensajes: 388
|
Depende del sistema que se este usando pero: int : 4 bytes long : 4 bytes
En lo mas profundo son siempre lo mismo
|
|
|
En línea
|
<<<--Basura-->>>
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
un problema con el text
Programación Visual Basic
|
sorcerer
|
3
|
2,018
|
10 Julio 2005, 02:56 am
por Kizar
|
|
|
Problemas con los text box
Programación Visual Basic
|
Tiny_007
|
6
|
2,227
|
1 Enero 2006, 22:39 pm
por Tiny_007
|
|
|
Text + Image
Programación Visual Basic
|
Arc_Dream5
|
4
|
2,021
|
8 Abril 2006, 00:34 am
por Ironhorse
|
|
|
DUDA CON TEXT
Programación Visual Basic
|
CARRY-ON
|
4
|
1,862
|
15 Abril 2006, 05:05 am
por _Sergi_
|
|
|
Dificultad VBScript [MSXML2.XMLHTTP + RESPONSE.TEXT + TEXT AREA)]
Scripting
|
JohnConnor
|
0
|
2,360
|
16 Enero 2013, 12:37 pm
por JohnConnor
|
|