图示 指针与内存

iamkconghua 2014-03-07 01:36:26


上图送给新手,老鸟勿视!
...全文
169 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamkconghua 2014-03-07
  • 打赏
  • 举报
回复
哈哈,赵大侠都出来了。 一幅图就想让新手搞懂所有的内存知识,我估计够呛。期盼高手出幅这样的内存图,就一幅,别整成蚊子大小的字啊。 从本质上讲,所有内存都是可读可写的。否则,某个内存中的值当初是如何写入的呢?只是有不同的权限限制而已。
iamkconghua 2014-03-07
  • 打赏
  • 举报
回复
呵呵,当然是Debug环境啊,上图标的不是清清楚楚嘛, Win32 Debug,你要是换个环境,如BC, TC啥的,内存的值可能就变了,跟编译器密切相关。
赵4老师 2014-03-07
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
FrankHB1989 2014-03-07
  • 打赏
  • 举报
回复
引用 7 楼 iamkconghua 的回复:
另外,针对XP + VC6.0, “p1没有初始化,其值是不定的,是随机的” 这句话是不对的。 对上述环境而言,p1不是随机的,就是0xCCCCCCCC。 之所以将其初始化为许多CC,是因为0xCC是对应的汇编代码是3号中断即int 3,逆向工程中常用int 3来进行跟踪二进制代码。
不对。你还得指出是Debug。否则别指望烫烫烫烫。
iamkconghua 2014-03-07
  • 打赏
  • 举报
回复
另外,针对XP + VC6.0, “p1没有初始化,其值是不定的,是随机的” 这句话是不对的。 对上述环境而言,p1不是随机的,就是0xCCCCCCCC。 之所以将其初始化为许多CC,是因为0xCC是对应的汇编代码是3号中断即int 3,逆向工程中常用int 3来进行跟踪二进制代码。
iamkconghua 2014-03-07
  • 打赏
  • 举报
回复
这些知识都知道。我是问针对上图的具体环境,XP + VC6.0,上图的具体错误在哪?谢谢。
敬畏者 2014-03-07
  • 打赏
  • 举报
回复
简单的说就是: 一个进程中有从地址 0x0000 ~~ 0xfff..fff (2^32 即4GB)大小的内存空间 粗略的可以认为这些内存一部分是空的,假的,没有对应实际的物理内存.另一部分是已经分配了的,比如装在了我们程序的内存. 在分配了的内存中,又有几种,有些内存只能读,有些内存只能写,有些内存可读写,还有一些内存可以执行代码,这些是对内存权限的设置,并且是可以修改的. p1没有初始化,其值是不定的,是随机的,是历史上遗留下来的过期数据,可以指向任何一个地址,比如未分配的内存,或者只写的内存等. 我们的程序在编译生成时,会把字符串常量默认存储在只读的内存区域中,所以p2指向的是只读的,写会发生错误,但是可以修改这个内存变成可读写 p3是 栈内存,默认是可读写
iamkconghua 2014-03-07
  • 打赏
  • 举报
回复
上述代码本身是有错误的,图中已经说过了。请指出其他错误。谢谢。
iamkconghua 2014-03-07
  • 打赏
  • 举报
回复
引用 2 楼 u013573183 的回复:
虽然1个小时弄完了,但是不得不告诉你,是错的...
请指教!
敬畏者 2014-03-07
  • 打赏
  • 举报
回复
虽然1个小时弄完了,但是不得不告诉你,是错的...
  • 打赏
  • 举报
回复
good,很直观~~~~~

70,020

社区成员

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

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