程序员基本素养
文章平均质量分 69
OS技术解密
阿里巴巴
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
编程中likely和计算机基本原理关系
(x),1)!(x),0)_builtin_expect 这个指令是 gcc 引入的。该函数作用是允许程序员将最有可能执行的分支告诉编译器,来辅助系统进行分支预测。当正确地使用了__builtin_expect后,编译器在编译过程中会根据程序员的指令,将可能性更大的代码紧跟着前面的代码,从而减少指令跳转带来的性能上的下降。2.示例!(x), 1)!n = n + 2;}return 0;}~...原创 2022-08-27 09:33:04 · 334 阅读 · 0 评论 -
arm/arm64函数栈帧(stackframe)结构和传参规则
本文汇编代码的平台及编译器:arm/gcc。分析函数调用栈的规则对于理解程序运行基本原理很有帮助,汇编代码分析crash问题也大有裨益。本文示例代码通过C语言函数调用一个汇编函数,再从汇编函数跳转回C函数,分析该示例的汇编代码就可以stack frame的创建和arm函数调用的传参规则。arm32使用哪些寄存器传参,如果参数超过4个怎么传参?arm32/gcc中函数调用stack frame的创建,以及函数返回stack frame的销毁过程是怎样的?原创 2022-08-20 22:12:03 · 5804 阅读 · 0 评论 -
ELF格式分析动态链接原理
objdump -r elf(readelf -r也可以)可以读取rel.dyn变量重定位段,获取需要重定位的变量的相关信息,其中offset字段就是该变量的重定位地址对应的.got(GOT)的表项,比如global_module的offset = 1fdc(正如上面汇编计算的结果),对应的是.got(GOT)表中global_module的表项地址。跳转到.plt section首地址处执行代码,该处代码会会跳转到GOT表项的第三项,存储的是链接器的符号解析函数(装载时才能确定该地址,初始化时为0)...原创 2022-08-07 23:59:34 · 1108 阅读 · 1 评论 -
汇编视角分析C++虚函数实现原理
虚函数是c++语言非常重要的机制,日常的c++编程工作中经常使用虚函数,通过汇编视角来探究虚函数的实现原理,有助于深刻理解虚函数的内部机制。c++语法规范并没有规定虚函数的具体实现方案,不同的编译器实现方式可以不同,本文基于arm32平台,g++编译器来分析虚函数表的实现机制,基本主流编译器的原理基本是相似的,所以理解g++实现方案再去分析其他编译器的实现也是类似的。......原创 2022-08-07 17:43:22 · 867 阅读 · 0 评论
分享