c语言格式错误pe,C语言PE文件filebuffer到imagebuffer的错误
// 代碼節空白添加.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
int FileBuffers(PVOID* FileBuffer){//傳入的FileBuffer
LPVOID PtempBuffer;
FILE* f = fopen("C:\\Users\\Administrator\\Desktop\\PETool 1.0.0.5.exe","rb");
if(!f)
{
printf("文件打開失敗\n");
return 0;
}
fseek(f,0,SEEK_END);
int file_size = ftell(f);
fseek(f,0,SEEK_SET);
PtempBuffer = malloc(file_size);
if(!PtempBuffer){
printf("malloc分配失敗");
return 0;
}
size_t n = fread(PtempBuffer,file_size,1,f);
if(!n){
printf("內存分配失敗");
return 0;
}
*FileBuffer = PtempBuffer;
PtempBuffer = NULL;
fclose(f);
return file_size;
}
int FileToImage(PVOID Filebuffer,PVOID* Imagebuffer){
//PE頭信息
PIMAGE_DOS_HEADER pDosHeader = NULL;
PIMAGE_NT_HEADERS pNTHeader = NULL;
PIMAGE_FILE_HEADER pPEHeader =NULL;
PIMAGE_OPTIONAL_HEADER PoptionHeader = NULL;
PIMAGE_SECTION_HEADER pSectionHeader = NULL;
PVOID pTempImagebuffer = NULL; //臨時的imagebuffer
if(!Filebuffer){
printf("讀到內存的Filebuffer失效\n");
return 0;
}
if(*((PWORD)Filebuffer) != IMAGE_DOS_SIGNATURE){
printf("不含MZ標志,不是EXE文件\n");
return 0;
}
pDosHeader = (PIMAGE_DOS_HEADER)Filebuffer; //強制結構體類型轉換pDosHeader
pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)Filebuffer+pDosHeader->e_lfanew);//NT頭開始的地方
if(*((PWORD)((DWORD)Filebuffer+pDosHeader->e_lfanew)) != IMAGE_NT_SIGNATURE){//判斷PE標識
printf("不是有效的PE標識\n");
}
pPEHeader = (PIMAGE_FILE_HEADER)((DWORD)pNTHeader+4);//PE標準頭開始
PoptionHeader = (PIMAGE_OPTIONAL_HEADER)((DWORD)pPEHeader+0X18);//PE可選頭開始??IMAGE_SIZEOF_FILE_HEADER
pSectionHeader = (PIMAGE_SECTION_HEADER)((DWORD)PoptionHeader+pPEHeader->SizeOfOptionalHeader);//PE節表開始
//分配動態內存
pTempImagebuffer = malloc(PoptionHeader->SizeOfImage);
if(!pTempImagebuffer){
printf("pTempImagebuffer為NULL");
return 0;
}
//為臨時的imagebuffer初始化
memset(pTempImagebuffer,0,PoptionHeader->SizeOfImage);
//copy頭部
memcpy(pTempImagebuffer,pDosHeader,PoptionHeader->SizeOfHeaders);
//創建一個臨時的PE節表
PIMAGE_SECTION_HEADER pTempSectionHeader = pSectionHeader;
for(DWORD i=0;iNumberOfSections;i++,pTempSectionHeader++){
//copy節從Filebuffer到臨時的imagebuffer
//斷點到這里有問題??各位師傅求解決
memcpy((void*)((DWORD)pTempImagebuffer+pTempSectionHeader->VirtualAddress)
,(void*)((DWORD)Filebuffer+pTempSectionHeader->PointerToRawData)
,pTempSectionHeader->SizeOfRawData);
}
*Imagebuffer = pTempImagebuffer;
pTempImagebuffer = NULL;
return PoptionHeader->SizeOfImage;
}
int main(int argc, char* argv[])
{
PVOID FileBuffer;
PVOID ImageBuffer;
int??x = FileBuffers(&FileBuffer);
printf("FileBuffer分配大小為:%d個字節\n",x);
int y = FileToImage(FileBuffer,&ImageBuffer);
printf("大小為%d\n",y);
return 0;
}
總結
以上是生活随笔為你收集整理的c语言格式错误pe,C语言PE文件filebuffer到imagebuffer的错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python序列符号_Python中的文
- 下一篇: 软件oem要注意什么_化妆品OEM客户要