读写文件的问题,请哪位高手帮看看!
代码如下:
hFile=CreateFile(FileName,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(INVALID_HANDLE_VALUE != hFile)
{
dwFileSize=GetFileSize(hFile,0);
lpAddr = (BYTE *)VirtualAlloc(0, dwFileSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
CloseHandle(hFile);
}
pFile=fopen(FileName,"rb");
if (NULL==pFile)
{
printf("Open xmlcore.dat failed.");
return result;
}
nCount=fread(lpAddr,dwFileSize,1,pFile);
if (!nCount)
{
printf("GetShellcode failed.");
return result;
}
result = lpAddr;
我想要把FileName这个可执行文件读进内存,然后直接执行,但内存中得到的数据与文本的不一样文本中的是0x55, 0x8B, 0xEC内存中的是30 78 35 35 2c 20 30 78 38 42 2c 20 30 78 45 43。我想是不是要以二进制的形式读入内存,所以写了以下代码,首先CreateFile打开文件,获取文件的大小,申请一块内存空间,再通过fopen函数以二进制的形式打开文件,再通过fread函数读入,最后返回地址指针lpAddr.但是用fopen函数后pFile显示错误的指针。而lpAddr指向的内存中任然是30 78 35 35 2c 20 30 78 38 42 2c 20 30 78 45 43。请问这是什么原因,还有就是有没有更好的实现方法,我最终向要得到的是地址指针lpAddr。请多多指教!
[解决办法]
仅供参考
#include <stdio.h>
unsigned int ReadByteFile(const char* name, unsigned char* buff, unsigned int len)
{
FILE* fp = fopen(name, "rb");
if (NULL == fp)
{
return 0;
}
unsigned int size;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0 ,SEEK_SET);
if (size>len)
{
return 0;
}
unsigned int reads = fread(buff, sizeof(unsigned char), len, fp);
fclose(fp);
return reads;
}
void main()
{
unsigned char arr[200] = {0};
unsigned int reads = ReadByteFile("test.bat", arr, 200);
return ;
}