Forum » Programiranje » [C++] Pogled v .exe datoteko
[C++] Pogled v .exe datoteko
goranv ::
Zanima me kateri podatki so vse zapisani v .exe datoteko razen tiste vsebine kar prestavlja program ki se izvaja. Zanimajo me podatki ki so napisani poleg casa ko se je ta datoteka ustvarila in druge. Na katerem mestu je napisano ime datoteke in sama pot do te datoteke in drugo?
Kako bi to lahko prebral z c ali c++.
LP
Kako bi to lahko prebral z c ali c++.
LP
'FireSTORM' ::
Če že uspešno programersko odpreš datoteko že veš kje točno se ta datoteka nahaja in veš njeno ime.
Those penguins.... They sure aint normal....
goranv ::
Mene zanima kje v datoteki je to zapisano in drugo ne samo ime.
Zanima me podobno kot vsebina BMP datoteke ko se shrani slika. Ker preden se shrani vsebina slike se najprej dolocijo neki parametri in potem slika jaz bi rad parametre od .exe.
Spodaj je primer BMP datoteke.
int WriteBitmapFile(char *filename, int width, int height, unsigned char *imageData)
{
FILE *filePtr; // file pointer
BITMAPFILEHEADER bitmapFileHeader; // bitmap file header
BITMAPINFOHEADER bitmapInfoHeader; // bitmap info header
int imageIdx; // used for swapping RGB->BGR
unsigned char tempRGB; // used for swapping
// open file for writing binary mode
filePtr = fopen(filename, "wb");
if (!filePtr)
return 0;
// define the bitmap file header
bitmapFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
bitmapFileHeader.bfType = 0x4D42;
bitmapFileHeader.bfReserved1 = 0;
bitmapFileHeader.bfReserved2 = 0;
bitmapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
// define the bitmap information header
bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biPlanes = 1;
bitmapInfoHeader.biBitCount = 24; // 24-bit
bitmapInfoHeader.biCompression = BI_RGB; // no compression
bitmapInfoHeader.biSizeImage = width * abs(height) * 3; // width * height * (RGB bytes)
bitmapInfoHeader.biXPelsPerMeter = 0;
bitmapInfoHeader.biYPelsPerMeter = 0;
bitmapInfoHeader.biClrUsed = 0;
bitmapInfoHeader.biClrImportant = 0;
bitmapInfoHeader.biWidth = width; // bitmap width
bitmapInfoHeader.biHeight = height; // bitmap height
// switch the image data from RGB to BGR
for (imageIdx = 0; imageIdx < bitmapInfoHeader.biSizeImage; imageIdx+=3)
{
tempRGB = imageData[imageIdx];
imageData[imageIdx] = imageData[imageIdx + 2];
imageData[imageIdx + 2] = tempRGB;
}
// write the bitmap file header
fwrite(&bitmapFileHeader, 1, sizeof(BITMAPFILEHEADER), filePtr);
// write the bitmap info header
fwrite(&bitmapInfoHeader, 1, sizeof(BITMAPINFOHEADER), filePtr);
// write the image data
fwrite(imageData, 1, bitmapInfoHeader.biSizeImage, filePtr);
// close our file
fclose(filePtr);
return 1;
}
Zanima me podobno kot vsebina BMP datoteke ko se shrani slika. Ker preden se shrani vsebina slike se najprej dolocijo neki parametri in potem slika jaz bi rad parametre od .exe.
Spodaj je primer BMP datoteke.
int WriteBitmapFile(char *filename, int width, int height, unsigned char *imageData)
{
FILE *filePtr; // file pointer
BITMAPFILEHEADER bitmapFileHeader; // bitmap file header
BITMAPINFOHEADER bitmapInfoHeader; // bitmap info header
int imageIdx; // used for swapping RGB->BGR
unsigned char tempRGB; // used for swapping
// open file for writing binary mode
filePtr = fopen(filename, "wb");
if (!filePtr)
return 0;
// define the bitmap file header
bitmapFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
bitmapFileHeader.bfType = 0x4D42;
bitmapFileHeader.bfReserved1 = 0;
bitmapFileHeader.bfReserved2 = 0;
bitmapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
// define the bitmap information header
bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biPlanes = 1;
bitmapInfoHeader.biBitCount = 24; // 24-bit
bitmapInfoHeader.biCompression = BI_RGB; // no compression
bitmapInfoHeader.biSizeImage = width * abs(height) * 3; // width * height * (RGB bytes)
bitmapInfoHeader.biXPelsPerMeter = 0;
bitmapInfoHeader.biYPelsPerMeter = 0;
bitmapInfoHeader.biClrUsed = 0;
bitmapInfoHeader.biClrImportant = 0;
bitmapInfoHeader.biWidth = width; // bitmap width
bitmapInfoHeader.biHeight = height; // bitmap height
// switch the image data from RGB to BGR
for (imageIdx = 0; imageIdx < bitmapInfoHeader.biSizeImage; imageIdx+=3)
{
tempRGB = imageData[imageIdx];
imageData[imageIdx] = imageData[imageIdx + 2];
imageData[imageIdx + 2] = tempRGB;
}
// write the bitmap file header
fwrite(&bitmapFileHeader, 1, sizeof(BITMAPFILEHEADER), filePtr);
// write the bitmap info header
fwrite(&bitmapInfoHeader, 1, sizeof(BITMAPINFOHEADER), filePtr);
// write the image data
fwrite(imageData, 1, bitmapInfoHeader.biSizeImage, filePtr);
// close our file
fclose(filePtr);
return 1;
}
napsy ::
Najbolje da si prebereš specifikacije za .exe zapis (beri COFF). Ime datoteke je zapisano v datotečnem sistemu in ne v datoteki sami. Enako velja za pot, ki sicer ni zapisano v takšni obliki ampak se sproti ustvarja. Ostale stvari, ki so zapisane v .exe pa spadajo tudi imena statičnih tabel, odvisnosti knjižnic in še mogoče kakšne podrobnosti prevajalnika.
"If you die, you die. But when you live you live. There is no time to waste."
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Android] SplošnoOddelek: Programiranje | 2005 (1135) | piki12 |
» | DLNA mreža za TV (PROGRAM)Oddelek: Programska oprema | 3671 (2817) | radmannsdorf |
» | kako narediti program ki bere drugi programOddelek: Programiranje | 5753 (4066) | imagodei |
» | [C++]Kako narediti screenshot?Oddelek: Programiranje | 1516 (1087) | *ziga* |
» | Skeniranje BMP ce vsebuje SubSlikoOddelek: Programiranje | 1376 (1269) | MTm2H37rqt7B |