- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我通过创建一个共享对象并首先使用 LD_PRELOAD 加载它来替换一个函数。该函数的参数是否可以与原始库中的参数不同?
例如,如果我替换了 pthread_mutex_lock,那么它使用 pthread_my_mutex_t 而不是参数 pthread_mutex_t。可能吗?
其次,除了函数之外,是否可以使用 LD_PRELOAD 更改结构声明?例如,可以向结构中添加一个字段。
最佳答案
尽管您可以安排提供修改后的 pthread_mutex_lock()
函数,但代码将被编译为调用标准函数。当使用传递给标准函数的参数调用替换时,这将导致问题。这是一种礼貌的说法:
任何预加载的函数都必须实现相同的接口(interface)——相同的名称、相同的输入参数、相同的输出值——作为它替换的函数。可以根据需要以不同方式实现内部结构,但接口(interface)必须相同。
与结构类似。现有代码被编译为预期结构的一种尺寸,具有一种特定的布局。您可能会在末尾添加一个额外的字段,但未替换的代码可能无法正常工作。它将为结构的原始大小分配空间,而不是增强结构等。它永远不会访问额外的元素本身。这可能并非完全不可能,但你必须设计程序来处理动态变化的结构大小,这对你何时可以这样做有足够严格的限制,答案“你不能”可能是恰当的(而且肯定很多更简单)。
恕我直言,LD_PRELOAD 机制用于紧急情况(并且是针对给定问题的临时创可贴)。这不是一种您应该计划在类似常规基础上远程使用的机制。
关于c - 是否可以 LD_PRELOAD 具有不同参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871938/
我的代码如下:preload.c,内容如下: #include #include int __attribute__((constructor)) main_init(void) {
我尝试使用 LD_PRELOAD 来 Hook sprintf function ,所以我将打印到缓冲区的结果: #define _GNU_SOURCE #include #include int
实际问题 我有一个默认情况下使用 EGL 和 SDL 1.2 分别处理图形和用户输入的可执行文件。使用 LD_PRELOAD ,我已经用 GLFW 替换了两者。 这正常工作,除非用户安装了 GLFW
我用 C 代码编写二进制文件。如何防止其他用户在我的二进制文件上使用 LD_PRELOAD? 使用LD_PRELOAD时,是否有任何信号可以让我处理并中断程序? 如果我静态编译二进制文件,我听说 LD
我用 C 代码编写二进制文件。如何防止其他用户在我的二进制文件上使用 LD_PRELOAD? 使用LD_PRELOAD时,是否有任何信号可以让我处理并中断程序? 如果我静态编译二进制文件,我听说 LD
这可能会很尴尬: 我在其他项目中使用库预加载,但我无法让这个最小的示例工作: weakref.h: void f_weak() __attribute__((weak)); weakref.c: #i
目前,我有一个应用程序可以: execlp(java_exec、java_args等); 启动 jar 文件。 有没有办法将其前置 LD_PRELOAD="mylib.so" ? 我找不到告诉 exe
我有一个 LD_PRELOAD 文件。在什么操作系统和条件下,我应该编译这个预加载以在大多数系统 (Unix/Linux) 上工作。最想要的是 FreeBSD、Ubuntu、CenstOS、Solar
我有一个用 C 编写的客户端和一个服务器。为了保护我实现的连接: 我自己连接并接受 Diffie-Hellman key 。 我自己发送和接收,以便使用 AES 加密流量。基本上,我用数据加密缓冲区并
我在 Google 的 tcmalloc 上看到了这条建议文档页面。 You can use TCMalloc in applications you didn't compile yourself,
在 Ubuntu 16.04 系统上,一直在尝试将 ld_preload 与自定义编译的 libpcap.so 一起使用并运行 tcpdump。 编译 libpcap (1.8.0) ./config
我正在尝试 LD_PRELOAD 一个声明如下的函数 // header1.h typedef enum { ... } enum1; // header2.h typedef enum { ...
我们有一个在嵌入式 powerpc 上运行的用 g++ 编译的多线程 c++ 应用程序。为了在持续集成测试中对此进行内存泄漏测试,我们创建了一个使用 ld_preload 加载的堆分析器。 我们想保证
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
是否可以使用 LD_PRELOAD 覆盖其中一个 linux 内核函数? 例如,我想在 Linux/net/ipv4/syncookie.c 中为我的程序 fooserver。我可以使用 LD_PRE
我编写了 LD_PRELOAD 模块,我的所有源代码都在 source.cpp 中,但现在我需要添加 crypt.cpp 文件以及我需要的一些类,如何使用多个 .cpp 文件通过 g++ 编译 LD_
我有这个小测试代码atfork_demo.c: #include #include void hello_from_fork_prepare() { printf("Hello from
我有我的 .so 库,我将它注入(inject)到我的 Ubuntu 服务器上的各种进程中。但是我找到了我用常规命令启动的二进制文件: LD_PRELOAD=/home/glinkd/preload3
我需要在 Linux 中记录所有终端命令。我在 C 中找到了正确工作的库,但它仅在我运行 LD_PRELOAD=/usr/local/bin/bashpreload.so/bin/bash 时有效:
操作系统: Ubuntu 16.04 64 位 python : 2.7.12 我有一个非常简单的 Python 程序,它只加载了两个库 libhidapi-hidraw 和 libpcProxAPI
我是一名优秀的程序员,十分优秀!