问题标签 [ld-preload]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 带有 setuid 二进制文件的 LD_PRELOAD
我正在尝试使用LD_PRELOAD
具有 setuid 权限的应用程序预加载库。起初尝试过LD_PRELOAD
,似乎它被 setuid 二进制文件忽略了,尽管当我与其他人一起尝试时它正在工作ls
,dir
等等。
从 LD_PRELOAD 的文档中:
我尝试按照上面的文档将库放入/usr/lib
,/usr/local/lib
和/usr/lib64
setuid 权限,但它似乎仍然不起作用。如果我LD_PRELOAD
在标准目录中使用 setuid 有库的情况下没有给出路径,它似乎无法找到该库。如果我给它路径,它不会做任何事情。
setuid 二进制文件是在非 root 用户 shell 中运行的 root 权限二进制文件。有什么想法吗?不确定我是否缺少路径、环境变量,或者我误解了上面的文档。
编辑:请求的权限是:
图书馆:
应用程序:
multithreading - 使用 LD_PRELOAD 和线程安全注入线程
我正在做一个项目,用 LD_PRELOAD 在程序中注入共享库。
我的注入库在注入程序时会创建一个新线程。所有逻辑都发生在这个线程中(比如分析网络流量等等)。
首先,您需要了解正在预加载的程序。它是一个客户端应用程序,它加密每个数据包,写入静态缓冲区,然后发送到服务器。我在客户端找到了加密和发送数据包的功能,我能够绕道而行。所以现在我可以修改静态缓冲区并让“发送”函数加密缓冲区并将缓冲区发送到服务器。
但是现在我有一个问题:如果我在我的库线程中更改静态缓冲区的内容(以便我可以发送一个假数据包),同时程序的线程也更改了静态缓冲区怎么办?那会导致崩溃。
我需要某种同步。
所以我一直在想一些解决方案:
- 找到程序中更改缓冲区的每个函数,绕过它们并为该调用添加一个互斥锁或类似的东西。虽然需要很长时间......
- 找到一种方法来执行我的一段代码,在一个块中更改缓冲区。所以我的一段代码实际上是立即执行的,没有 POSIX 线程切换到其他线程。这甚至可能吗?
- 让我的应用程序同步并哭泣。
任何人都可以提出更好的解决方案吗?或者您知道如何使解决方案 2 成为可能吗?
在此先感谢,吉利斯
memory - 如何将 watchmalloc 用于后台进程
我正在使用Solaris x86 盒子。我的应用程序因以下堆栈跟踪而崩溃。
我需要用"watchmalloc"
. 我的应用程序将由系统inetd进程启动。我无法控制它的执行。请让我知道如何watchmalloc
在这种情况下使用。
我设置了以下环境变量,它仅对从 shell 启动的进程有帮助。
linux - 如何转义附加到 LD_PRELOAD 的库路径中的空格?
我在 Linux 上遇到 LD_PRELOAD 问题。我正在尝试在启动我的应用程序之前加载一个存在于名称中带有空格的目录中的库:
但是,路径没有被正确采用。它在空间存在的地方被分割,所以它尝试预加载这些:
我已经逃离了“MyApp Test”中的空间。通过这样的路径的正确方法是什么?
编辑:按照建议在没有转义空间的情况下导出,呈现相同的结果:
export LD_PRELOAD='/home/myuser/MyApp Test/lib/mylib.so'
以及(没有引号,只是转义空格):
导出 LD_PRELOAD=/home/myuser/MyApp\Test/lib/mylib.so
java - JNI 代码中的 LD_PRELOAD 变量
我的 java 代码通过 JNI 调用来自共享库(例如 libtest.so)的一些 C++ 代码。该代码带有一些特殊的调试符号,这些符号存在于 libdebug.so 中。当我打电话
LD_PRELOAD=/usr/lib/libdebug.so java com.test.myMain
执行停止Exception in thread "main" java.lang.UnsatisfiedLinkError
因为 libdebug.so 中的符号未加载(为什么?)。
我想知道是否可以修改我的代码以便在我的 java 代码中预加载库。(当然我不想用libdebug.so编译java...)
linux - 为命令运行设置 LD_PRELOAD 环境变量而无需输入完整路径
我正在使用 LD_PRELOAD 并生成了一个库,该库仅将 puts() 包装在一个函数中,该函数在打印之前将要打印的字符串转换为大写。然后我像这样导出 LD_PRELOAD 变量
现在运行命令时行为按预期工作
但是这样运行时不起作用
在这种情况下导致 LD_PRELOAD 环境变量被忽略的机制是什么?
linux - 玩弄 LD_LIBRARY_PATH
我最近阅读了这篇文章,并尝试通过执行以下操作来覆盖 libc printf 函数:-
- 创建一个使用 printf 打印的可执行文件
this is a test
(printer.c) - 创建一个带有自定义放置打印的 c 文件
muhahaha, this is a test
(custom.c) - 创建目标文件
gcc -fPIC -g -c -Wall custom.c
- 创建so文件
gcc -shared -Wl,-soname,libmystuff.so.1 -o libmystuff.so.1.0.1 custom.o
- 我将包含 so 文件的目录添加到 LD_PRELOAD 环境变量中。
export LD_PRELOAD=$(pwd)
- 尝试运行打印机
我想那muhahaha, this is a test
会被打印出来,但似乎我做错了什么。我有什么概念错了吗?还是我只是做错了什么?
[编辑]
涉及的代码片段是: -
c - LD_PRELOAD not working with my program
For testing LD_PRELOAD, I wrote my own getpid
, which prints something before calling the original getpid
using dlsym. The code is given below.
However when I use such getpid
in my program and run it using LD_PRELOAD, by typing LD_PRELOAD=./prelib.so ./prog
, I get the following error.
But If I do LD_PRELOAD=./prelib.so bash -c 'echo $$'
, there is no such error. Any idea what is going on here.
c++ - 带有多个源文件的 LD_PRELOAD
我编写了 LD_PRELOAD 模块,我的所有源代码都在.cpp 中source.cpp
,但现在我需要添加crypt.cpp
一些我需要的类的文件,我如何使用多个 .cpp 文件通过 g++ 编译 LD_PRELOAD?
谢谢!
c - pthread_create 的 LD_PRELOAD 问题
我只是在玩弄 LD_PRELOAD 的概念。在我开始在我的代码中使用 pthread 库函数之前,它似乎工作正常。当我这样做时,我会遇到分段错误。LD_PRELOAD 是否对 pthread 库有某种反感?
这里显示的是程序和 LD_PRELOADed .so 代码。
程序代码
LD_PRELOADed .so 代码
定义 USE_PTHREADS 时出现这样的错误。