摘要: 在函数栈帧中 一般包含以下几类重要信息 1 局部变量 :为函数局部变量开辟的内存空间 2 栈帧状态值:保存前 栈帧的顶部和底部 3 函数返回地址:保存当前函数调用前的“断点”信息,也就是函数调用前的指令位置 以便在函数返回时能够恢复到函数被调用前的代码区中继续执行指令。 EIP:指令寄存器:其内存放 阅读全文
posted @ 2016-05-07 19:06 Cheetos 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 根据操作系统的不同,编译器,编译选项的不同,同一文件不同函数的代码在内存代码区中的分布可能相邻,也可能相离甚远,可能先后有序,可能无序 但,它们都在同一个 PE文件的代码 映射的一个 “节” 里。 我们可以简单把它们在内存代码区中的分布位置理解成是散乱无关的。 CPU是从哪里获得 函数的调用及返回的 阅读全文
posted @ 2016-05-07 19:01 Cheetos 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 不管什么是什么样的操作系统 什么样的计算机架构 进程使用的内存 都可以按功能 分成 4个 部分 代码区 .text 数据区 .data 堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。 栈区:用于动态地存储函数之间的调用关系,以保证被调用函数在返回时恢复到母函数中继续执行 (具 阅读全文
posted @ 2016-05-07 18:47 Cheetos 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 操作系统装载应用程序后,做完初始化工作后就转到程序的入口点执行 程序的默认入口由 连接程序 设置。 不同的连接器选择的入口函数也不尽相同。 在VC++下, 连接器对 控制台程序 设置的入口函数是 mainCRTStartup mainCRTStartup 再调用 main 函数 对图形用户界面程序设 阅读全文
posted @ 2016-05-07 17:55 Cheetos 阅读(433) 评论(0) 推荐(0) 编辑
摘要: IDA 的任务是将选定的可执行文件加载到内存中 并对相关部分进行分析 随后, IDA 会建立一个数据库 其组件分别保存在4个文件中 在关闭当前项目时 这4个文件会被存档 你可以选择将它们压缩成一个 IDB 文件 通常人们引用 IDA 数据库时实际上 是引用 IDB文件 如果数据库正常关闭,绝不会在工 阅读全文
posted @ 2016-05-07 14:30 Cheetos 阅读(684) 评论(0) 推荐(0) 编辑
摘要: 加载选项: windows PE 加载器 和 MS-DOS EXE 加载器 PE文件格式 是 MS-DOS EXE文件格式的扩展形式 Binary File 是这个列表中的最后一个选项 它是用来加载无法识别的文件的默认选项 它提供了最低级的文件加载方法 如果 Binary file 是出现在 加载器 阅读全文
posted @ 2016-05-07 13:02 Cheetos 阅读(697) 评论(0) 推荐(0) 编辑
摘要: 连接器不会将所有函数紧挨着放在一块儿了,他们会在函数之间加上padding,这个时候函数要想添几句指令就有余地了。只要我们的改动不大,没有超过padding的范围连接器就不需要重新洗牌,这大大提高了链接的速度 假如我们的改动很大,以至于超过padding能够搞定的范围怎么办?如上图,我们还会在整个s 阅读全文
posted @ 2016-05-07 11:19 Cheetos 阅读(637) 评论(0) 推荐(0) 编辑