- 博客(20)
- 收藏
- 关注
原创 动态链接器(十):重定位
ELF文件中有许多种类型的重定位条目,这些重定位条目指导动态链接器在加载或运行时解析符号地址,确保程序能够正确地引用动态库中的函数和变量。
2025-03-04 21:09:11
842
原创 WSL进阶使用指南
WSL2通过 Hyper-V 技术创建了一个轻量级的虚拟机(VM),在这个虚拟机之上可以运行一个真正的 Linux 内核,这给希望同时使用 Windows 和 Linux 的开发人员提供了无缝高效的体验。本文会介绍一些使用WSL的知识,帮助你更好地使用WSL。
2025-02-22 18:40:08
1074
原创 动态链接器(九):.init和.init_array
ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分,用于在main函数执行前完成必要的初始化操作。
2025-02-22 18:28:50
874
原创 动态链接器(八):详解动态库的符号解析规则
本文主要介绍使用dlopen加载动态库时,动态库中使用的外部符号是以什么规则进行解析的,简单来说就是动态库中的外部符号最终会由哪个库提供。
2025-02-20 23:49:47
1001
原创 动态链接器(七):深入理解PLT和GOT
PLT和GOT主要是为延迟绑定(lazy binding)服务的,延迟绑定是一种推迟对动态库中使用的外部函数重定位的技术,将外部函数的重定位推迟到了外部函数第一次被调用的时候,这样可以减少动态库/PIE可执行文件的加载时间。
2025-02-18 23:24:52
969
原创 动态链接器(六):动态链接器的自举
动态链接器自身对自身进行重定位的过程被称为自举。动态链接器在自举时会找到它自己的动态段(.dynamic section),从中获取重定位表,完成自身的重定位。
2025-02-18 23:10:16
550
原创 main 函数执行以前,还会执行什么代码?
在Linux上Executable file和Position-Independent Executable file的执行是有区别的,区别在与Position-Independent Executable file需要借助动态链接器(ldso)来运行,而Executable file不需要,它们在执行main函数前会经过不同的流程
2025-01-09 21:00:10
1153
原创 动态链接器(五):动态库加载到内存的全流程
动态链接器(Dynamic Linker)负责在程序运行时加载动态库,它需要把动态库中有用的内容从动态库文件加载内存中。本文介绍了动态链接器加载动态库到内存的全过程。
2025-01-09 18:12:21
1025
3
原创 在Orange Pi 5 Plus上运行OpenHarmony 5.0.1
在orange pi 5 plus上运行openharmony 5.0.1
2024-12-13 21:53:45
1650
3
原创 软件构造-LSP
LSP即“Liskov替换原则”,它在实现类的复用性的过程中起着重要的作用。1 LSP的具体实现 (1)子类型可以增加方法,但不可删。 (2)子类型需要实现抽象类型(接口、抽象类)中所有未实现的方法。 (3)子类型中重写的方法必须有相同或子类型的返回值(即协变)。 (4)子类型中重写的方法必须使用同样类型的参数(即逆变),但是在Java中此种情况目前按照重载overload处理。 (5)子...
2021-07-07 20:49:10
324
原创 软件构造-类成员变量的作用域
在java中ADT都是通过类来实现的,类成员变量和类方法的作用域对信息隐藏有着很大的作用。下面我们就来介绍如何设置类成员变量和类方法的作用域。1 public 没有限制,在任何地方都能够访问。public大多用于修饰类方法。public class Example{ public int a=10;}2 protected 若访问protected定义的成员变量的类不是原类的子孙类,则不能在其他的包(package)中访问;若是子孙...
2021-07-07 15:35:31
362
原创 软件构造-数据类型的不变性
1 什么是数据类型的不变性不变性是一种重要设计原则,不变数据类型一旦被创建,其值不能改变,在这里我们还需要说一下什么叫做改变一个变量的值:改变一个变量的值是将该变量当前指向的存储空间中写入一个新的值;而改变一个变量是将该变量指向另一个存储空间。2 在java中如何创建一个不变的引用类型 不变的引用类型是指一旦确定其指向的对象,不能再被改变指向其他对象。在java中我们可以用final来实现不变引用类型的创建,在编译器进行静态类型检查时,如果final变量首次赋值后发...
2021-07-06 19:27:09
228
原创 软件构造-decorator 设计模式
在设计ADT时,我们可能会遇到需要在一些通用操作上添加不同特性的问题,这时候如果只是简单的使用继承就可能会出现组合爆炸的问题,产生庞大而复杂的继承树,为了解决这些问题,使用decorator设计模式无疑是一种很好的办法。decorator的实现方式 首先我们需要定义一个接口里面包含了装饰物执行的公共操作,为了方便理解我们举一个实际的例子,例子的目的是通过add、remove,isexist这一组通用操作来实现ADT:集合(即没有重复的元素)。//通用操作public inter...
2021-07-04 14:57:42
119
原创 软件构造-Calendar类的基本方法
java提供了一个可以很方便表示时间的类Calendar,下面我们来介绍一些Calendar的基本方法。1 创建Calendar的两种方式//使用静态方法创建Calendar calendar=Calendar.getInstance();//使用GregorianCalendar创建Calendar calendar=new GregorianCalendar();2 设置日期Calendar calendar=Calendar.getInstance();//将日期设置为.
2021-07-04 00:43:58
560
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人