首页
社区
课程
招聘
[原创]ESP定律背后的原理之一:0x12FFC4,为什么是这个数
发表于: 2008-2-5 16:13 11401

[原创]ESP定律背后的原理之一:0x12FFC4,为什么是这个数

2008-2-5 16:13
11401
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
函数我还沒弄个清楚..
只能顶了
2008-2-5 16:22
0
雪    币: 50161
活跃值: (20670)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
http://bbs.pediy.com/showthread.php?t=20366

注意:并不是所有程序加载时,ESP的值是0012FFC4,这个值是什么由操作系统决定,将SizeOfStackCOmmit改大ESP就会变,这是因为操作系统从这个页向上找一个足够大地方当作stack了(感谢forgot解释)。
2008-2-5 17:21
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
4
-------------------
注意:并不是所有程序加载时,ESP的值是0012FFC4,这个值是什么由操作系统决定,将SizeOfStackCOmmit改大ESP就会变,这是因为操作系统从这个页向上找一个足够大地方当作stack了(感谢forgot解释)。
-------------------

我曾仔细看过这段话,正是这句话引发了我探究的兴趣,这句话的错误在于错误理解了域SizeOfStackCommit, SizeOfStackReserve的作用,SizeOfStackCommit表示提交到物理内存的虚拟内存的大小,SizeOfStackReserve表示分配给当前程序的大小,注意是大小,不是地址。它们决定了程序初始化时堆栈空间的Commited内存的大小和Reserved内存的大小,但不是地址。

堆栈空间的顶端的值是否固定,我没有逆向windows,所以没有发言权,但不管堆栈空间的顶端是0x00130000,还是0x00120000,还是0x00110000,只要这里我提到的几个函数的源代码实现不变,最后几位的值就不会变:0x0012FFC4, 0x0011FFC4, 0x0010FFC4。
2008-2-5 22:37
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不是所有的程序吧,00112ffc4   0012ffc0    0013ffc0我就碰到国
2008-2-5 22:44
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
6
操作系统的不同,源代码的实现有可能不同,这个值有可能不同。这个道理,我在文章中说明了。
2K, XP, Vista, Checked Version, Free Version都有可能不同。
我明白你们的意思,我写下来只是想弄清楚在堆栈上面到底存储了些什么东西。并不是探讨堆栈的顶端是否固定的问题。
2008-2-5 22:55
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我早就有这样的疑问了,到今天也弄不清楚。
2008-2-6 00:40
0
雪    币: 50161
活跃值: (20670)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
感谢分享心得,有规律的背后必有其原理性,学习你这深究的学习态度。
2008-2-7 10:56
0
雪    币: 110
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
栈顶应该是不固定的,不然ESP怎么会一直在变,应该是栈底是否是固定的,以前我也有过这样的疑问,一直纠结于这个问题,这个是操作系统分配管理的了,反正咱们不需要知道栈底地址是否固定,是在哪,PUSH的时候就进栈,POP就出来,知道不知道栈底无所谓了......
堆栈里存的是本地变量,函数返回地址等
新手,说错了的地方请大家指正,以免误导!
2011-9-6 15:26
0
游客
登录 | 注册 方可回帖
返回
//