繁体   English   中英

我可以将内联 function 编译为共享库,并使用 LD_PRELOAD 作为内联 function 连接到其他可执行文件吗?

[英]Can I compile inline function as shared library, and use LD_PRELOAD to hook to other executable as inline function?

我想将我的共享库挂钩到其他程序二进制文件,挂钩 function 是这样的:

void my_function(void *data){
    bool res = my_function_needed(data);
    if (res){
        // Do my work
    }
    else {
        original_function(data);
    }
}

上钩的 function 将使用我的程序和原始的 function 参数。 问题是,这个function会被如此频繁地调用,性能在这里很重要。 由于我无法在运行时更改 function 调用地址本身(因为这是 function,而不是 function 指针) ,否则必须确定正确的过程。

所以我想,至少,将这些函数(my_function() 和 my_function_needed())作为内联函数来减少 function 调用开销。 是否有可能使代码真正内联在动态库挂钩中?

获取 function 内联的方法是将 function 源提供给编译器,并允许它内联到调用 ZC1C425268E68385D1AB5074C17A94F14 的内容中。 在我熟悉的所有 C 和 C++ 编译器中,这必须发生在编译的代码生成阶段之前,通常是在解析之后的某个时间。 动态链接库或静态链接库都是生成的可以使用的代码体; 但是,此代码不会内联到正在编译的其他代码中。 它在 static 库的链接时编译之后或在操作系统加载程序将程序加载到 memory 时链接。

如果您希望 function 可能被内联,则通常在 C 或 C++ ZC09749FB95346E1257Z 文件中提供它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM