如何从 ELF 文件中挂接 c 函数,该文件在 Linux 中使用库 .so?

How can I hook c function from ELF file, that uses library .so in Linux ?

我有可执行的 ELF 文件,它使用库 lib.so,这个 ELF 从 lib.so

调用函数 Func1

我需要 hook 这个函数,所以它会被我的函数替换,做别的事情。如何在不更改此可执行文件的情况下执行此操作?

看看LD_PRELOAD。该环境变量可以设置为一个 elf 共享对象,它将被注入到您的可执行文件的地址 space 中。该预加载对象中的函数可以替换其他对象中的函数。在您的情况下,只要未构建 lib.so -Bsymbolic,这就可以工作。符号 linker 选项解析 link 传递中的内部调用。因此,如果 lib.so 包含并调用 func1 并构建 -Bsymbolic,那么替换该调用非常棘手,您可能最终不得不更改 lib.so.