[英]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.