读取指定内存地址数据的问题

挨踢民工的乐章 2011-05-30 04:06:34

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

unsigned char buffer[20];

void main()
{
unsigned char *pch;
int i;
pch = 0x00000000;
memcpy(buffer, pch, 20);

for (i = 0; i < 20; i++)
printf("%X", buffer[i]);
}


我想看看内存最低逻辑地址(0x00000000 - 0x00000014,20字节)内存中的内容,用上面的方法为什么没法实现?

怎么才能实现?
...全文
731 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 downmooner 的回复:]

C/C++ code
32|64位的系统|CPU

操作系统运行在硬件CPU上,32位操作系统运行于32位CPU上,64位操作系统运行于64位CPU上;目前没有真正的64位CPU。

32位CPU一次只能操作32位二进制数;位数多CPU设计越复杂,软件设计越简单。

软件的进程运行于32位系统上,其寻址位也是32位,能表示的空间是232=4G,范围从0x00……
[/Quote]

明白了,是保护NULL指针,给分,结贴
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 demon__hunter 的回复:]

找本 windows核心编程 看看吧
[/Quote]

有这个想法,我有一本《深入解析windows操作系统》 ,想入手windows核心编程。
机智的呆呆 2011-05-30
  • 打赏
  • 举报
回复
找本 windows核心编程 看看吧
downmooner 2011-05-30
  • 打赏
  • 举报
回复
   32|64位的系统|CPU

操作系统运行在硬件CPU上,32位操作系统运行于32位CPU上,64位操作系统运行于64位CPU上;目前没有真正的64位CPU。

32位CPU一次只能操作32位二进制数;位数多CPU设计越复杂,软件设计越简单。

软件的进程运行于32位系统上,其寻址位也是32位,能表示的空间是232=4G,范围从0x0000 0000~0xFFFF FFFF。

· NULL指针分区

范围:0x0000 0000~0x0000 FFFF

作用:保护内存非法访问

例子:分配内存时,如果由于某种原因分配不成功,则返回空指针0x0000 0000;当用户继续使用比如改写数据时,系统将因为发生访问违规而退出。

那么,为什么需要那么大的区域呢,一个地址值不就行了吗?我在想,是不是因为不让8或16位的程序运行于32位的系统上呢?!因为NULL分区刚好范围是16的进程空间。

· 独享用户分区

范围:0x0001 0000~0x7FFE FFFF

作用:进程只能读取或访问这个范围的虚拟地址;超越这个范围的行为都会产生违规退出。

例子:

程序的二进制代码中所用的地址大部分将在这个范围,所有exe和dll文件都加载到这个。每个进程将近2G的空间是独享的。

注意:如果在boot.ini上设置了/3G,这个区域的范围从2G扩大为3G:0x0001 0000~0xBFFE FFFF。

· 共享内核分区

范围:0x8000 0000~0xFFFF FFFF

作用:这个空间是供操作系统内核代码、设备驱动程序、设备I/O高速缓存、非页面内存池的分配、进程目表和页表等。

例子:

这段地址各进程是可以共享的。

注意:如果在boot.ini上设置了/3G,这个区域的范围从2G缩小为1G:0xC000 0000~0xFFFF FFFF。

通过以上分析,可以知道,如果系统有n个进程,它所需的虚拟空间是:2G*n+2G (内核只需2G的共享空间)。
机智的呆呆 2011-05-30
  • 打赏
  • 举报
回复
win32每个进程的地址空间里,开始内存地址空间里设置了一个分区,范围是0x00000000~0x0000ffff,如果进程中有线程试图读写这段区域,cpu就会引发非法访问的。
ryfdizuo 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

你以为你想读哪就读啊,有一部分内存是不允许访问的,给你使用的内存很有限,别瞎玩
[/Quote]
哈哈,老孟很直接、
bdmh 2011-05-30
  • 打赏
  • 举报
回复
你以为你想读哪就读啊,有一部分内存是不允许访问的,给你使用的内存很有限,别瞎玩

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧