#pragma once
#include <windows.h>

class PE_file
{


IMAGE_DOS_HEADER* dos;
IMAGE_FILE_HEADER* fhead;
IMAGE_OPTIONAL_HEADER32* opt_head;
IMAGE_SECTION_HEADER* sect_head;

DWORD PE_offset;
DWORD section_offset;
DWORD PE_size;
int cur_pos;

public:
	char* buf;
	PE_file(HMODULE h);
DWORD RVA_to_RAW(DWORD RVA);  // konwersja RVA do RAW
DWORD RAW_to_RVA(DWORD RAW);  //konwersja z RAW do RVA
DWORD VA_to_RVA(DWORD VA);		// VA -> RVA
DWORD RVA_to_VA(DWORD RVA);		// RVA -> VA
DWORD Get_EP(void);				// Pobiera Entry Point(RVA)
DWORD Get_IB(void);				// Pobiera ImageBase
DWORD Get_Section_Count(void);	//Pobiera ilosc sekcji
IMAGE_DOS_HEADER* GetDosHeader(void);	//Zwraca naglowek DOS
IMAGE_FILE_HEADER* GetFileHeader(void);	//Zwraca naglowek pliku
IMAGE_OPTIONAL_HEADER32* GetOptionalHeader(void);	//Zwraca naglowek opcjonalny(no taki opcjonalny to on nie jest)
IMAGE_SECTION_HEADER* GetSectHeader(DWORD n);		//Zwraca naglowek podanej sekcji
PE_file(char* name,DWORD extra_size=0);			//Konstruktor		name-nazwa pliku , extra_size - dodatkowy rozmiar na nowe sekcje
void  Set_IB(DWORD);							//ustawia nowy Image base (nie wiem po co to robic ale jakby ktos chcial)
void  Set_EP(DWORD);							//ustawia nowy Entry point
void AddNewSection(DWORD Vsize,DWORD RSize,DWORD access,char* name);	//Dodaje nowa sekcje	Vsize-wielkosc Virtual
// Rsize wielkosc RAW (pierwszy i drugi parametr moga byc takie same) access - prawa dostepu name - nazwa nowej sekcji
					
bool init;

};
