首页
社区
课程
招聘
[原创]浅谈编码与内存----自我总结与经验分享
发表于: 2018-7-9 03:11 7147

[原创]浅谈编码与内存----自我总结与经验分享

2018-7-9 03:11
7147
开一篇讲下学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编辑 ,原因:
收藏
免费 1
支持
分享
打赏 + 2.00雪花
打赏次数 1 雪花 + 2.00
 
赞赏  junkboy   +2.00 2018/07/09
最新回复 (16)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享
图片挂了不少
乌鸡蛋是绿色的,哈哈哈
2018-7-9 07:30
0
雪    币: 244
活跃值: (454)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
赵四老师名言。
2018-7-9 09:01
0
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
图片没帖上来,麻烦重新帖一下。
最后于 2018-7-9 10:27 被kanxue编辑 ,原因:
2018-7-9 10:27
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
kanxue 图片没帖上来,麻烦重新帖一下。
OK了~
2018-7-9 10:40
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
寧靜致遠 赵四老师名言。
虽然他…emmmm~~但是有些话说的还是有道理~~
2018-7-9 10:40
0
雪    币: 70
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
已删
最后于 2018-7-9 11:50 被FadeTrack编辑 ,原因: 毫无意义
2018-7-9 11:18
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
FadeTrack 你以为自己逃得出五指山。只能说对于语言理解还是不够深刻,加油吧。[em_13]
好的~
最后于 2018-7-9 12:20 被ISSACASSI编辑 ,原因:
2018-7-9 11:22
0
雪    币: 914
活跃值: (2433)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
9
这不是基础知识吗?
有什么亮点?
2018-7-9 11:23
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
万剑归宗 这不是基础知识吗? 有什么亮点?[em_10]
emmmm~
最后于 2018-7-9 13:18 被ISSACASSI编辑 ,原因:
2018-7-9 11:31
0
雪    币: 29
活跃值: (295)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
上面说的看内存是用啥看的?
2018-7-9 16:58
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
12

任何人对于内存的需求都不会超过 640 KBytes 


来看下真实世界中的内存(DDR-DRAM),图片来自网络。


DDR3 与 DDR4 内存条背面布局比较:


 

DDR3 与 DDR4 内存各种性能参数比较:




最后于 2018-7-9 17:35 被shayi编辑 ,原因:
2018-7-9 17:21
0
雪    币: 8954
活跃值: (1605)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
13
内存,内存,最神秘,最重要的东西
2018-7-9 17:44
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
14
endlif 上面说的看内存是用啥看的?
任何 16 进制编辑器,动态调试器,反汇编器,都可以看;ReadProcessMemory() API 也可以 “看”
2018-7-9 18:02
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
15
endlif 上面说的看内存是用啥看的?
我直接拿CE看的……接地气,WinHex也常用…工具挺多的
2018-7-9 19:03
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
你这叫学结构体内存布局, 不叫学C++
OD跟一下比你VS上看要清楚很多
最后于 2018-7-10 12:49 被Diabloking编辑 ,原因:
2018-7-10 12:48
0
雪    币: 4
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
汇编操作内存 哪种比较猥琐 不容易被找到操作内存的代码位置
2018-8-24 03:53
0
游客
登录 | 注册 方可回帖
返回
//