PE loader (x86)

#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){
   
    //get dos_header and nt_header,judge if can load 

    //1.copy pe data
    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);

    //2.get header
    m_pe_dos_header 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值