首页
学习
活动
专区
工具
TVP
发布

linux 什么是SO文件

下面的内容大多都是连接中,穿插我自己笔记 牵扯到ELF格式,gcc编译选项待补,简单实用说明一下,对Linuxso文件有个实际性认识。 1.so文件是什么?...(Position-Independent Code),则产生代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存任意 位置,都可以正确执行。...这正是共享库所要求,共享库被加载时,在内存位置不是固定。 -g: 令 gcc 生成调试信息,该选项可以利用操作系统“原生格式(native format)”生成调试信息。...这个特性使得在Linux下,升级使得共享库程序和定位错误变得十分容易。   ...在Linux中,应用程序通过使用soname,来指定所希望库版本,库作者可以通过保留或改变soname来声明,哪些版本是兼容,这使得程序员摆脱了共享库版本冲突问题困扰。

5.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

linuxso注入与热更新原理

简介 之前写了个hookso工具,用来操作linux进程动态链接库行为,本文从so注入与热更新入手,简单讲解一下其中原理,配合源码阅读效果更佳。...这个就是基本原理,剩下事情,就是如何让他调用。 那么如何操作?这里要介绍一下linuxptrace函数。...查找过程 查找函数地址过程也分为两步,查找so起始内存地址,查找函数所在so偏移,两者相加就是函数地址 查找so起始地址 首先,我们要查找某个so函数,就得先找到so所在内存位置才行。...如果找是foo2,foo2是在另一个elf中定义,例如之前提到,调用add.so函数add函数。那么就需要左边rela.plt(重定向信息)以及got.plt(位置偏移信息)。...当发现foo2在dynsym里st_shndx字段是undef时,通过index定位到rela.plt中位置,进一步取到偏移表位置,这个位置值,指向了foo2函数地址。

10.2K50

linux编译curl库动态库so

转载请注明出处:帘卷西风专栏(http://blog.csdn.net/ljxfblog)  curl库是一个很强大http开源库,c++里面能够很方便和http服务器交互。...在windows下还是很容易使用,如何使用案例比比皆是,而且很容易就找到已经编译好动态库进行测试,但是最后在linux下部署时候,发现不好找已经编译好so库文件,最后没办法只好自理更生。...下载了源码下来看,配置文件看得一塌糊涂,在网上查了一些资料,也很少找到有用信息,最后结合自己理解和网上资料,总算把curl编译成功了,再此记录一下,方便以后查阅,也希望能帮助到其它遇到此问题朋友们...我是使用腾讯SDK里面附带curl库源码(ps,腾讯SDK示例代码貌似没在linux测试过,我编译后使用他们代码,发现很容易崩溃,需要修改才能运行,但是windows正常)。...包含了编译生产库、头文件等。 然后为了能够方便移植我们程序,把include/lib下面的头文件和so库文件拷贝到自己工程目录就能使用curl库了。

6.1K10

linuxso、o、lo、a、la文件区别

该文件中dependency_libs记录该库依赖所有库(其中有些是以.la文件形式加入);libdir则指出了库安装位置;library_names记录了共享库名字;old_library...gcc命令行类似于下面: gcc –o myprog /usr/lib/liba.so 由于liba.so依赖于libb.so(这种依赖可以用readelf读liba.so...从以上可以看出,在使用本地工具链进行本地编译情况下,只要库存在于某个位置,gcc总能通过如上策略找到需要共享库。...$ unicore32-Linux-gcc –o myprog /usr/lib/liba.so \ -Wl,–rpath-link -Wl,/home/UNITY_float/install/usr/...libtool中有一个变量“hardcode_libdir_flag_spec”,该变量本来是传递“-rpath”选项,但我们可以修改它,添加我们需要路径,传递给unicore32-linux-gcc

8.3K30

linux查询jdk安装位置

1.前言 因为我这里使用是阿里云服务器,所以一开始买时候里面就已经装过jdk,但因为不是我装,所以我也不晓得jdk它到底安装在哪里.自己上网查了查,说句不好听的话,很多博客里面写都很扯淡,上来就让人家通过...echo $JAVA_HOME,一开始我自己也用了这种方法,但是后来想了想,我都没有设置过环境变量,这个命令怎么可能会生效呢,所以很多博客完全就是扯淡,根本就没有考虑过大多数人感受.终于找到了正确解决办法...,这里记录一下. 2.步骤 2.1检查jdk是否安装 首先我们要确定我们系统上面的确有jdk,否则一切都是白搭 java -version 如果查询出来下面的界面就说明的确有jdk ?...2.2 查找java命令位置 which java 这样我们便能看到相应路径名称 ? 2.3查找列出该链接所指向原始文件或目录 ls -l /usr/bin/java ?.../usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64 即为jdk安装目录

4.3K10

Linux下动态库(.so)和静态库(.a) 区别

.6 => /lib/libc.so.6 (0xb7ce3000)         /lib/ld-linux.so.2 (0xb7f1b000) 二: 动态库 这类库名字一般是libxxx.so...相当于一个可执行文件 -fPIC:表示编译为位置独立代码,不用此选项的话编译后代码是位置相关所以动态载入时是通过代码拷贝方式来满足不同进程需要,而不能达到真正代码段共享目的。 -L..../libd.so (或者g++ -o dOut main.cpp -L./ -ld) hc@linux-v07j:~/weiming/tt/dd> ldd dOut         linux-gate.so...当需要载入动态库代码时,UNIX会按照某种路径查找动态库 通知UNIX系统动态库正确位置有如下两种方法., 1)带编译路径 #g++ -o dOut main.cpp ....例如将libd2.so换成libd.so 显式调用动态库 显式调用动态库,编译时无需库文件,执行时动态可存储于任意位置,库里共享对象必须先申请后使用,不同动态库版本,只要其共享对象接口相同,就可以直接动态加载

16.3K21

linuxso注入与热更新原理 | 直播回顾

文件)在Linux中使用非常广泛,对于后台开发来说,服务器进程往往加载和使用了很多SO文件,当需要更新某个SO时往往需要重启进程。...其实往一个进程注入so方法,很简单,让进程自己调用一下dlopen即可。这个就是基本原理,剩下事情,就是如何让他调用。 那么如何操作?这里要介绍一下linuxptrace函数。...查找过程 查找函数地址过程也分为两步,查找so起始内存地址,查找函数所在so偏移,两者相加就是函数地址 查找so起始地址 首先,我们要查找某个so函数,就得先找到so所在内存位置才行。...如果找是foo2,foo2是在另一个elf中定义,例如之前提到,调用add.so函数add函数。那么就需要左边rela.plt(重定向信息)以及got.plt(位置偏移信息)。...当发现foo2在dynsym里st_shndx字段是undef时,通过index定位到rela.plt中位置,进一步取到偏移表位置,这个位置值,指向了foo2函数地址。

1.3K10

【Android 逆向】Android 中常用 so 动态库 ( libdvm.so | libart.so | libandroid_runtime.so | libandroidfw.so )

文章目录 一、Android 虚拟机涉及 libdvm.so 动态库 和 libart.so 动态库 二、Android 运行时相关 libandroid_runtime.so 动态库 三、Android...Framework 层 Native 实现相关 libandroidfw.so 动态库 一、Android 虚拟机涉及 libdvm.so 动态库 和 libart.so 动态库 ---- libdvm.so...动态库是 Android Dalvik 虚拟机使用动态库 ; Android 5.0 及以下系统使用 Dalvik 虚拟机 ; libart.so 动态库是 Android Art 虚拟机使用动态库...; Android 5.1 及以上系统使用 Art 虚拟机 ; 目前所有的模拟器 , 真机获取虚拟机动态库都是 libart.so 动态库 ; 5.0 以下 Android 设备 , 现在很少了...Android Framework 层 Native 实现部分动态库 , 执行 cp /system/lib/libandroidfw.so /sdcard/Pictures 命令 , 将 libandroidfw.so

2.1K20

Linux下共享库(SO)有关几个环境变量

Linux支持共享库已经有悠久历史了,不再是什么新概念了。大家都知道如何编译、连接以及动态加载(dlopen/dlsym/dlclose) 共享库。...在linux下,还提供了另外一种方式来完成同样功能,你可以把这些目录加到/etc/ld.so.conf中,或则在/etc/ld.so.conf.d里创建一个文件,把目录加到这个文件里。...在linux下,还提供了另外一种方式来完成同样功能,你可以把要优先加载共享库文件名写在/etc/ld.so.preload里。...意义是一致,只是dlopen中flag适用于显示加载情况,而BIND_NOW/BIND_NOT适用于隐式加载。...LD_PROFILE/LD_PROFILE_OUTPUT:为指定共享库产生profile数据,LD_PROFILE指定共享库名称,LD_PROFILE_OUTPUT指定输出profile文件位置

1.9K10

Linux动态链接库.so文件创建与使用

上面两个路径不同并没有本质冲突。GNU提出标准主要对于开发者开发源码,而FHS建议则是针对发行版本路径。具体位置信息可以看/etc/ld.so.conf里面的配置信息。 3.2....对于Linux系统,这个loader名字是/lib/ld-linux.so.X(X是版本号)。这个loader启动后,反过来就会load所有的其他本程序要使用共享函数库。...环境变量LD_PRELOAD列出了所有共享函数库中需要优先加载库文件,功能和/etc/ld.so.preload类似。这些都是有/lib/ld-linux.so这个loader来实现。...)         libc.so.6 => /lib/libc.so.6 (0x40020000)         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (...动态链接库.so文件创建与使用 Linux动态库(.so)搜索路径 Linux 动态库与静态库制作及使用详解

8.8K51
领券