Linux- 浅谈ELF目标文件格式
理解了进程的描述和创建之后,自然会想到我们编写的可执行程序是如何作为一个进程工作的?这就涉及可执行文件的格式、编译、链接和装载等相关知识。
这里先提一个常见的名词“目标文件”,是指编译器生成的文件。“目标”指目标平台, 例如 x86 或 x86-64,它决定了编译器使用的机器指令集。目标文件一般也叫作 ABI(Application Binary Interface,应用程序二进制接口),目标文件和目标平台是二进制兼容的。二进制兼容 即指该目标文件已经是适应某一种 CPU 体系结构上的二进制指令。例如一个编译出来的x86-64目标文件是无法链接成ARM上的可执行文件的。
最古老的目标文件格式是 a.out,后来发展成 COFF,现在常用的有 PE (Windows)和 ELF(Linux)。
ELF(Executable and Linkable Format)即可执行的和可链接的格式, 是一个文件格式的标准。ELF 格式的文件用于存储 Linux 程序。ELF 是一 种对象文件的格式,用于定义不同类型的对象文件中都有什么内容、以什么样的格式放这些内容。ELF 首部会描绘整个文件的组织结构,它还包括很多节(sections,是在 ELF 文件里用以装载内容数据的最小容器),这些节有些是系统定义好的,有些是用户在文件中通过.section 命令自定义的,链接器会将多个输入目标文件中相同的节合并。
我们先来看一个例子,直观感受一下
test.c原文件内容如下:
#include <stdio.h>int g(int x)
{return x + 3;
}int f(int x)
{return g(x);
}int main()
{return f(8) + 1;
}
ELF 文件的 3 种类型
以 ELF 格式为例,来看在可执行文件格式里的 3 种不同类型的目标文件。
(1)可重定位文件:这种文件一般是中间文件,还需要继续处理。由编译器和汇编器创建,一个源代码文件会生成一个可重定位文件。文件中保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者动态链接库文件。在编译 Linux 内核时可能会注意到,每个内核源代码.c 文件都会生成一个同名的.o 文件,该文件即为可重定位目标文件,最后所有.o 文件会链接为一个文件,即 Linux 内核。另外,静态链接库文件实际上就是可重定位文件的打包,也是可重定位文件,一般以.a作为文件名后缀。
(2)可执行文件:一般由多个可重定位文件结合生成,是完成了所有重定位工作和符号解析的文件(动态链接库符号是在运行时解析的),文件中保存着一个用来执行的程序。重定位和符号解析会在链接部分详细介绍。
(3)动态链接库文件:也称为共享目标文件,是已经经过链接处理可以直接加载运行的库文件,是可以被可执行文件或其他动态链接库文件加载使用的库文件,例如标准 C 的库文件 libc.so。可以简单理解为没有主函数 main 的“可执行”文件,只有一堆函数可供其他程序调用。Linux 下动态链接库文件文件名后缀为.so 的文件,so 代表 shared object。
ELF 文件的作用
ELF 文件参与程序的链接(构建一个可执行程序)和程序的执行(加载可执行程序),所以可以从不同的角度来看待 ELF 格式的文件。
- 如果用于编译和链接(可重定位文件),则编译器和链接器将把 ELF 文件看作节的集合,所有节由节头表描述,程序头表可选。
- 如果用于加载执行(可执行文件),则加载器将把 ELF 文件看作程序头表描述的段的集合,一个段可能包含多个节和节头表可选。
- 如果是动态链接库文件,则两者都含有
ELF文件格式
ELF文件的索引表
ELF文件的索引表。ELF文件的主体是各种节,典型的如代码节.text,还有描述这些节属性的信息(Program header table和Section header table),以及ELF文件的整体描述信息(ELF header),整体如图所示。
ELF Header结构
ELF Header在文件最开始描述了该文件的组织情况。ELF文件头会指出可执行文件是32位还是64位的,e_ident数组的第五个字节是1表示是32位,2表示是64位。ELF Header的其他部分主要说明了其他文件内容的位置、大小等信息。ELF Header长度为64字节,在/usr/include/elf.h文件中,可以看到其C语言格式的定义如下:
ELF表头首先会给出很多关于本ELF文件的属性信息,如上面提及到的3种ELF类型就是通过e_type来体现的。e_type的值1,2,3,4分别代表可重定位目标文件,可执行文件,共享目标文件和核心文件。如上面的ELF文件索引表所示,其中最重要的是段头表(Program header table)和节头表(Section header table)的位置。
段头表存储于文件的e_phoff(ELF header的字段,下同)位置,有e_phnum项内容,每项大小为e_phentsize字节。
节头表基本定义了整个ELF文件的组成,可以说是整个ELF就是由若干个节(Section)组成的。段只是对节区进行了重新组合,将连续的多个节区描述为一段连续区域,对应到一块连续的内存地址中。
Section Header结构
节头表是由Section Header组成的表,包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于链接的目标文件必须包含节区头部表,其他目标文件有没有这个表都可以。每个节区头部结构的描述如下:
我们可以查看hello这个可执行文件的sections、指令及主要输出内容如下节区信息。前6列分别是[Nr]索引、Name 节名、Type 类型、Addr 虚拟地址、Off 偏移和Size 节大小。简单来说,该节描述了将可执行文件中起始位置位Off、大小为Size的一段数据加载到内存地址Addr。
(ps:hello.c文件中只是单纯的打印了一句"Hello World!")
我们以"[6].text"来理解每一节头的内容(一行是一个节的描述)。
- Type PROGBITS表示该节存储的是代码。
- Addr为080490a0 是该部分将加载到内存中的虚拟地址。
- Off为节在可执行文件中的偏移。
- 后半部分的Key to Flags是对Flg中标识的说明。如.text节Flg为AX,A(Alloc)表示需要加载到内存中,X(eXecute)表示对应内存需要可执行权限。
Program Header结构
段头(Program Header)表是和创建进程相关的,描述了连续的几个节在文件中的位置、大小以及它被放进内存后的位置和大小,告诉系统如何创建进程映像,可执行文件加载器就可以按这个说明将可执行文件搬到内存中。用来构造进程映像的目标文件必须具有段头表,可重定位文件不需要这个表。
我们可以查看生成的hello这个可执行文件的段头表,指令及主要输出内容如下段头表示例。
8列分别是Type类型、Offset文件偏移、VirtAddr虚拟地址、PhysAddr物理地址、FileSiz可执行文件中该区域的大小、MemSiz内存中该区域的大小、Flg属性标识和Align对齐方式。和节头表相似,该表描述了可执行文件中起始位置为Offset、大小为FileSiz的一段数据,加载到内存地址VirtAddr中。两者的虚拟地址信息是一致的,但节头表的Addr可以没有信息,可重定位目标文件的Addr就是全0。
我们以第一行为例进行说明,Type值为LOAD表示该段(Segment)需要加载到内存,Offset全0表示其内容为从可执行文件头开始共0x001e8(FileSiz)个字节,加载到虚拟地址0x08048000(VirtAddr)处,该段为可读(R)权限,4k(Align,0x1000)对齐。
再往下看为节与段的映射关系说明(Section to Segment mapping:),00即第一行描述的段,一共包括了.note、.gnu、.ABI-tag等多个节。
相关操作指令
我们可以使用如下指令对ELF进行更多的研究实践。
(1)man elf:在Linux下输入此指令即可查看详细的格式定义。
(2)readelf:用于显示一个或多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。
- -a 等价于 -h -l -S -s -r -d -V -A - I
- -h 显示elf文件开始的文件头信息
- -S 显示节头信息(如果有)
- -l 显示Program Header。(小写的L)
- -s 显示符号表段中的项(如果有)
- -r 显示可重定位段的信息
- -H 显示readelf所支持的命令行选项
(3)objdump:显示二进制文件信息,用于查看目标文件或者可执行的目标文件的构成的gcc工具,选项如下。
- -f 显示objfile中每个文件的整体头部摘要信息
- -h 显示目标文件各个section的头部摘要信息
- -r 显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来
- -s 显示指定section的完整内容。默认所有的非空section都会被显示
- -t 显示文件的符号表入口
- -x 显示所可用的头信息,包括符号表、重定位入口。-x等价于-a -f -h -r -t同时指定
(4)hexdump:用十六进制的数字来显示elf的内容。
以上内容为中科大软件学院《Linux操作系统分析》课后总结,感谢孟宁老师的倾心教授,老师讲的太好啦(^_^)
参考资料:《庖丁解牛Linux内核分析》 孟宁 编著
相关文章
- 理解Window和WindowManager(一)
理解Window和WindowManager(一) Window是一个抽象类,它的具体实现是PhoneWindow,创建一个WindowManager就可以创建一个Window, Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService是一个IPC过程 为什么使用Window 首先就是Window…...
2023/5/28 21:13:16 - chatgpt赋能python:Python生成Pyd文件的全面指南
Python生成Pyd文件的全面指南 介绍 在Python编程中,我们会发现在某些情况下需要使用C或其他高效语言来提高代码执行速度。在这种情况下,将Python和其他语言混合编程是一个不错的选择。 本指南将介绍如何使用Python生成Python定义的C扩展程序文件 (.py…...
2023/5/28 21:05:26 - 相机光圈和快门
相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈(Ap…...
2023/5/28 21:04:32 - 【JVM】13. 垃圾回收器
文章目录 13.1. GC分类与性能指标13.1.1. 垃圾回收器概述13.1.2. 垃圾收集器分类13.1.3. 评估GC的性能指标吞吐量暂停时间吞吐量 vs 暂停时间 13.2. 不同的垃圾回收器概述13.2.1. 垃圾回收器发展史13.2.2. 7种经典的垃圾收集器13.2.3. 7款经典收集器与垃圾分代之间的关系13.2.4…...
2023/5/28 21:04:18 - C++:STL--List
文章目录 一.STL-list的数据结构链表结点模板 二.List的框架与迭代器的实现1.STL中的容器迭代器2.List的迭代器List正向遍历迭代器类模板(对ListNode< T >* 指针的封装)反向遍历迭代器的类模板(对正向迭代器的封装) 3.List的实现框架 三. List的成员接口的实现1.在List类…...
2023/5/28 21:03:45 - Koa学习1:初始化项目
前言 作为前端开发者,最适合我们的后端就是node了,node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是:【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章࿰…...
2023/5/28 21:02:33 - 【ESP 保姆级教程】疯狂ESP32Cam篇 —— 案例: Esp32Cam拍照存储到SD卡,做个迷你小相机
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-05-28 ❤️❤️ 本篇更新记录 2023-05-28 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
2023/5/28 20:58:51 - 基于C++的UKF代码示例,跟踪三次多项式曲线
参考一 以下是一个基于C的UKF代码示例,用于跟踪三次多项式曲线: #include <iostream> #include <Eigen/Dense> #include <cmath>using namespace std; using namespace Eigen;//定义状态向量和量测向量的维度 const int n 3; const…...
2023/5/28 20:57:49 - 你所不知道的 数据在内存中储存 的来龙去脉
那么好了好了,宝子们,今天给大家介绍一下 “数据在内存中储存” 的来龙去脉,来吧,开始整活!⛳️ 一、数据类型的介绍 (1)整型和浮点型: (2)其他类型…...
2023/5/28 20:55:29 - Pyhive——介绍使用举例
介绍 PyHive 是一个 Python 数据库连接工具和 ORM 框架,它提供了一个 Python 接口让用户可以连接多个不同的 Hadoop 数据存储系统,包括 Apache Hive, Apache Impala, Amazon Athena, Apache Spark SQL 等等。 PyHive 的目标是让 Python 开发者能够方便…...
2023/5/28 20:55:13 - LeetCode周赛复盘(第347场周赛)
文章目录 1、移除字符串中的尾随零1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、对角线上不同值的数量差2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、 使所有字符相等的最小成本3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、矩阵中严格递增的单元格…...
2023/5/28 20:48:20 - MySQL:查询时进行时间比较
MySQL:查询时进行时间比较 前言一、查询距离当前时间多久以前二、查询特定时间范围 前言 在 MySQL 中查数据的时候,往往需要对记录的创建时间进行筛选,比如只需要查询今年1-5月份的,或者查询距离当前时间多久以前的。 本文介绍了…...
2023/5/28 20:47:08 - 【MySQL】主从复制(两台服务器)
概述 主从复制是将主数据库的DDL(数据定义语句)和 DML(数据操作语句)操作通过二进制日志(binlog)传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做)ÿ…...
2023/5/28 20:45:11 - 海思芯片pcie启动——pcie_mcc驱动框架的booter程序分析
1、booter程序介绍 (1)源码目录:pcie_mcc/multi_boot/example/boot_test.c; (2)调用命令:./booter start_device; (3)booter程序的作用:在主片将pcie启动相关的驱动加载完成后,调用booter来引导从片pcie启动; 2、主片引导从片启动的过程 (1)调用pcie启动相关驱动,知道当…...
2023/5/28 20:41:25 - 【解决】sklearn-LabelEncoder遇到没在编码规则里的新值
文章目录 一、问题描述二、解决方法Reference 一、问题描述 问题:sklearn-LabelEncoder 遇到没在编码规则里的新值 二、解决方法 方法一:直接保存old_data和encoder_data和之间的映射关系,字典或者下面的csv格式里都可以。 for col in be…...
2023/5/28 20:38:34 - 【Linux】遇事不决,可先点灯,LED驱动的进化之路---1
【Linux】遇事不决,可先点灯,LED驱动的进化之路---1 前言: 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序(led_drive_simple.c) 1.2.2 应用程序(led_test_simple.c…...
2023/5/28 20:29:41 - 自动化测试常用的方法(Python版)
Selenium的官方文档链接为:https://www.selenium.dev/documentation/zh-cn/。该文档包含了Selenium使用方法的详细介绍,包括了常见的定位和操作方式,同时还提供了各种语言版本的API文档。根据需要选择相应的文档可以帮助您更好地了解和使用Se…...
2023/5/28 20:28:26 - 【数据结构】--单链表力扣面试题⑤链表分割
目录 一、有相对顺序的链表分割 二、无相对顺序的链表分割 一、有相对顺序的链表分割 题述:现有一链表的头指针ListNode* phead,给一定值x,编写一段代码将所有<x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排序后的链表的…...
2023/5/28 20:26:53 - (哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】
❓349. 两个数组的交集 难度:简单 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[…...
2023/5/28 20:13:01 - 恒容容器放气的瞬时流量的计算
有时候,你会遇到一个问题,该问题的描述如下: 你有一个已知体积的容器,设容器体积为V,里面装有一定压力(初始压力)的气体,如空气或氢气等,设初始压力为1MPa,容器出口连接着一个阀门开…...
2023/5/28 20:10:24 - [LeetCode周赛复盘] 第 105 场双周赛20230528
[LeetCode周赛复盘] 第 105 场双周赛20230528 一、本周周赛总结6395. 购买两块巧克力1. 题目描述2. 思路分析3. 代码实现 6394. 字符串中的额外字符1. 题目描述2. 思路分析3. 代码实现 6393. 一个小组的最大实力值1. 题目描述2. 思路分析3. 代码实现 6464. 最大公约数遍历1. 题…...
2023/5/28 20:01:00 - 二分查找问题(中间的target,和最左最右target求法)
本文涉及leetcode以下题目: leetcode704. 二分查找 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 要想做好二分查找的题目,我觉得应该首先知道二分查找的前提条件:二分查找也称为折半查找,它只适用于有序数组。然后就…...
2023/5/28 19:58:38 - 使用FSL对DTI数据进行预处理
使用FSL对DTI数据进行预处理 一、topup处理二、eddy处理一、topup处理 为了校正磁场引起的畸变,对DTI的B0像分别采集了A>P和P>A的反向编码的两种B0像。利用AP和PA图像进行一个topup处理,校正畸变。 1、 使用dcm2niix将AP PA图像转为nii格式 假设转换后的图像为sub01_…...
2023/5/28 19:55:46 - DAY 69 rsync远程同步
rsync介绍 rsync简介 rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前…...
2023/5/28 19:55:07 - JS中this的指向
JS中this的指向 本文目录 JS中this的指向全局上下文(Global Context)函数上下文(Function Context)普通函数调用作为对象的方法调用构造函数调用箭头函数回调函数 事件处理器上下文(Event Handler Context)…...
2023/5/28 19:53:53 - 如何在华为OD机试中获得满分?Java实现【查找两个字符串a,b中的最长公共子串】一文详解!
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…...
2023/5/28 19:48:10 - OS之磁盘调度算法
目录 一、先来先服务(FCFS) 基本思想 案例 二、最短寻道时间优先(SSTF) 基本思想 案例 饥饿现象 三、扫描算法(SCAN) 基本思想 案例 四、循环扫描算法(CSCAN) 基本思想 案例 一、先来先服务(FCFS) 基本思想 根据进程请求访问磁盘的先后次序来进行调度 案例 二、…...
2023/5/28 19:40:46 - leetcode解题思路分析(一百四十)1201 - 1208 题
丑数3 给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。丑数是可以被 a 或 b 或 c 整除的 正整数 。 容斥原理二分法 class Solution { public:int nthUglyNumber(int n, int a, int b, int c) {long long ab lcm((long long)a, (lo…...
2023/5/28 19:39:19 - 9. Linux下实现简单的UDP请求
本文简单介绍了UDP传输层协议,并在Linux下实现简单的socket通讯 一、UDP UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,它不保证数据包的可靠性和顺序。UDP在IP协议的基础上增加了简单的差错…...
2023/5/28 19:37:42 - 如何在华为OD机试中获得满分?Java实现【24点游戏算法】一文详解!
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…...
2023/5/28 19:36:41
最新文章
- 理解Window和WindowManager(一)
理解Window和WindowManager(一) Window是一个抽象类,它的具体实现是PhoneWindow,创建一个WindowManager就可以创建一个Window, Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService是一个IPC过程 为什么使用Window 首先就是Window…...
2023/5/28 21:13:16 - chatgpt赋能python:Python生成Pyd文件的全面指南
Python生成Pyd文件的全面指南 介绍 在Python编程中,我们会发现在某些情况下需要使用C或其他高效语言来提高代码执行速度。在这种情况下,将Python和其他语言混合编程是一个不错的选择。 本指南将介绍如何使用Python生成Python定义的C扩展程序文件 (.py…...
2023/5/28 21:05:26 - 相机光圈和快门
相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈(Ap…...
2023/5/28 21:04:32 - 【JVM】13. 垃圾回收器
文章目录 13.1. GC分类与性能指标13.1.1. 垃圾回收器概述13.1.2. 垃圾收集器分类13.1.3. 评估GC的性能指标吞吐量暂停时间吞吐量 vs 暂停时间 13.2. 不同的垃圾回收器概述13.2.1. 垃圾回收器发展史13.2.2. 7种经典的垃圾收集器13.2.3. 7款经典收集器与垃圾分代之间的关系13.2.4…...
2023/5/28 21:04:18 - C++:STL--List
文章目录 一.STL-list的数据结构链表结点模板 二.List的框架与迭代器的实现1.STL中的容器迭代器2.List的迭代器List正向遍历迭代器类模板(对ListNode< T >* 指针的封装)反向遍历迭代器的类模板(对正向迭代器的封装) 3.List的实现框架 三. List的成员接口的实现1.在List类…...
2023/5/28 21:03:45 - Koa学习1:初始化项目
前言 作为前端开发者,最适合我们的后端就是node了,node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是:【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章࿰…...
2023/5/28 21:02:33 - 【ESP 保姆级教程】疯狂ESP32Cam篇 —— 案例: Esp32Cam拍照存储到SD卡,做个迷你小相机
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-05-28 ❤️❤️ 本篇更新记录 2023-05-28 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
2023/5/28 20:58:51 - 基于C++的UKF代码示例,跟踪三次多项式曲线
参考一 以下是一个基于C的UKF代码示例,用于跟踪三次多项式曲线: #include <iostream> #include <Eigen/Dense> #include <cmath>using namespace std; using namespace Eigen;//定义状态向量和量测向量的维度 const int n 3; const…...
2023/5/28 20:57:49 - 你所不知道的 数据在内存中储存 的来龙去脉
那么好了好了,宝子们,今天给大家介绍一下 “数据在内存中储存” 的来龙去脉,来吧,开始整活!⛳️ 一、数据类型的介绍 (1)整型和浮点型: (2)其他类型…...
2023/5/28 20:55:29 - Pyhive——介绍使用举例
介绍 PyHive 是一个 Python 数据库连接工具和 ORM 框架,它提供了一个 Python 接口让用户可以连接多个不同的 Hadoop 数据存储系统,包括 Apache Hive, Apache Impala, Amazon Athena, Apache Spark SQL 等等。 PyHive 的目标是让 Python 开发者能够方便…...
2023/5/28 20:55:13 - LeetCode周赛复盘(第347场周赛)
文章目录 1、移除字符串中的尾随零1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、对角线上不同值的数量差2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、 使所有字符相等的最小成本3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、矩阵中严格递增的单元格…...
2023/5/28 20:48:20 - MySQL:查询时进行时间比较
MySQL:查询时进行时间比较 前言一、查询距离当前时间多久以前二、查询特定时间范围 前言 在 MySQL 中查数据的时候,往往需要对记录的创建时间进行筛选,比如只需要查询今年1-5月份的,或者查询距离当前时间多久以前的。 本文介绍了…...
2023/5/28 20:47:08 - 【MySQL】主从复制(两台服务器)
概述 主从复制是将主数据库的DDL(数据定义语句)和 DML(数据操作语句)操作通过二进制日志(binlog)传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做)ÿ…...
2023/5/28 20:45:11 - 海思芯片pcie启动——pcie_mcc驱动框架的booter程序分析
1、booter程序介绍 (1)源码目录:pcie_mcc/multi_boot/example/boot_test.c; (2)调用命令:./booter start_device; (3)booter程序的作用:在主片将pcie启动相关的驱动加载完成后,调用booter来引导从片pcie启动; 2、主片引导从片启动的过程 (1)调用pcie启动相关驱动,知道当…...
2023/5/28 20:41:25 - 【解决】sklearn-LabelEncoder遇到没在编码规则里的新值
文章目录 一、问题描述二、解决方法Reference 一、问题描述 问题:sklearn-LabelEncoder 遇到没在编码规则里的新值 二、解决方法 方法一:直接保存old_data和encoder_data和之间的映射关系,字典或者下面的csv格式里都可以。 for col in be…...
2023/5/28 20:38:34 - 【Linux】遇事不决,可先点灯,LED驱动的进化之路---1
【Linux】遇事不决,可先点灯,LED驱动的进化之路---1 前言: 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序(led_drive_simple.c) 1.2.2 应用程序(led_test_simple.c…...
2023/5/28 20:29:41 - 自动化测试常用的方法(Python版)
Selenium的官方文档链接为:https://www.selenium.dev/documentation/zh-cn/。该文档包含了Selenium使用方法的详细介绍,包括了常见的定位和操作方式,同时还提供了各种语言版本的API文档。根据需要选择相应的文档可以帮助您更好地了解和使用Se…...
2023/5/28 20:28:26 - 【数据结构】--单链表力扣面试题⑤链表分割
目录 一、有相对顺序的链表分割 二、无相对顺序的链表分割 一、有相对顺序的链表分割 题述:现有一链表的头指针ListNode* phead,给一定值x,编写一段代码将所有<x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排序后的链表的…...
2023/5/28 20:26:53 - (哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】
❓349. 两个数组的交集 难度:简单 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[…...
2023/5/28 20:13:01 - 恒容容器放气的瞬时流量的计算
有时候,你会遇到一个问题,该问题的描述如下: 你有一个已知体积的容器,设容器体积为V,里面装有一定压力(初始压力)的气体,如空气或氢气等,设初始压力为1MPa,容器出口连接着一个阀门开…...
2023/5/28 20:10:24 - [LeetCode周赛复盘] 第 105 场双周赛20230528
[LeetCode周赛复盘] 第 105 场双周赛20230528 一、本周周赛总结6395. 购买两块巧克力1. 题目描述2. 思路分析3. 代码实现 6394. 字符串中的额外字符1. 题目描述2. 思路分析3. 代码实现 6393. 一个小组的最大实力值1. 题目描述2. 思路分析3. 代码实现 6464. 最大公约数遍历1. 题…...
2023/5/28 20:01:00 - 二分查找问题(中间的target,和最左最右target求法)
本文涉及leetcode以下题目: leetcode704. 二分查找 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 要想做好二分查找的题目,我觉得应该首先知道二分查找的前提条件:二分查找也称为折半查找,它只适用于有序数组。然后就…...
2023/5/28 19:58:38 - 使用FSL对DTI数据进行预处理
使用FSL对DTI数据进行预处理 一、topup处理二、eddy处理一、topup处理 为了校正磁场引起的畸变,对DTI的B0像分别采集了A>P和P>A的反向编码的两种B0像。利用AP和PA图像进行一个topup处理,校正畸变。 1、 使用dcm2niix将AP PA图像转为nii格式 假设转换后的图像为sub01_…...
2023/5/28 19:55:46 - DAY 69 rsync远程同步
rsync介绍 rsync简介 rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前…...
2023/5/28 19:55:07 - JS中this的指向
JS中this的指向 本文目录 JS中this的指向全局上下文(Global Context)函数上下文(Function Context)普通函数调用作为对象的方法调用构造函数调用箭头函数回调函数 事件处理器上下文(Event Handler Context)…...
2023/5/28 19:53:53 - 如何在华为OD机试中获得满分?Java实现【查找两个字符串a,b中的最长公共子串】一文详解!
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…...
2023/5/28 19:48:10 - OS之磁盘调度算法
目录 一、先来先服务(FCFS) 基本思想 案例 二、最短寻道时间优先(SSTF) 基本思想 案例 饥饿现象 三、扫描算法(SCAN) 基本思想 案例 四、循环扫描算法(CSCAN) 基本思想 案例 一、先来先服务(FCFS) 基本思想 根据进程请求访问磁盘的先后次序来进行调度 案例 二、…...
2023/5/28 19:40:46 - leetcode解题思路分析(一百四十)1201 - 1208 题
丑数3 给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。丑数是可以被 a 或 b 或 c 整除的 正整数 。 容斥原理二分法 class Solution { public:int nthUglyNumber(int n, int a, int b, int c) {long long ab lcm((long long)a, (lo…...
2023/5/28 19:39:19 - 9. Linux下实现简单的UDP请求
本文简单介绍了UDP传输层协议,并在Linux下实现简单的socket通讯 一、UDP UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,它不保证数据包的可靠性和顺序。UDP在IP协议的基础上增加了简单的差错…...
2023/5/28 19:37:42 - 如何在华为OD机试中获得满分?Java实现【24点游戏算法】一文详解!
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…...
2023/5/28 19:36:41 - chatgpt国内免费镜像网站优选集合
目录 chatGpt 国内镜像网站集合 chatgpt接入微信 chatgpt接入谷歌浏览器 chatgptAI绘画 chatgpt不足之处: 最后 chatGpt 这个说实话,不用我介绍大家也都懂。不如玩一个有意思的,这里我让chatGpt自己介绍一下他自己: 嗨&…...
2023/5/28 20:57:53 - 【ChatGPT】从零开始构建基于ChatGPT的嵌入式(Embedding) 本地(Local) 智能客服问答机器人模型
目录 方案流程 1. Embeddings 介绍 术语:微调 vs 嵌入 一句话理解便是:embedding model 可以将文本转换为固定长度的连续向量。 架构流程图 3、Qdrant云数据库的搭建 3.1、初识Qdrant 3.2、创建云数据库 3.3、通过curl 接口访问 4、写入测试数…...
2023/5/28 17:16:05 - 【ChatGPT】在20分钟内使用 LangChain + Ray构建自托管问答服务
This is part 3 of a blog series. In this blog, we’ll show you how to build an LLM question and answering service. In future parts, we will optimize the code and measure performance: cost, latency and throughput. 这是博客系列的第 3 部分。在本博客中,我们将…...
2023/5/28 15:14:53 - 【ChatGPT】Turbocharge LangChain: guide to 20x faster embedding | LangChain: 嵌入速度提高 20 倍的指南
目录 Why do I need to parallelize this?为什么我需要并行化它? Stages of our Data Pipeline 数据管道的各个阶段 Execution...
2023/5/28 15:06:52 - 最新ChatGPT GPT-4 相似匹配Embedding技术详解(附ipynb与python源码及视频讲解)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(一)
目录 前言最新ChatGPT GPT-4 相似匹配Embedding技术详解1. 何为Embedding2. 相关API2.1 LMAS Embedding API2.2 ChatGPT Style 3. Embedding应用3.1 QA3.2 聚类3.3 推荐 相关文献 参考资料其它资料下载 前言 如果您想提高ChatGPT中文本处理的效率和精度,那么Embedd…...
2023/5/28 12:45:09 - ChatGPT的access_token获取(最新!!!)
ChatGPT的access_token获取(最新!!!) 序言 最近在搞移动应用开发,心血来潮写了个chatGPT的app,但是接口只能用官网提供的,我自己的号没有免费额度,朋友的号也就5$的额度…...
2023/5/28 12:19:58 - 【ChatGPT】ChatGPT 在智能客服产品如何落地?
目录 简介 智能客服产品的典型特征 人力密集: 数据密集: 流程可定义:...
2023/5/28 12:15:11 - 【ChatGPT】ChatGPT使用指南——句词分类
目录 ChatGPT使用指南——句词分类 1. NLU基础 1.1 句子级别的分类 1.2 Token级别的分类 2. 相关API...
2023/5/28 11:56:24 - 【ChatGPT】技术原理:ChatGPT怎么工作?
目录 简介:ChatGPT的工作原理概述 Transformer 架构原理...
2023/5/28 10:39:46 - 【ChatGPT】ChatGPT基础科普——知其一点所以然
目录 ChatGPT基础科普——知其一点所以然 语言的本质 从图灵测试到ChatGPT 1. LM 2. Transformer 3. GPT...
2023/5/28 10:09:26 - ChatGPT使用指南——相似匹配
目录 ChatGPT使用指南——相似匹配 1. 何为Embedding 2. 相关API 2.1 LMAS Embedding API 2.2 ChatGPT Style 3. Embedding应用...
2023/5/28 8:55:00 - 【ChatGPT】使用 LangChain 和 Ray 实现 100 行代码构建 LLM 开源搜索引擎【1】
目录 Introduction Building the index 构建索引 Accelerating indexing using Ray 使用 Ray 加速索引编制 Serving Conclusion...
2023/5/28 8:53:34 - 【ChatGPT】ChatGPT使用指南——文本生成
目录 ChatGPT使用指南——文本生成 1 引言 2 文本摘要任务 2.1 什么是文本摘要? 2.2 常见的文本摘要技术 2.3 基于OpenAI接口的文本摘要实验 3 文本纠错任务 3.1 什么是文本纠错? 3.2 常见的文本纠错技术 3.3 基于OpenAI接口的文本纠错实验 4…...
2023/5/28 8:24:05 - ChatGPT商业应用——LLM是星辰大海
目录 ChatGPT商业应用——LLM是星辰大海 1. 研究背景 1.1 研究背景 1.2 研究方法...
2023/5/28 7:59:04 - 国内可直接访问ChatGPT体验站,已稳定2个月 (域名被拦截解决方案)
新体验地址:https://zizhu888.cn/chatgpt/index.html ChatGPT体验站3月初上线,上线后,PV最高时3000,UV2000,付费用户有小300个 上线后,前前后后遇到了不少坑爹问题,下面是最近PV访问曲线图&am…...
2023/5/28 7:33:09 - AIGC——使用Cursor对比直接使用chatGPT有哪些技巧
Cursor对比直接使用chatGPT有哪些优势 1. 聊聊it团队经常面临的问题2. 试想一些AI辅助的应用场景3. 看回现实可用的工具及其使用3.1 加载文件作为对话上下文3.2 源码工程辅助阅读3.3 批量文件式输入口3.4 规范核查工具 4 通用思路4.1 提供解决方案思路4.2 借助chatGPT构建全流程…...
2023/5/28 4:27:19 - ChatGPT中文版Prompt提示工程超详细指南《提示工程高级技巧与技术》Github最新破万星项目Meta AI前工程师解密百万年薪提示工程师GPT-4模型优化利器(二)不定期更新
提示工程高级技巧与技术 前言Introduction 导言零样本提示少样本提示少样本提示的限制 Chain-of-Thought Prompting 链式思考(CoT)提示零样本COT提示 Zero-shot COT 自我一致性生成知识提示自动提示工程师(APE)Active-Prompt方向性…...
2023/5/28 0:42:10 - 【ChatGPT】ChatGPT使用指南——文本推理
目录 ChatGPT使用指南——文本推理 1. 什么是推理(Reasoning)? 2. 导入ChatGPT 3. 测试ChatGPT的推理能力...
2023/5/27 23:40:23 - ChatGPT免费使用的方法有哪些?
目录 一、ChatGpt是什么? 二、ChatGPT国内免费使用的方法: 第一点:电脑端 第二点:手机端 三、结语: 一、ChatGpt是什么? ChatGPt是美国OpenAI [1] 研发的聊天机器人程序 。更是人工智能技术驱动的自然语…...
2023/5/27 23:37:06 - 用ChatGPT辅助处理Excel
在日常工作中,我们经常需要处理大量的Excel表格,而在处理Excel表格时,常常会遇到重复、冗余、不清晰的数据等问题,导致我们耗费大量的时间和精力。 在这种情况下,现代技术的应用提供了更加高效的解决方案,…...
2023/5/27 18:32:31 - Pycharm安装ChatGPT插件
文章目录 前言一、安装ChatGPT插件二、使用步骤1.打开NexChatGPT2.发送请求 总结 前言 通过安装ChatGPT插件,您可以在PyCharm中更轻松、高效地使用ChatGPT模型进行开发,从而提高您的工作效率和准确性。 一、安装ChatGPT插件 打开PyCharm,单…...
2023/5/27 17:28:47 - 它来了!ios版ChatGPT
ChatGPT 的 iOS 版终于来了,不过目前只支持 iOS 美丽国区,你需要使用美丽国区账号才能下载使用。 目录 前提使用总结 前提 一部苹果手机一个美丽国苹果账号一个可以正常访问ChatGPT网页版的网络环境一个ChatGPT账号 使用 登录准备好的美丽国苹果账号。…...
2023/5/27 10:28:02 - 好用的IntelliJ IDEA ChatGPT插件:NexChatGPT
随着ChatGPT的爆火,ChatGPT给我们的生产生活带来一定的影响,ChatGPT相关的工具插件潮水般的涌现。ChatGPT对IT的影响也不小,尤其是自动化编程,今天介绍几款IntelliJ IDEA中ChatGPT插件。 一、NexChatGPT NexChatGPT是一款开箱即…...
2023/5/27 0:48:49 - 2023小狐狸ChatGPT源码1.9小程序 带绘画 带分销流量主系统智能客服AI源码+教程
2023全开源ChatGPT微信小程序,狐狸版本1.9,5.12已更新,增加绘画功能,带流量主带付费购买次数,可邀请好友获得问答次数 看广告获得问答次数 付费购买获得问答次数 狐狸版号1.9(最 新版)…...
2023/5/26 17:51:14 - 【国内chatgpt使用方法合集】(5月26日已更新)
写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正࿰…...
2023/5/26 17:44:47 - 【ChatGPT】GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI
GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI 文章目录 GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI第一:扩展多模式理解。第二:交互式多媒体。第三:为具备一般能力的机器人提供动力。第四:自主人工智能模型开发。第五:…...
2023/5/26 11:55:09 - 玩转ChatGPT:论文辅助写作(附Claude测评)
一、写在前面 嘿!嘿!嘿!大家好,今天我们来聊一下使用GPT们进行论文辅助写作。不过,我要先交代一下,GPT的使用门槛比较高,不少童鞋都用不上。所以,我极力推荐一个平替产品——Claude…...
2023/5/26 11:26:08 - [持续更新]使用chatgpt的几种方法~
1. monica 使用edge浏览器或者chrome浏览器,直接在官网下载即可,网址直通: bing: https://www.microsoft.com/zh-cn/edge/download?formMA13FJ google: Google Chrome 网络浏览器 备注:你需要先搭上梯子哈 安装打…...
2023/5/26 10:39:41 - 苹果手机爽了!一招搞定ChatGPT Plus,超级稳!
大家好,我是五竹。 昨天用苹果手机尝试了一下,借助App Store(苹果应用商店)升级 Plus,成功了!一共升级了三个号!有两个一气呵成,轻松搞定。最后一个可能触发风控了,但第…...
2023/5/26 9:58:09 - ChatGPT账号注册,为什么总是提示Access Denied you do not have acces
问题:提示Access denied 无法登录登录的时候,提示Access denied,You do not have access to chat.openai.com.原因登录出现这个界面,说明你的IP被OpenAI拉黑了,OpenAI对比较频繁访问的云主机商屏蔽了相关的IP出口段,所…...
2023/5/26 9:00:56