» »

[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

'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;
}

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."

SasoS ::



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Android] Splošno

Oddelek: Programiranje
351937 (1067) piki12
»

DLNA mreža za TV (PROGRAM)

Oddelek: Programska oprema
83516 (2662) radmannsdorf
»

kako narediti program ki bere drugi program

Oddelek: Programiranje
465385 (3698) imagodei
»

[C++]Kako narediti screenshot?

Oddelek: Programiranje
121448 (1019) *ziga*
»

Skeniranje BMP ce vsebuje SubSliko

Oddelek: Programiranje
51323 (1216) MTm2H37rqt7B

Več podobnih tem