我试图扫描系统的内存。
我的计划: 创建指向内存的指针, 并将此指针向上移动一个字节。
所以这就是我提出的:
#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)时,它就会停止响应
很奇怪,指针是一个角色,
不应指向一个字节并获取该字节的二进制值
并从中获取相应的角色。
感谢您提供任何帮助。
答案 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 */