请问如何读取系统内存中任意地址的数据,如0x100,用C语言实现。

如定义struct node,然后任取一块内存((struct node*)0x100)->data,并显示结果,或进行比较判断,不需要可写,只需可读。C语言如何实现。回答的好会加分的

第1个回答  2014-12-11
首先要明确windows 的内存管理方式, (在 windows XP 非 3GB enabled)。 ring3程序也就是用户空间的进程可以用的空间地址是 virtual address 0x00000000 - 0x7FFFFFFF ,注意virual address 呵呵,而 0x80000000 以后为内核使用 都是 virtual address啊。ring3 进程不能读取 0x80000000 以后的地址。0x0000000 - 0x7FFFFFFF 也并不是都可以读取的。这个空间中会根据系统需要由系统分配一定的 region 或一系列的 regions。只有位于这些 regions 的地址是可以被ring3 进程读取的。所以比如任意地址 如 0x100 若这个地址不再任何一个 region 当中。就会出错(指定地址无内存)。实际上即是说,系统没有为 0x100 这个地址建立页表映射,也就不可读。 若你所说想要实现读取内核地址空间,也只能读取已经建立了页表映射的地址。不然同样要出错。 若想要判断一个地址是否是有效的,如你所担心的,用户可能传给你一个非法地址。可以用一些api 判断合法性。如 VirtualQuery 更强大的还有VirtualQueryEx。 http://msdn.microsoft.com/en-us/library/aa366902 (VS.85).aspx。 也可以用异常处理历程。 try except (c++),c也有异常处理 不过不好用。本回答被提问者采纳

请问如何读取系统内存中任意地址的数据,如0x100,用C语言实现。
这个空间中会根据系统需要由系统分配一定的 region 或一系列的 regions。只有位于这些 regions 的地址是可以被ring3 进程读取的。所以比如任意地址 如 0x100 若这个地址不再任何一个 region 当中。就会出错(指定地址无内存)。实际上即是说,系统没有为 0x100 这个地址建立页表映射,也就不可读。 若...

请问如何读取系统内存中任意地址的数据,如0x100,用C语言实现。
这个空间中会根据系统需要由系统分配一定的 region 或一系列的 regions。只有位于这些 regions 的地址是可以被ring3 进程读取的。所以比如任意地址 如 0x100 若这个地址不再任何一个 region 当中。就会出错(指定地址无内存)。实际上即是说,系统没有为 0x100 这个地址建立页表映射,也就不可读。 ...

如何用C语言,读文件中某行某列的数据。
include <string.h> include <stdlib.h> int fileToFile(char *nameSrc, char *nameDes);char * getLineBuf(int line, int col, int len, char *filename);\/ 说明:1.使用了内存实时分配,可以满足读取任意长度的字符 但是,需要调用时手动释放内存,否则内存泄露。2.对中文没有判断,会出现乱...

如何用c语言输出地址的内容,如下所示:
x = 100.1的情况可以在VC上查看内存得到其在内存中的值,低地址开始的四个字节是 66 66 66 66,所以*p = 0x66666666 = 1717986918。以%f的格式控制符打印输出的小数部分保留6位有效数字,并且禁止以指数形式输出浮点数,所以结果就是:1717986918.000000 另外,虚机团上产品团购,超级便宜 ...

C语言二级指针问题: int x=0x100100; char *p=(char *)&x; *p_百度...
x的初值是0x100100也就是一个16进制数,指针p指向A的首地址,根据16进制数,此时p指向的是开头的0x10,然后通过指针赋值,此时的x是0x410100。同理指针移位2位,指向末端的0x00。赋值过后,x == 0x410132,把x拆分成3个字节,0x41 0x01 0x32。 由于我们目前用的计算机大部分是小端对齐。高低位...

抓取电脑内存文件怎么查看电脑内存
再打开你要保存的网页打开C:\\Documents and Settings\\(你的用户名)\\Local Settings\\Temporary Internet Files里面就是你刚才的网页所有东西了四用c语言如何获取内存地址1、获得函数的地址函数名实际上就是指针,所以可以通过强制类型转换来获取函数的地址。int i = 0;i = (int)main;...

C语言读写二进制文件读取 大小端,该怎么解
size表示写入一个nmemb的内存大小。 fwrite()会返回实际写入的nmemb数目。size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);fread()用来从文件流中读取数据。 stream为已打开的文件指针 ptr 指向欲存放读取进来的数据空间读取的字符数以参数size*nmemb来决定 size表示读取一个nmemb...

单片机用C语言向SD写入指令中“((unsigned char *)&argument)[0]”是...
1、&argument -- 取变量argument的地址 2、(unsigned char *)(&argument) -- 将这个地址强制类型转换为无符号字符型的指针 说明:类似于(unsigned char *)0x10010010,讲一个整型数强制类型转化成一个指针值,然后可以做绝对地址的访问。3、(unsigned char *)(&argument)[0] -- 将这个指针...

CSAPP-2-信息的表示和处理
在几乎所有的机器上,字节都是被连续存储的,对象的地址为所使用字节中最小的地址。例如,一个int类型的变量x的地址为0x100,也就是地址表达式&x 的值为0x100,x的四个字节存储在内存0x100、0x101、0x102、0x103位置。排列表示一个对象的字节,有两个通用的规则:对于我们程序员来说,机器使用的...

51微控制器访问片内资料储存器某单元的内容用c语言怎么写?
51微控制器访问片内资料储存器某单元的内容用c语言怎么写? 方法1: char data *p; 定义一个指向片内RAM地址的指标 p = 0x30; 片内RAM地址为0x30 *p = 0x12; 向0x30内写入立即数0x12 方法2: #include <absa.h> char x; x = DBYTE[0x30]; 将片内RANM地址0x30的内容赋...

相似回答