自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 elf_loader:一个使用Rust编写的ELF加载器

本文介绍一个使用Rust实现的ELF加载器

2025-02-20 23:45:41 1292

原创 动态链接器(七):深入理解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

原创 动态链接器(四):dlsym的底层实现

介绍在运行时从已加载的动态库中获取符号的底层实现

2024-12-13 22:28:13 1099

原创 在Orange Pi 5 Plus上运行OpenHarmony 5.0.1

在orange pi 5 plus上运行openharmony 5.0.1

2024-12-13 21:53:45 1650 3

原创 动态链接器(三):GDB调试动态库的底层原理

从动态链接器的视角介绍GDB调试动态库的底层原理。

2024-12-10 16:46:16 652

原创 动态链接器(二):使用Rust实现一个动态链接器

介绍动态链接器的功能,并提供了一个动态链接器的实现

2024-12-10 16:31:46 1228

原创 动态链接器(一):ELF文件

介绍了elf文件的组成和各部分的功能

2024-12-10 16:08:45 711

原创 软件构造-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

原创 软件构造-正则表达式

软件

2021-07-03 23:41:19 692

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除