sách gpt4 ăn đã đi

c - 跟踪/包装开放系统调用

In lại Tác giả: Walker 123 更新时间:2023-11-30 17:46:30 29 4
mua khóa gpt4 giày nike

我有以下测试代码:

#include 

int main(void)
{
fprintf(stderr, "This is a test.\n");
int ret = open("somefile.log", 1);
fprintf(stderr, "Return value is %d.\n", ret);
trả về 0;
}

sử dụnggcc -m64 test.c -o test编译

如果我运行 truss ./test,我最终会看到以下输出:

getrlimit(RLIMIT_STACK, 0xFFFFFFFF7FFFE280) = 0
getpid() = 1984 [1983]
setustack(0xFFFFFFFF7EE002C0)
fstat(2, 0xFFFFFFFF7FFFDAA0) = 0
This is a test.
write(2, " T h i s i s a t e".., 16) = 16
open("somefile.log", O_WRONLY) = 3
Return value is write(2, " R e t u r n v a l u e".., 16) = 16
3.
write(2, " 3 .\n", 3) = 3
_exit(0)

我想 Hook open 系统调用并在 open 调用完成之前执行一些代码。我已经阅读过有关使用 ptrace 来执行此操作的信息,但是我在此系统(solaris)上没有 sys/ptrace.h。我看到文档指出应该使用/proc 调试接口(interface)而不是 ptrace(),但我无法弄清楚如何使用 procfs 执行我想要的操作。

有人知道这是否可行吗?如果是这样,怎么办?

作为旁注,我还尝试使用 LD_PRELOAD 技巧在我自己的共享库中实现开放系统调用,并让它调用 dlsym 来查找常规开放系统调用的地址。我无法 100% 弄清楚为什么这不起作用,但它似乎与内联调用以及不使用地址表来查找这些函数有关。然而,truss 能够以某种方式检测对 open() 的调用。

这是我的尝试代码:

catwrapp_open.c

#define _GNU_SOURCE

#include
#include

static int (*next_open) (const char *path, int oflag, /* mode_t mode */) = NULL;

int open(const char *path, int oflag)
{
char *msg;

if(next_open == NULL) {

fprintf(stderr, "wrapping open\n");

next_open = dlsym(RTLD_NEXT, "open");

if((msg = dlerror()) != NULL) {
fprintf(stderr, "open: dlopen failed: %s\n", msg);
} khác {
fprintf(stderr, "open: wrapping done\n");
}

}

fprintf(stderr, "open: opening %s\n", msg);
fflush(stderr);

return next_open(path, oflag);
}

sử dụnggcc -fPIC -shared -Wl,-soname,libwrap_open.so.1 -ldl -o libwrap_open.so.1.0编译sử dụng LD_PRELOAD_32=./libwrap_open.so.1.0 ./test

执行

我在这里没有从共享库中获得任何输出。仅正常程序输出。

感谢任何帮助或指示。提前致谢。

câu trả lời hay nhất

我的错误比你想象的更愚蠢。

这是我的编译命令

gcc -g -m64 -fPIC -shared -ldl -o libwrap_open64.so.1.0

这是正确的命令

gcc -g -m64 -fPIC -shared -ldl -o libwrap_open64.so.1.0 wrap_open.c

我猜第一个命令会构建一个没有任何内容的库。我通过运行 nm -g libwrap_open64.so.1.0 发现了问题,并发现我的函数没有被导出。在我意识到我什至没有编译我的代码之前,我有点困惑......

关于c - 跟踪/包装开放系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19254408/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress