【发布时间】:2015-08-03 02:43:44
【问题描述】:
我是 C 新手,我想从内存地址范围内读取内容
假设我有以下地址范围:0x00065580 - 0x000655c0
此范围从命令获取:
$ cat /proc/a_process_pid/maps | grep heap
00065580-000655c0 ...........heap
(请查看上述范围内的十六进制转储图像)
我尝试使用循环但没有运气,(就像 Java 开发人员的想法)
#include <stdio.h>
#define START_ADDR 0x00065580
#define END_ADDR 0x000655c0
int main(){
char *start = START_ADDR ;
char *end = END_ADDR;
for( char *i=start ; i <= end ; i++ ){
printf("%s",i);
}
return 0;
}
它会产生错误:
root@localhost:~# ./test
Segmentation fault (core dumped)
请告诉我我做错了什么以及我需要了解什么?
【问题讨论】:
-
是test你的源代码文件名吗?你可能正在编译你的可执行文件,
-
对不起,我以错误的方式运行程序,我编辑了错误,只是简单的“分段错误(核心转储)”
-
printf("%s",*i);不是吗? -
你从哪里得到这些地址值的?是什么让您相信这些地址实际上在您的进程内存空间中包含有效内存?
标签: c memory-address