动态链接的步骤与实现
阅读目录
- 动态链接器的自举
- 装载共享对象
- 符号的优先级
- 全局符号介入与地址无关代码
- 重定位与初始化
- linux动态链接器的实现
正文
1. 动态链接器的自举
我们知道动态链接器本身也是一个共享对象,但是事实上它有一些特殊性。
对于普通共享对象文件来说,它的重定位工作由动态链接器来完成。
他也可以依赖其他共享对象,其中的被依赖共享对象由动态链接器负责链接和装载。
可是对于动态链接器来说,它的重定位工作由谁来完成?它是否可以依赖于其他共享对象?
这是一个“鸡生蛋,蛋生鸡”的问题,为了解决这种无休止的循环,动态链接器这个“鸡” 必须有些特殊性。
首先是,动态链接器本身不可以依赖于其他任何共享对象;
其次是动态链接器本身所需要的全局和静态变量和重定位工作由它本身完成。
对于第一个条件我们可以认为的控制。
在编写动态链接器时必须保证不使用任何系统库,运行库;
对于第二个条件,动态链接器必须在启动时有一段非常精巧的代码可以完成这项艰巨的工作而同时又不能使用全局和静态变量。
这种具有一定限制条件的启动代码往往被称为自举(Bootstrap
)。
动态链接器入口地址即是自举代码的入口,当操作系统将进程控制权交给动态链接器时,动态链接器的自举代码即开始运行。
自举代码首先会找到它自己的GOT
。而GOT
的第一个入口保存的是“.dynamic
”段的偏移地址,由此找到了动态连机器本身的“.dynamic
”段。
通过“.dynamic
”的信息,自举代码便可以获得动态链接器本身的重定位表和符号表等,从而得到动态链接器本身的重定位入口,先将它们全部重定位。
从这一步开始,动态链接器代码中才可以使用自己的全局变量和静态变量。
实际上在动态链接器的自举代码中,除了不可以使用全局变量和静态变量之外,甚至不能调用函数,即动态链接器本身的函数也不能调用。
这是为什么呢?其实我们在前面分析地址无关代码时已经提到过,实际上使用PIC
模式编译的共享对象,对于模块内部的函数调用也是采用跟模块外部函数调用一样的方式,即使用 GOT/PLT
的方式,所以在GOT/PLT
没有被重定位之前,自举代码不可以使用任何全局变量,也不可以调用函数。
下面这段注释来自于 Glibc26.1
源代码中的 elf/rtld.c
这段注释写在白举代码的末尾,表示自举代码已经执行结束。“ Now life is sane
",可以想象动态链接器的作者在此时大舒一冂气,终于完成白举了,可以自由地调用各种函数并且随意访问全局变量了,
2. 装载共享对象
完成基本自举以后,动态链接器将可执行文件和链接器本身的符号表都合并到一个符号表当中,我们可以称它为全局符号表( Global Symbol Table
)。
然后链接器开始寻找可执文件所依赖的共享对象,我们前面提到过“.dynamic”段中,有一种类型的入口DT_NEEDED,它所指出的是该可执行文件(或共享对象)所依赖的共享对象。
由此,链接器可以列出可执行文件所需要的所有共享对象,并将这些共享对象的名字放入到一个装载集合中。
然后链接器开始从集合里取个所需要的共享对象的名字,找到相应的文件后打开该文件,读取相应的ELF文件头和“ .dynamic”段,然后将它相应的代码段和数据段映射到进程空间中。
如果这个ELF共享对象还依赖于其他共享对象,那么将所依赖的共享对象的名字放到装载集合中。
如此循环直到所有依赖的共享对象都被装载进来为止,当然链接器可以有不同的装载顺序,如果我们把依赖关系看作一个图的话,那么这个装载过程就是一个图的遍历过程,链接器可能会使用深度优先或者广度优先或者其他的顺序来遍历整个图,这取决于链接器,比较常见的算法一般都是广度优先的。
当一个新的共享对象被装载进来的时候,它的符号表会被合并到全局符号表中,所以当所有的共享对象都被装载进来的时候,全局符号表里面将包含进程中的所有动态链接所需要的符号。
符号的优先级
在动态链接器按照各个模块之间的依赖关系,对它们进行装载并且将它们的符号并入到全局符号表时,会不会有这么一种情况发生,那就是有可能不同的模块定义了同一个符号?
让我们来看看这样一个例子:共有4
个共享对象a1.so,a2.so, b1.so, b2.so
,它们的源代码文件分别为a1.c, a2.c, b1.c
和 b2.c
/*a1.c*/
#include <stdio.h>
void a() {printf("a1.c\n");
}/*a2.c*/
#include <stdio.h>
void a() {printf("a2.c\n");
}/*b1.c*/
#include <stdio.h>
void a();
void b1() {a();
}/*b2.c*/
#include <stdio.h>
void a();
void b2() {a();
}
可以看到a1.c
和a2.c
中都定义了名字为a的函数,那么由于b1.c和b2.c都用到了外部函数“a”,但由于源代码中没有指定依赖于哪一个共享对象中的函数“a”,所以我们在编译时指定依赖关系。
我们假设b1.so依赖于a1.so,b2.so依赖于a2.so,将b1.so与a1.so进行链接,b2.so与a2.so进行链接:
$gcc -fPIC -shared a1.c -o a1.so
$gcc -fPIC -shared a2.c -o a2.so
$gcc -fPIC -shared b1.c a1.so -o b1.so
$gcc -fPIC -shared b2.c a2.so -o b2.so
$ldd b1.solinux-gate.so.1 -> (0xffffe000)a1.so -> not foundlibc.so.6 -> /lib/tls/i686/cmov/libc.so.6 (0xb7e86000)/lib/ld-linux.so.2 (0x80000000)$ldd b2.solinux-gate.so.1 -> (0xffffe000)a2.so -> not foundlibc.so.6 -> /lib/tls/i686/cmov/libc.so.6 (0xb7e17000)/lib/ld-linux.so.2 (0x80000000)
那么当有程序同时使用b1.c
中的函数b1和b2.c中的函数b2会怎么样呢?比如有程序
main.c
#include <stdio.h>
void b1();
void b2();int main() {b1();b2();return 0;
}
然后我们将main.c编译成可执行文件并且运行:
$gcc main.c b1.so b2.so -o main -Xlinker -rpath ./
./main
a1.c
a1.c
很明显,main依赖于b1.so和b2.so;b1.so依赖于a1.so;b2.so依赖于a2.so,所以当动态链接器对main程序进行动态链接时,b1.so、b2.so、a1.so和a2.so都会被装载到进程的地址空间,并且它们中的符号都会被并入到全局符号表,通过查看进程的地址空间信息可以看到:
这4个
共享对象的确都被装载进来了,那a1.so
中的函数a和a2.so中的函数a是不是冲突了呢?为什么main的输出结果是两个“al.c”呢?
也就是说a2.so中的函数a似乎被忽略了。
这种一个共享对象里面的全局符号被另一个共享对象的同名全局符号覆盖的现象又被称为共享对象全局符号介入(Global symbol interpose
)
关于全局符号介入这个问题,实际上Linux下的动态链接器是这样处理的:
它定义了一个规则,那就是当一个符号需要被加入全局符号表时,如果相同的符号名已经存在,则后加入的符号被忽略从动态链接器的装载顺序可以看到,它是按照广度优先的顺序进行装载的,首先是main,然后是b1.so、b2.so、a1.so,最后是a2.so。
当a2.so中的函数a要被加入全局符号表时,先前装载a1.so时,al.o中的函数a已经存在于全局符号表,那么a2.so中的函数a只能被忽略。
所以整个进程中,所有对于符合“a”的引用都会被解析到a1.so中的函数a,这也是为什么main打印出的结果是两个“a1.c”而不是理想中的“alc”和“a2.c”。
由于存在这种重名符号被直接忽略的问题,当程序使用大量共享对象时应该非常小心符号的重名问题,如果两个符号重名又执行不同的功能,那么程序运行时可能会将所有该符号名的引用解析到第-个被加入全局符号表的使用该符号名的符号,从而导致程序莫名其妙的错误。
全局符号介入与地址无关代码
前面介绍地址无关代码时,对于第一类模块内部调用或跳转的处理时,我们简单地将其当作是相对地址调用/跳转。
但实际上这个问题比想象中要复杂,结合全局符号介入,关于调用方式的分类的解释会更加清楚。
还是拿前面“pic.c”
的例子来看,由于可能存在全局符号介入的问题,foo
函数对于bar
的调用不能够采用第一类模块内部调用的方法,
因为一旦bar
函数由于全局符号介入被其他模块中的同名函数覆盖,那么foo
如果采用相对地址调用的话,
那个相对地址部分就需要重定位,这又与共享对象的地址无关性矛盾。
所以对于bar()
函数的调用,编译器只能采用第三种,即当作模块外部符号处理,bar()
函数被覆盖,动态链接器只需要重定位“.got .plt”
,不影响共享对象的代码段
为了提高模块内部函数调用的效率,有一个办法是把bar()
函数变成编译单元私有函数,即使用“ statIc”
关键字定义bar()
函数,这种情况下,编译器要确定bar()
函数不被其他模块覆盖,就可以使用第一类的方法,即模块内部调用指令,可以加快函数的调用速度。
3. 重定位与初始化
当上面的步骤完成之后,链接器开始重新遍历可执行的文件和每个共享对象的重定位表,将它们的GOT/PLT
的每个需要重定位的位置进行修正。
因为此时动态链接器已经拥有了进程的全局符号表,所以这个修正过程也显得比较容易,跟我们前面提到的地址重定位的原理基本相同。
在前面介绍动态链接的重定位表时,我们已经碰到了几种重定位类型,每种重定位入口地址的计算方法我们在这里就不再重复介绍了。
重定位完成之后,如果某个共享对象有“.init”段,那么动态链接器会执行“.init”段中的代码,用以实现共享对象特有的初始化过程,比如最常见的,共享对象中的C++ 的全局静态对象的构造就需要通过“init”来初始化。
相应地,共享对象中还可能有“ finit”段,当进程退出时会执行“.finit"段中的代码,可以用来实现类似C++全局对象析构之类的操作。
如果进程的可执行文件也有“init”段,那么动态链接器不会执行它,因为可执行文件中的“init”段和“ finit”段由程序初始化部分代码负责执行,我们将在后面的“库”这部分详细介绍程序初始化部分。
当完成了重定位和初始化之后,所有的准备工作就宣告完成了,所需要的共享对象都已经装载并且链接完成了,这时候动态链接器就如释重负,将进程的控制权转交给程序的入口并且开始执行。
4. linux动态链接器的实现
在前面分析Linux
下程序的装载时,己经介绍了一个通过 execve()
系统调用被装载到进程的地址空间的程序,以及内核如何处理可执行文件。
内核在装载完ELF
可执行文件以后就返回到用户空间,将控制权交给程序的入口。对于不同链接形式的ELF
可执行文件,这个程序的入口是有区别的。
对于静态链接的可执行文件来说,程序的入口就是ELF
文件头里面的 e_entry
指定的入口;
对于动态链接的可执行文件来说,如果这时候把控制权交给e_entry
指定的入口地址,那么肯定是不行的,因为可执行文件所依赖的共享库还没有被装载,也没有进行动态链接。
所以对于动态链接的可执行文件,内核会分析它的动态链接器地址(在“.interp”
段),将动态链接器映射至进程地址空间,然后把控制权交给动态链接器。
Linux
动态链接器是个很有意思的东西,它本身是一个共享对象,它的路径是lib/ld-linux.so.2
,这实际上是个软链接,它指向lib/ld-x.y.z.so
,这个才是真正的动态连接器文件。
共享对象其实也是ELF
文件,它也有跟可执行文件一样的EF文件头(包括 e_entry、段表等)。
动态链接器是个非常特殊的共享对象,它不仅是个共享对象,还是个可执行的程序,可以直接在命令行下面运行:
其实 Linux
的内核在执行 execve()
时不关心目标ELF
文件是否可执行
(文件头 e_type
是 ET_EXEC
还是ET_DYN
),
它只是简单按照程序头表里面的描述对文件进行装载然后把控制权转交给ELF
入口地址
(没有“.interp”
就是ELF
文件的e_entry
;如果有“.interp”
的话就是动态链接器的 e_entry
)。
这样我们就很好理解为什么动态链接器本身可以作为可执行程序运行,这也从一个侧面证明了共享库和可执行文件实际上没什么区别,除了文件头的标志位和扩展名有所不同之外,其他都是一样的。
Windows
系统中的EXE
和DLL
也是类似的区别,DLL
也可以被当作程序来运行, Windows
提供了一个叫做rund32exe
的工具可以把一个DLL
当作可执行文件运行。
Linux
的ELF
动态链接器是Glbc
的一部分,它的源代码位于Glibc
的源代码的elf
目录下面,它的实际入口地址位于 sysdeps/i386/d1-manchine.h
中的__start
(普通程序的入口地址start()
在 sysdeps/i386/elf/start.S
,本书的第4
部分还会详细分析)
start
调用位于 elf/rtld.c
的_dl_start
函数。
dl start
函数首先对ldso
(以下简称ld x.y.z.so
为ld.so
)进行重定位,因为ld.so
自己就是动态链接器,没有人帮它做重位工作,所以它只好自己来,美其名曰“自举”。
自举的过程需要十分的小心谨慎,因为有很多限制.这个我们在前面已经介绍过了。
完成自举之后就可以调用其他函数并访问全局变量了。
调用_dl_start_final
,收集一些基本的运行数值,进入_ dl_sysdep_start
,这个函数进行一些平台相关的处理之后就进入了_dl_main
,这就是真正意义上的动态链接器的主函数了。
_dl_main
在一开始会进行一个判断:
很明显,如果指定的用户入口地址是动态链接器本身,那么说明动态链接器是被当可
执行文件在执行。在这种情况下,动态链接器就会解析运行时的参数,并且进行相应的处理_dl_main
本身非常的长,
主要的工作就是前面提到的对程序所依赖的共享对象进行装载、符号解析和重定位,我们在这里就不再详细展开了,
因为它的实现细节又是一个非常大的话题
关于动态链接器本身的细节实现虽然不再展开,但是作为一个非常有特点的,也很特殊的共享对象,关于动态链接器的实现的几个问题还是很值得思考的:
动态链接器本身是动态链接的还是静态链接的?
动态链接器本身应该是静态链接的,它不能依赖于其他共享对象,动态链接器本身是用来帮助其他ELF
文件解决共享对象依赖问题的,如果它也依赖于其他共享对象,那么谁来帮它解决依赖问题?所以它本身必须不依赖于其他共享对象。这一点可以使用ldd
来判断:
$ ldd /lib/ld-linux so 2
statically linked
动态链接器本身必须是PC
的吗?
是不是PC
对于动态链接器来说并不关键,动态链接器可以是PC
的也可以不是,但往往使用PIC
会更加简单一些。
一方面,如果不是PC
的话,会使得代码段无法共享,浪费内存:
另一方面也会使ldso
本身初始化更加复杂,因为自举时还需要对代码段进行重定位。
实际上的ld- linux.so.2
是PIC
的。
动态链接器可以被当作可执行文件运行,那么的装载地址应该是多少?
ld.so
的装载地址跟一般的共享对象没区别,即为0x0000
这个装载地址是一个无效的装载地址,作为一个共享库,内核在装载它时会为其选择一个合适的装载地址。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 第一十章:Python数据可视化-离散型数据的可视化(二)
直接学习:https://edu.csdn.net/course/play/6861/371101 离散型数据的可视化(二) 1、条形图的绘制 bar(x,height,width=0.8,bottom=None,color=None,edgecolor=None,tick_label=None,label=None) x:传递数值序列,指定条形图中x轴上的刻度值 height:传递数值序列,指定条形…...
2024/4/23 15:25:27 - 利用有线网络下载安装离线整套安装包,同时适用于Windows和Linux系统
利用有线网络下载安装离线整套安装包,同时适用于windows和Linux系统windows系统和Linux下Linux系统下打包下载离线电脑需要的安装包(包括所有的依赖包)windows换源下载Linux系统下打包下载Windows 和Linux系统下将下载好的安装包安装 windows系统和Linux下 windows系统下安装…...
2024/4/15 8:01:25 - XAMPP 部署 Testlink
XAMPP 部署 Testlink1. 安装XAMPP2. 下载Testlink3. 安装4. 进入TestLink 1. 安装XAMPPXAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。 https://www.apachefriends.org/. 找到对应的版本下载, 下载可能会比较慢。最新的版本是7.4.6,以下的截图是我自己比较…...
2024/4/15 8:01:24 - vue动画
Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。 vue过渡动画会和 v-show , v-if 相结合使用 必须使用 transition 组件将需要过渡动画的元素 包裹起来当元素从显示状态 --> 隐藏状态 我们称为leave状态 vue会给目标元素加上3个class v-leave: 当前这…...
2024/4/17 2:58:36 - hw3
题目 1.了解CMMI项目管理过程-项目计划(PP),使用知识域*过程矩阵对比项目规划过程组与CMMI-PP过程,具体要求:首先,绘制矩阵。矩阵行是十大知识领域,最后一行为其他知识;矩阵第一列是项目规划过程组,第2~4列分别是特定目标(SG)1~3;内容是项目管理过程或特定实践(SP)…...
2024/4/25 5:24:44 - Ubuntu14.04+Linux4.9.223 添加系统调用
Ubuntu14.04实现系统调用在内核添加系统调用首先在sys.c添加系统调用函数在syscall.h添加函数声明在syscall.tbl添加系统调用号编译安装内核编译内核安装内核模块安装内核开机长按shift选择安装的内核调用编写一个C文件编译生成可执行文件运行可执行文件使用dmesg查看信息 在内…...
2024/4/17 2:58:36 - 7-1 jmu-Java&Python-统计一段文字中的单词个数并按单词的字母顺序排序后输出 (10分)
现需要统计若干段文字(英文)中的不同单词数量。 如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。 注1:单词之间以空格(1个或多个空格)为间隔。 注2:忽略空行或者空格行。 注3:单词大小写敏感,即’word’与’WORD’是两个不同的单词 。 …...
2024/4/26 2:43:07 - 第四天:文本处理流程——分词
分词工具的使用我们在前一篇文章中介绍过文本处理流程,主要包括分词、文本预处理(无用标签、特殊符号、停用词、大写转小写)、标准化、特征提取、建模、系统评估。今天我们介绍在自然语言处理(NLP)中的文本处理流程中的第一个环节:分词处理。以下是我们分词常用的库,具体如图…...
2024/5/7 14:24:54 - 大数据实战【千亿级数仓】阶段四
写在前面: 博主是一名软件工程系大数据应用开发专业大二的学生,昵称来源于《爱丽丝梦游仙境》中的Alice和自己的昵称。作为一名互联网小白,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于起步阶段的萌新。由于水平有限,博客中难免会有一…...
2024/4/18 7:44:58 - 求10000以内所有的质数
首先,要清楚质数(素数)的概念。质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。其次根据质数的定义,我们可以总结以下几种算法去计算10000以内所有的…...
2024/4/17 3:00:19 - css变量制作心动的果冻效果(css变量)
变量的声明 CSS自定义属性也被称为CSS变量。变量就是拥有合法标识符和合法的值,可以被使用在任意的地方。通过var()函数使用变量。 1.声明一个局部变量: .jelly {--main-bg-color: #e91e63; }2.使用一个局部变量: .jelly {background-color: var(--main-bg-color); }3.声明一…...
2024/4/17 3:00:19 - 介绍JPA
什么是JPA?1.Hibernate 是全映射框架。 优点: 1.定义持久化对象, 2.数据库映射表 3.自动生成SQL 缺点: SQL查询差 不支持储存过程,不能通过优化SQL优化性能,直适合不太复杂的场景且针对不高的项目使用。 2.Myatis 是半自动映射框架 需要手动提供POJOpom.xml 导入jar的坐标…...
2024/4/20 4:24:26 - 第一关:干掉链表这个小喽啰
第一关:干掉链表这个小喽啰 文章目录第一关:干掉链表这个小喽啰前备知识:具体代码实现单链表循环链表双向循环链表相关习题: 前备知识: 链表作为线性数据结构的一种,提它之前必须得讲下:顺序表(也就是一个个结点的地址是连续的存储在一起的),这样可能比较抽象:其实也…...
2024/4/17 3:00:18 - 【LeetCode】 100. 相同的树 Java版
相同的树给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。实现思路: 如果两个根节点都是空,那么就相同 如果一个是空,那就不相同 根节点都不为空的情况下看值是否相同,不同就false 接着递归看两棵树…...
2024/4/23 15:25:28 - 题目 1018: [编程入门]有规律的数列求和
题目:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。输入样例:N=10;解题思路:通过寻找提供的分数序列中分子和分母及前后之间的关系,通过它们间的关系编写代码。代码部分:本题要求保留两位小数,所以要使用到标准输入输出流的…...
2024/4/23 15:25:26 - 高并发之JUC——AQS源码深度分析,有你不得而知的条件等待队列(二)
上一篇分析了关于AQS独占锁的执行流程和源码。在AQS中不仅涉及了独占锁,还涉及了共享锁及带超时时间的共享锁、中断共享锁。本文就讲解上述锁的获取锁和释放锁的原理。AQS获取共享锁acquireShared 共享锁,顾名思义就是多个线程可以共享同一把锁,在JUC下面如CountDownLatch就…...
2024/4/23 15:25:24 - 葵花宝典--SparkStreaming
一、概述1、定义Spark Streaming用于处理流式数据。支持多种数据源,常用kafka,数据输入后可以使用spark的算子进行操作,运行的结果可以保存在很多地方。处理数据为小批次处理,使用时间间隔来将数据分开,批处理的间隔影响了作业的提交效率和数据处理延迟,也影响了数据处理…...
2024/4/23 15:25:24 - 【路由交换】 VLAN详解
VLAN—虚拟局域网一、作用当二层交换机与三层设备协同工作后,将原来的一个广播域逻辑地划分为多个。二、分类1、基于编号:范围:0~4095,其中1~4094可用。标准VLAN:1~1005:任何条件下均可以使用(其中1002~1005为纪念淘汰的几种网络类型)扩展VLAN:1006~4094:在VTP模式为…...
2024/4/18 8:12:24 - 牛客网 python 循环输入处理多个case
在牛客网练习算法,出现:你的输出为:空。请检查一下你的代码,有没有循环输入处理多个case。点击查看如何处理多个case原因:这个程序测试正确与否的流程是连续输入多组测试数据进行测试,只有每组数据都对才行,所以必须使用下面的程序模块:while True:try:pass # 程序块exc…...
2024/4/23 15:25:22 - 2020.5.19第三十一天课程(认识类与对象)
内容主体大纲: 创建类与对象 掌握面向对象的三大特性: --------封装 --------继承 --------多态 掌握抽象类和接口的使用 掌握程序中的异常处理 会使用面向对象思想进行编程 开发方法 结构化开发 -------面向功能划分软件结构 -------自顶而下 -------最小的子系统是方法 ---…...
2024/4/23 15:25:23
最新文章
- Git === Git概述 Git安装
第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion…...
2024/5/7 15:03:08 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - Oracle 正则表达式
一、Oracle 正则表达式相关函数 (1) regexp_like :同 like 功能相似(模糊 匹配) (2) regexp_instr :同 instr 功能相似(返回字符所在 下标) (3) regexp_substr : 同 substr 功能相似&…...
2024/5/7 4:19:23 - PostCss:详尽指南之安装和使用
引言 在现代前端开发中,CSS预处理器如Sass、Less等已经成为提升开发效率、增强代码可维护性的重要工具。然而,随着Web技术的发展,CSS的功能也在不断扩展,一些新的CSS语法(如变量、自定义属性、CSS Grid等)以…...
2024/5/7 14:57:33 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/7 5:50:09 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57