日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言格式错误pe,C语言PE文件filebuffer到imagebuffer的错误

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。