简单的内存控制
1、将一个的exe文件读取到内存中,并返回读取后在内存中的地址
我写了一个c++的helloworld程序。然后通过文件流观察大小。
1 #include<stdio.h> 2 void main() 3 { 4 FILE* fp=NULL; 5 int f1; 6 fp=fopen("C:/Users/newen/Desktop/hellow.exe","rb+"); 7 fseek(fp,0,SEEK_END); 8 f1=ftell(fp); 9 fclose(fp); 10 printf("%d\n",f1); 11 12 }
修改完后结果(与winhex对比完全相同)
代码部分。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 void main() 5 { 6 FILE* fp=NULL; 7 int f1; 8 char *p=NULL; 9 int i=0; 10 char ch=0x00; 11 fp=fopen("C:/Users/newen/Desktop/hellow.exe","rb+"); 12 fseek(fp,0,SEEK_END);//定位到文件末尾 13 f1=ftell(fp); 14 15 p=(char*)malloc(f1);//动态分配内存 16 memset(p,0,f1);//内存初始化 17 18 fseek(fp,0,SEEK_SET); 19 for(i=0;i<f1;i++)//将数据复制到内存中,一个字节一个字节复制 20 { 21 ch=fgetc(fp); 22 p[i]=ch; 23 fseek(fp,i+1,SEEK_SET); 24 } 25 26 27 28 29 30 free(p);//释放内存 31 p=NULL;//指针置为空 32 33 fclose(fp); 34 printf("%d\n",f1); 35 36 37 38 }
2、将内存中的数据存储到文件中,双击打开,看能否使用
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 void main() 5 { 6 FILE* fp=NULL; 7 FILE* fp2=NULL; 8 int f1; 9 char *p=NULL; 10 int i=0; 11 char ch=0x00; 12 fp=fopen("C:/Users/newen/Desktop/hellow.exe","rb+"); 13 fseek(fp,0,SEEK_END);//定位到文件末尾 14 f1=ftell(fp); 15 16 p=(char*)malloc(f1);//动态分配内存 17 memset(p,0,f1);//内存初始化 18 19 fseek(fp,0,SEEK_SET); 20 for(i=0;i<f1;i++)//将数据复制到内存中,一个字节一个字节复制 21 { 22 ch=fgetc(fp); 23 p[i]=ch; 24 fseek(fp,i+1,SEEK_SET); 25 } 26 27 fp2=fopen("C:/Users/newen/Desktop/1.exe","wb+"); 28 fseek(fp2,0,SEEK_SET); 29 for(i=0;i<f1;i++) 30 { 31 fputc(p[i],fp2); 32 fseek(fp2,i+1,SEEK_SET); 33 } 34 35 36 free(p);//释放内存 37 p=NULL;//指针置为空 38 39 fclose(fp); 40 printf("%d\n",f1); 41 }
运行成功