zoukankan      html  css  js  c++  java
  • 简单的内存控制

    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
    ",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
    ",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
    ",f1);    
    41 }

    运行成功

  • 相关阅读:
    K-邻近算法
    算法
    (12)ubunto 快捷键
    (38)C#IIS
    RichEditControl(富文本控件)
    Gaugecontrol(测量仪器图形控件)
    鏖战字符串
    bzoj3713 [PA2014]Iloczyn|暴力(模拟)
    约会安排HDU
    hdu4614 线段树+二分 插花
  • 原文地址:https://www.cnblogs.com/zimudao/p/9462433.html
Copyright © 2011-2022 走看看