简单的内存控制

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 }

运行成功

 

posted @ 2018-08-12 13:01  newen  阅读(206)  评论(0编辑  收藏  举报