摘要:
程序启动时,Linux把4种类型的信息存放到程序堆栈中: (1)命令行参数(包括程序名称)的数目 (2)从shell提示符执行的程序的名称 (3)命令行中包含的任何命令行参数 (4)在程序启动时的所有当前Linux环境变量 程序名称、命令行参数和环境变量是以空结尾的长度可变的字符串。为了使工作更加简单,Linux不仅把字符串加载到堆栈中,它还把指向每个这些元素的指针加载到堆栈中,所... 阅读全文
摘要:
我们知道函数中的局部变量存储在堆栈之中,如下图所示,当局部变量1、2、3存到堆栈中后,堆栈指针ESP并没有下移,依然指向原来的位置。出现这种情况的原因是:局部变量进入堆栈并不是使用push而是使用mov操作,所以ESP无变化。正是因为这样,如果函数把任何数据压入堆栈,那么局部变量将会被覆盖。 为了保护局部变量,解决方法是在函数代码的开始添加一行(针对汇编语言),通过从ES... 阅读全文