C指针扫描内存

时间:2014-11-11 17:02:08

标签: c pointers memory

我试图扫描系统的内存。

我的计划: 创建指向内存的指针, 并将此指针向上移动一个字节。

所以这就是我提出的:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

const char *MemAdressPointer(int n);

int main(void) {

    int i = 0;
    for(i = 0; i<100; i++)
    {
        const char* pAddr = MemAdressPointer(i+5000);
        printf("%c hexadecimal value of : 0x%p with i at : %i\n", *pAddr, pAddr, i);
    }
    getchar();
    return 0;
}

const char *MemAdressPointer(int n)
{
    void *p1 = (void*) n;

    const char* p2;
    p2 = p1;

    return p2;
}

至少我所知道的一切都有效。

打印好的内存地址。

但是当我打印角色(%c)时,它就会停止响应

很奇怪,指针是一个角色,

不应指向一个字节并获取该字节的二进制值

并从中获取相应的角色。

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

这不是现代操作系统的工作方式。 您不能简单地读出系统RAM,因为应用程序内存是虚拟化的,并且操作系统也禁止由于安全策略而直接访问。

操作系统可能会提供一些API来访问其他进程内存(假设您有权这样做)。在Win32Api上,这是ReadProcessMemory

可能是其他一些OS API允许直接读出系统地址空间。 你可以深入研究How do you read directly from physical memory?

答案 1 :(得分:0)

你的编译器没有抛出警告:

warning: cast to pointer from integer of different size

在您正在执行的函数MemAdressPointer()中:

void *p1 = (void*) n;/* which is wrong */