Lire un éxécutable en mode binaire.
Bonjour les amis,
Je souhaiterai faire une extraction d'une partie de code, depuis un exécutable , et ce, en c++.
En fait, je possède un exe , qui contient, deux exe en un.
Je connais les adresses de début et de fin.
Je souhaiterai en c++ pouvoir extraire ce "bout de code" de cet exe avec mon adresse de début, et mon adresse de fin, puis en faire un nouvel exécutable.
On m'a dit de chercher du coté des IfStream....
J'ai éssayé d'adapter un exemple, mais c'est peu concluant, cela me donne un fichier de 3 octets...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
int length;
char * buffer;
char szExeName[256]; //Buffer qui va contenir le nom du fichier
GetModuleFileName (NULL, szExeName, 256);
ifstream is;
is.open (szExeName, ios::binary );
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// Je me positionne, et je lit
is.seekg (0X00000010);
is.read(buffer,85010);
is.close();
ofstream objetfichier;
objetfichier.open("monfichier.exe", ios::out); //On ouvrre le fichier en ecriture
if (objetfichier.bad()) //Permet de tester si le fichier s'est ouvert sans probleme
MessageBox("erreur","ok");
objetfichier <<buffer<<;
objetfichier.close(); //On ferme le fichier pour liberer la mémoire
delete[] buffer; |
Mon fichier final Mon Fichier.exe ne fais que 3octets.
Cela vient aparemment de la lecture, j'ai également changé les fofset de lecture, cela ne change rien, le fichier est mal lu.
N'y a t-il pas une autre solution de lecture ?
Sachant que, comme il s'agit d'un exe je dois lire en binaire, et si possible utiliser des adresse sous forme Héxadécimales.
Merci bcp :)
Nixeus'