草庐IT

preloader

全部标签

linux - 在多架构设置中使用/etc/ld.so.preload

有什么方法可以使用ld.so.preload并覆盖32位和64位二进制文​​件吗?如果我在ld.so.preload中列出故障处理程序的32位和64位版本,那么加载程序总是提示其中一个无法为我运行的任何命令进行预加载。不完全是惊天动地,因为错误更像是一个警告,但我当然可以不打印输出。我没有指定绝对路径,而是尝试简单地指定“segv_handler.so”,希望加载程序会选择arch适当路径中的lib(32位版本在/lib中,64位版本在/lib64中).显然不太可能。有没有办法将ld.so.preload设置为架构感知?或者,如果没有,是否有某种方法可以关闭错误消息?

linux - 带有 setuid 二进制文件的 LD_PRELOAD

我正在尝试使用LD_PRELOAD预加载具有setuid权限的应用程序的库。一开始尝试了LD_PRELOAD,它似乎被setuid二进制文件忽略了,尽管当我用ls、dir等来自LD_PRELOAD的文档:LD_PRELOADAwhitespace-separatedlistofadditional,user-specified,ELFsharedlibrariestobeloadedbeforeallothers.Thiscanbeusedtoselectivelyoverridefunctionsinothersharedlibraries.Forset-user-ID/set-gr

python - 为什么 LD_PRELOAD 不能与 Python 一起使用?

在前几次调用后,使用Python的open()函数插入似乎不起作用。我怀疑Python正在进行某种初始化,或者某些东西暂时绕过了我的函数。这里的open调用显然被Hook了:$catahi$LD_PRELOAD=./libinterpose_python.socatasandbox_init()open()hi这里它在Python初始化期间发生一次:$LD_PRELOAD=./libinterpose_python.sopythonsandbox_init()Python2.7.2(default,Jun122011,20:20:34)[GCC4.6.1]onlinux2Type"he

c - 运行进程的重载符号(LD_PRELOAD附件)

我正在为Linux开发堆分析器,称为heaptrack.目前,我依靠LD_PRELOAD来重载各种(取消)分配函数,并且效果非常好。现在我想扩展该工具以允许运行时附加到现有进程,该进程是在没有LD_PRELOAD我的工具的情况下启动的。我可以通过GDBdlopen我的库就好了,但这不会覆盖malloc等。我认为,这是因为此时链接器已经解析了位置相关代码已经运行的进程-正确吗?那么我该怎么做才能重载malloc和friend?我不精通汇编代码。根据我目前所读的内容,我想我必须以某种方式修补malloc和其他函数,以便它们首先回调到我的跟踪函数,然后继续它们的实际实现?那是对的吗?我该怎么

c++ - LD_PRELOAD 未按预期工作

考虑以下可以在任何程序执行之前预加载的库://g++-std=c++11-shared-fPICpreload.cpp-opreload.so//LD_PRELOAD=./preload.so#includestructGoodbye{Goodbye(){std::cout问题是,虽然全局变量goodbye的构造函数总是被调用,但有些程序却没有调用析构函数,比如ls:$LD_PRELOAD=./preload.solsHello对于其他一些程序,析构函数按预期调用:$LD_PRELOAD=./preload.somanHelloWhatmanualpagedoyouwant?Goodb

linux - 错误 : ld. 所以:无法预加载对象 LD_PRELOAD:忽略

我使用的是ubuntu12.04。每次我启动我的bash终端并且每次我完成输入命令(然后按回车键)时,我都会收到以下消息:ERROR:ld.so:object'/usr/lib/liblunar-calendar-preload.so'fromLD_PRELOADcannotbepreloaded:ignored.这很奇怪。那么环境变量LD_PRELOAD是干什么用的呢?幕后发生了什么?谢谢。 最佳答案 链接器会考虑一些环境变量。一个是LD_PRELOAD来自man8ld-linux:LD_PRELOADAwhitespace-se

c - 使用 LD_PRELOAD 指定多个文件

我知道如何用LD_PRELOAD覆盖一个库,例如,如下。LD_PRELOAD=./getpid.so./testpid现在我的问题是如何覆盖多个文件。假设我想同时覆盖getpid和getid,我该如何指定? 最佳答案 根据ld.somanpage,它是一个空格分隔的列表。所以:LD_PRELOAD="path1path2"应该可以工作。 关于c-使用LD_PRELOAD指定多个文件,我们在StackOverflow上找到一个类似的问题: https://sta

c - 如何将 gdb 与 LD_PRELOAD 一起使用

我运行一个带有LD_PRELOADing特定库的程序。像这样。LD_PRELOAD=./my.so./my_program如何使用gdb运行这个程序? 最佳答案 执行以下操作。gdbyour_program(gdb)setenvironmentLD_PRELOAD./yourso.so(gdb)start 关于c-如何将gdb与LD_PRELOAD一起使用,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

c - 什么是 LD_PRELOAD 技巧?

我最近在proggit上看到了对它的引用。并且(截至目前)没有解释。我怀疑this可能是这样,但我不确定。 最佳答案 如果您将LD_PRELOAD设置为共享对象的路径,则该文件将在任何其他库(包括C运行时,libc.so)。因此,要使用您的特殊malloc()实现运行ls,请执行以下操作:$LD_PRELOAD=/path/to/my/malloc.so/bin/ls 关于c-什么是LD_PRELOAD技巧?,我们在StackOverflow上找到一个类似的问题:

c - 什么是 LD_PRELOAD 技巧?

我最近在proggit上看到了对它的引用。并且(截至目前)没有解释。我怀疑this可能是这样,但我不确定。 最佳答案 如果您将LD_PRELOAD设置为共享对象的路径,则该文件将在任何其他库(包括C运行时,libc.so)。因此,要使用您的特殊malloc()实现运行ls,请执行以下操作:$LD_PRELOAD=/path/to/my/malloc.so/bin/ls 关于c-什么是LD_PRELOAD技巧?,我们在StackOverflow上找到一个类似的问题: