最近由于在忙咱们数据仓库的开源工做,要是一个C++系统开源,工做量实在是大,提及来都是泪(累)。以及生活中的一些事,找房子什么的,学习东西的时间比较少,这个系列很长时间没有更新,争取年前搞完,废话少说,直接介绍知识点。缓存
gcc -O1 -S code.c函数
objdump -d code.o学习
objdump -d code指针
Intel用“字”表示16位数据类型,32位数为“双字”,64位数为“四字”code
两个操做数不能都指向存储器位置blog
如:jmp .L1ip
.L1:get
popl %edxit
这就就是直接跳转cli
jmp *%eax
用寄存器%eax中的值做为跳转的目标。条件跳转只能是直接跳转
Switch经过跳转表来实现,跳转表的优势是执行开关语句的时间与开关状况的数量无关。跳转表更加高效。If经过条件跳转实现。
结构值是除以数据类型大小后的值
随机化、栈保护和限制那部分存储器存储可执行代码
1)指针和长整数是64位长
2)通用目的寄存器从8个扩展到16个
3)许多程序状态都保存在寄存器中,而不是在栈上。整形和指针过程参数(最多6个)经过寄存器传递。
4)对栈位置的引用至关于栈指针。大多数函数在调用开始时分配所须要的整个栈存储,在过程开始时经过减少栈指针,并在调用过程当中保持栈指针指向固定位置。