-
-
[原创]浅谈编码与内存----自我总结与经验分享
-
发表于:
2018-7-9 03:11
7157
-
开一篇讲下学C/C++以来的感触与一些心得。以帮助初学者提升以及帮助自己整理思路。文中若有不对的地方,望指正,提出讨论,谢谢。
总而言之,虽然在学习过程中都会含糊不清,到后面慢慢习惯以为就是这样的,不过仔细纠下还是有些东西。
文主要关于内存的,我认为学习C/C++最重要的是弄懂内存。基本上都是较直观的方式表达。这里仅仅从一些实例中来说明,可能有些观点以及操作有悖于常规板书,但是如果这些操作从内存角度来看的话,都是没问题的。往往从学习时候就奉书本,编程习惯为最上,反正忽视了很多东西,其实C++规则一直在变动,唯一不变的就是内存规则这个根基。
黑鸡生的都是白蛋。语言语法再变化,也是只有一个目的操作内存。
“不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。”
首先,内存是什么?
从有计算机开始就有内存了。编写程序,几乎无时无刻不在使用内存,我们使用变量,调用函数,申请空间存放我们的数据,都是在对内存进行操作。
我自己观念里给内存下了一些定义,意在便于理解新情况,自我总结。
在纵观整个内存的情况下,内存最重要的一个属性基本上就是权限,简单说就是是否有权限可读可写可执行。各种漏洞都是在突破这一点。
举个例子之所以需要注入就是为了获得那段内存的一个读写权限,由于用户内存进程内存保护的问题,假如均可以读写修改,那么也用不到注入、上驱动等等操作了。管理员权限用户权限就是需要改动的内存需要权限,这样的操作“允许程序以管理员运行”就是授权给进程这个权限去操作相关内存。
好了~太大的话题不说了,这个话题再说下去可能装13就要失败了~从编程需要的开始吧。仅仅看单个程序的内存。
研究程序代码与内存的关系还是要从实际来~深入浅出。一点点开始掰吧。
第一段
我们先百度
包括书上也有说,int和long,或者说DOWRD是区别的,实际上呢?
我们验证下,
上例子,
然后在32位下看内存,
可以看到都是四字节~所以这个百度的回答错误(这条回答后面有人评论了不过也不直观)。long也就是DWORD的空间不比int大,都是一样的,我的环境是WIN10-64位,但是这里无论WIN7还是WIN10,64位32位都是这样结果。上图还显示了地址,这个是32位程序。
然后再百度,又有人说64位下long是8字节,比int大,那么要不要信呢?我们还是实践出真知。
这里是编译成64位的程序,均为四字节,所以关于这个问题,百度一大堆模糊的答案。自己实践才是真的。
不过这东西大小是由编译器喜好决定的。编译出文件这里放在EXE中的,所以不会环境影响,但是当你做new的时候,才会受到系统环境的影响。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2018-7-9 10:38
被ISSACASSI编辑
,原因: