标题:
[原创]菜鸟学溢出
[打印本页]
作者:
x86
时间:
2005-3-25 12:42
标题:
[原创]菜鸟学溢出
[这个贴子最后由x86在 2005/03/25 01:03pm 第 3 次编辑] [watermark] 先看看进程的概念,进程是一个正在运行的程序。实际上这个进行的程序还应该包括程序运行时当前的一些活动,他们应该包括一个程序计数器(pc),以及一些寄存器。一个普通的进程在内存内因该包含下面几个段:文本段,即我们通常所说的程序代码。他是只读的,即在运行中我们不能随意修改程序代码。堆栈段:它往往包含程序运行时的临时数据,比如函数参数,返回地址,以及局部变量。注意,堆栈段有它特殊的结构,这是我们要重点讨论的。另外还有一个数据段,往往包含程序的全局变量. 现在来重点看看堆栈段,在这之前我们先看看在汇编语言里怎么去申请一个堆栈!(如果你没有学过汇编也没有关系,继续往下看!)堆栈实际上是由若干个连续存储单元组成的存储区域.在内存里,我们可以"任意"地设一段连续内存为堆栈.(一些系统要使用的内存我们是不能够使用的,操作系统给你的往往是一个他认为很安全的内存段,在这里不会干扰到一些系统的程序空间)为了方便内存管理,习惯上将内存分成许多段,比如说你有1M的内存,如果每个内存单元给他一个单独的地址,那就需要一个20位的2进制地址,从00000000000000000000--11111111111111111111,那就显得很麻烦,而且不方便记忆和寻找!那我们应该怎么办?你可以先试着怎么去记一个十进制的数:50000007,对于这个数,我们应该怎么样才能记住他,有人肯定能想到50000007=5*10000000+7,所以我们只要记住50000000和7就可以了,当然了,用这个例子,并不能体验出这种记忆方法的优越,可是面对那么多的内存单元的时候,我们用这个方法就能很好地管理了, 对于2个内存地址(16进制:2000AH和2000CH)其实我们只要用一个寄存器来保存20000,然后分别用000A和000C就可以分别来表示这2个单元了,下面是一段内存分段前的地址和分段后的地址:
作者:
abmark
时间:
2005-3-25 13:00
标题:
[原创]菜鸟学溢出
好像还没完啊~ 还有吗?
作者:
x86
时间:
2005-3-25 13:41
标题:
[原创]菜鸟学溢出
对上面程序运行结果的解释:
看过前面的参数地址是0012FF30,我们看一下0012FF30的内容0xc,c是16进制,转换成10进制为12,就为代码里的12!!!呵呵,后面就是我们期望看到的了!!!!
作者:
凉心无悔
时间:
2005-3-31 18:52
标题:
[原创]菜鸟学溢出
希望多多发这种东西,菜鸟感激不禁
作者:
Nicholas
时间:
2005-4-1 15:01
标题:
[原创]菜鸟学溢出
的确很不错~~~~~~~~
支持~~
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2