Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 13:11   #1
wmzvov
Пользователь
 
Аватар для wmzvov
 
Регистрация: 16.03.2010
Сообщений: 12
По умолчанию определение размера PE файла

В конец первого exe записываю второй exe фаил, необходимо чтобы первый определил изначальный свой размер, для того чтобы можно было из себя извлечь второй фаил и запустить. Изначальный размер необходимо определить из своей структуры.

Из каких данных в структуре PE файла можно узнать изначальный размер файла?

Код:
#include "stdafx.h"
#include "windows.h"
#include "winnt.h"

#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))

int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE hFile;
	DWORD dwFileSize1, dwFileSize2;
	BYTE* fBuf;
	char* fName1;
	char* fName2;
	DWORD dwBytes1,dwBytes2,dwBytes;

	fName1 = "X-file1.exe";
	fName2 = "deCryptor.exe";
	CreateDirectory("c:\\test_all",NULL);
	SetCurrentDirectory("c:\\test_all");

	hFile = CreateFile(fName2,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	if (hFile!=NULL) printf("CreateFile OK\n");
	dwFileSize1 = GetFileSize(hFile, NULL);

	HANDLE mFile = CreateFileMapping(hFile, 
		NULL,
		PAGE_READONLY,
		0,
		0,
		NULL);
	if (mFile!=NULL) printf("CreateFileMapping OK\n");
	long hMap = (long)MapViewOfFile(mFile,
		FILE_MAP_READ,
		0,0,0);
	if (hMap!=NULL) printf("MapViewOfFile OK\n");
	getchar();



	PIMAGE_NT_HEADERS pPE=(PIMAGE_NT_HEADERS)NTSIGNATURE(hMap);
	DWORD dwSizePE = pPE->OptionalHeader.SizeOfImage;
	DWORD dwSizeBuf = dwFileSize1 - dwSizePE;
	fBuf = new BYTE[(int)dwSizeBuf];
	SetFilePointer(hFile, dwSizePE, NULL, FILE_BEGIN);
	ReadFile(hFile, fBuf, dwSizeBuf, &dwFileSize1, NULL);
	CloseHandle(hFile);
	CloseHandle(mFile);

	hFile = CreateFile(fName1,
		GENERIC_WRITE,
		0,
		NULL,
		CREATE_NEW,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
    WriteFile(hFile, fBuf, dwSizeBuf, &dwFileSize1, NULL);
    CloseHandle(hFile);

	delete [] fBuf;
}

Последний раз редактировалось Stilet; 16.11.2010 в 13:54.
wmzvov вне форума Ответить с цитированием
Старый 16.11.2010, 13:48   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

чтобы получить размер исполняемого файла надо проанализирновать таблицу секций.
найти последнюю секцию получить смещение и размер RAW данных, сумма этих двух значений будет размером PE файла.
rpy3uH вне форума Ответить с цитированием
Старый 16.11.2010, 13:57   #3
wmzvov
Пользователь
 
Аватар для wmzvov
 
Регистрация: 16.03.2010
Сообщений: 12
По умолчанию

Спасибо, буду пробовать
wmzvov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определение размера массива maksim_serg Microsoft Office Excel 1 29.03.2010 07:00
Определение размера операнда и адреса Sergey.Voloxov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 06.03.2010 22:58
Какое определение размера лучше? Ozerich HTML и CSS 7 12.02.2009 23:55
Определение цвета и размера заголовков окон VDLab Win Api 2 28.12.2006 17:24