如何在c中读取原始内存

时间:2012-10-02 20:26:49

标签: c memory memory-management

我想定义一个任何大小的缓冲区,它会在内存中分配一些空间。我想读取分配给该缓冲区的内存中的现有数据。

我尝试过以下代码,但我每次只看到一些特殊字符。

如果我通过DumpIt工具转储我的内存,然后通过HEX编辑器打开它,我可以看到普通字符(如数字和abc等)。

我使用了以下代码,它使用了两种技术first mentioned here,第二种只使用了简单的数组,并逐个浏览每个字符。

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <process.h>
#include <time.h>
#include <cstdlib>
#include <stdint.h> 

int main()
{
    int x = 4;
    char arr[400];
    char * src;
    src = arr;

    uint8_t *memory = (uint8_t *) malloc(1000);  
    while(*memory != NULL) {
        printf("Character %c\n", *(memory++));
        memory++;
    }

    while(src != NULL) {
        printf("%c ", *src);
        x++;
        if(x == 1000)
            break;
    }
    printf("And the data stored in memory is %s\n", arr);

    system("PAUSE");
    return 0;
}

2 个答案:

答案 0 :(得分:3)

当你运行malloc时,你只需要在该内存段中获取随机内容。其中一些将无法编码为ASCII可读的任何内容。您可以尝试使用“%X”而不是“%c”打印内存中的十六进制值。

虽然我不知道你为什么要做这样的事情。

答案 1 :(得分:1)

您没有告诉我们您运行代码的系统类型(conion.h让我担心最糟糕的情况),但在任何体面的系统上,您将永远无法获得&#34;随机&#34 ;这样的数据。出于安全原因,您从系统中获取的所有页面都将被清除,否则任何进程都可以读取其他进程遗留的任何内容,密码,情书,......

在初始化,调用另一个函数时,您最终可能会看到自己的进程在堆上或堆栈上留下的伪随机内容。但这就是随机性&#34;你可以期待的那样。

挑剔:

  • 不要归还malloc
  • 你的行

-

printf("And the data stored in memory is %s\n", arr);

没有多大意义。此print语句在遇到的第一个空字符处停止打印。