Jul*_*mur 2 c c++ unix elf abi
我正在尝试在 Linux 上用 C++挂钩recv()
和send()
函数。
我知道如何挂钩函数 (github: zeek/subhook)。但是我想要一些帮助来学习如何查找recv()
或send()
函数的地址(在运行时,或使用独立于版本的解决方案)。
我愿意接受任何可以帮助我理解此处涉及的机制的文档或建议。
[编辑] 澄清:我不想使用,LD_PRELOAD=
因为我用这个工具注入了我的共享库:linux-inject。
基本上,您编写的方法与要挂钩的方法具有相同的签名。在这种情况下send
和recv
。然后将 LD_PRELOAD 设置为指向新库。加载程序将首先找到您的函数并调用它。
在您的库中,您可以包装原始代码、完全替换它、修改输入或输出,基本上任何事情。
有关一些示例代码,请参阅此 turorial dlsym 和 ld preload
发送的一个示例是:
ssize_t (*original_send)(int sockfd, const void *buf, size_t len, int flags);
original_send = dlsym(RTLD_NEXT, "send");
return (*original_send)( /args/ );
Run Code Online (Sandbox Code Playgroud)