#include <iostream>
#include "PeLoader32.h"
#include <fstream>
using namespace std;
string readFile(const string & _file_name) {
fstream f(_file_name.data(), ios::in|ios::binary);
f.seekg(0, ios::end);
size_t len = f.tellg();
f.seekg(0, ios::beg);
char* buffer = new char[len];
f.read(buffer, len);
string result(buffer, len);
delete[]buffer;
return result;
}
int main(int argc, char** argv) {
string file_data = readFile("test.exe");
PeLoader32 p;
p.start((void*)file_data.data(), file_data.size());
return 0;
}
#include "PeLoader32.h"
#include <iostream>
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
bool PeLoader32::start(const void* _pe_data, size_t _pe_data_size){
bool b_ret = false;
do {
if (initPe(_pe_data, _pe_data_size) == false)break;
if (loadImage() == false)break;
if (dealIAT() == false)break;
if (dealReloc() == false)break;
if (executeEP() == false)break;
b_ret = true;
} while (false);
return b_ret;
}
bool PeLoader32::initPe(const void* _pe_data, size_t _pe_data_size){
m_pe_data_size = _pe_data_size+1;
m_pe_data_src =(LPVOID)(new char[m_pe_data_size]);
memcpy(m_pe_data_src, _pe_data, _pe_data_size);
m_pe_dos_header