用c读取exe文件,出现此文件的版本与正在运行的windows版本不兼容
本帖最后由 d173220523 于 2020-4-29 17:03 编辑2、将记事本的.exe文件读取到内存,并返回读取后在内存中的地址.
3、将内存中的数据存储到一个文件中,(.exe格式),然后双击打开,看是否能够使用.
#include "iostream"
#include "stdio.h"
#include <stdlib.h>
void pula()
{
FILE *fp,*fp1;
int i;
if ( (fp = fopen("C:\\Windows\\system32\\notepad.exe", "rb")) == NULL )
puts("Fail to open file!");
fseek(fp,0,2);
i=ftell(fp);
char* date = (char*)malloc(i);
fseek(fp,0,0);
if(date == NULL)
puts("申请失败");
fscanf(fp, "%c", date);
printf("写入内存成功\n");
if ( (fp1 = fopen("C:\\1111.exe", "wb")) == NULL )
puts("Fail to open file!");
fprintf(fp1,"%c",*date);
}
int main()
{
pula();
return 0;
}
该如何解决 读写不对吧,1kb明显不对嘛,怎么能运行呢… 应该使用UE打开看看到底写进去了什么,来看下数据写入到底是出了什么问题。另外,关于这个申请内存的,这样复制文件会导致内存占用过高,在大体积的exe的情况下会导致内存申请失败,所以建议使用循环读取,读一点写一点。 fscanf()/fprintf() 要搭配迴圈使用,或是要改成 fread()/fwrite() 一次完成讀寫
原始的寫法只會讀寫一個byte 改成64位fseek试试 这样只能读出notepad.exe这个文件的第一个字节。如果一个一个字节读,要用循环,不断增加指针,直到文件末尾。
页:
[1]