#include
#include "stdafx.h"
#include "windows.h"
#include
DWORD ReadPEFile(IN LPSTR lpszFile,OUT LPVOID* pFileBuffer )
{
FILE* PF = NULL;
DWORD FileSize = 0;
LPVOID PFileBuffer = NULL;
PF = fopen(lpszFile,"rb");
if (!PF)
{
printf("fail\n");
fclose(PF);
return 0;
}
fseek(PF,0,SEEK_END);
FileSize=ftell(PF);
fseek(PF,0,SEEK_SET);
PFileBuffer = malloc(FileSize);
if(!PFileBuffer)
{
printf("%d\nApplication space failed\n ",PFileBuffer);
free(PFileBuffer);
fclose(PF);
return 0;
}
size_t n =fread(PFileBuffer,FileSize,1,PF);
if(!n)
{
printf("%d\nApplication space failed\n",n);
free(PFileBuffer);
fclose(PF);
return 0;
}
//关闭文件
*pFileBuffer = PFileBuffer;
PFileBuffer = NULL;
fclose(PF);
return FileSize;
}
int main(int argc, char * argv[])
{
size_t BufferAddress = ReadPEFile("C:\\Users\\Administrator\\Desktop\\notepad1.exe", 0); //第二个参数是用来返回PE的首地址,怎么创建空间让他存?
return 0;
}
ReadPEFi360问答le的第二个参数是个二维坏北夫球指针,它不需要创建空间的,它在ReadPEFile中由
PFileBuffer = malloc(FileSize);
这个来申请空间,而*pFileBuffer = PFi划班副占leBuffer;就是将空间的地址指向它的
你可以直接定义一个一维字符指针,将它的地址作为参数就可以了:
char *pbuff;
size_t BufferAddress = ReadPEFile("t.exe", (LPVOID *)&pbuff); //对某些编译器,要强制转换,不然的警告的
要说明的是,你的程序结构不是很合理,你在子函数中今怀慢区团笑圆去础快经申请内存,且要在主函数中释放它,这样结构中较混乱且容易产生内存泄露,微软有很多类似的SDK函数可参考,第一次,以0调用函数,返回文件长度,第二次就可以带一个在主函数申请好内存的指针存放数据内容了(这个要修改你的ReadPEFile函数)。
上一篇:亚马逊号被封了,怎么解封?
下一篇:电脑硬盘分区