首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

读写文件的有关问题,请谁帮看看

2013-02-24 
读写文件的问题,请哪位高手帮看看!代码如下:hFileCreateFile(FileName,GENERIC_ALL,NULL,NULL,OPEN_EXIST

读写文件的问题,请哪位高手帮看看!
代码如下:

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 ;
}

热点排行