linux一站式编程
文章平均质量分 69
xiaqing01
什么事情只要静下心来,都是有希望的
展开
-
linux栈帧详解
首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图出栈操作:pop eax; 等价于 [es转载 2013-10-29 21:59:08 · 1226 阅读 · 0 评论 -
第16章
段错误的解释: 用户访问一个虚拟内存,经过MMU检查之后发现没有权限; MMU产生一个异常,使CPU从用户模式到特权模式,然后执行内核中相应的内核处理; 内核把这个异常解释为段错误,终止引发进程。 操作系统配合MMU去访问内存: 虚拟内存映射到哪个物理内存其实是通过页表来描述的,而页表是存放在物理内存中的; 操作系统在初始化数据的时候,会执原创 2013-10-29 09:07:03 · 572 阅读 · 0 评论 -
一站式编程笔记(17,18,19)
第17章: 汇编器把文本文件转换成目标文件.o;目标文件由若干个Section组成,我们在汇编程序中声明的.section会成为目标文件中的Section然后链接器把目标文件的Section合并成几个Segment,生成可执行文件。最后加载器根据可执行文件的Segment信息加载运行这个程序。第18章:函数调用解析:在进入main()中,在调用的函数的时候,先把局部原创 2013-10-29 22:32:50 · 673 阅读 · 0 评论 -
linux C 一站式编程<关于符号的解释>
仔细的理解这句话:所以变量名和函数名都是符号,在汇编程序中代表的是一个地址,汇编程序经过了汇编器的处理后,所有的符号都被替换成所代表的地址值。在C语言中我们通过变量名访问一个变量,其实就是读写某个地址开始的内存单元。所以变量名和函数名都是符号,本质上代表的是内存的地址。那么 a=3;a 代表的是存放3这个数的内存的地址。那么如果计算 a =a + 1; 执行这句原创 2013-11-19 15:40:19 · 882 阅读 · 0 评论