dlopen dlsym dlclose等linux下的动态库

1、dlsym查找的时候一定要注意函数名,需要在编译so的时候,使用extern "C"{},不然编译出来的名字是c++的,容易查不到

2、如果想要覆盖系统函数,比如像覆盖socket,read,write等,可以使用自己定义这些函数,然后在函数里,调用真正的系统函数,为了防止编译错误,只能动态调用。dlsym(RTLD_NEXT,"socket"),这个RTLD_NEXT就是专门为覆盖动态库而提供的,它会自动查找下一个shareObject的函数,跳过本so文件的定义。这样还能覆盖一些malloc等其他函数,做统计之类的。结合环境变量 LD_PRELOAD

具体参考:https://github.com/Tencent/libco/blob/master/co_hook_sys_call.cpp

猜你喜欢

转载自blog.csdn.net/zhjzhjxzhl/article/details/79743486
今日推荐