大佬教程收集整理的这篇文章主要介绍了防止“ld -wrap”循环引用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
例
目标是包装在Program Foo中发生的读取@L_673_1@.此代码可以重新编译/重新链接,但不能修改.
节目Foo
@H_724_13@main() { ... read(fd,buf,sizE); ... }
这里的包装器将在使用“-wrap read”时拦截对程序Foo中libc读取的@L_673_1@.
包装纸
extern int __real_read(...); int __wrap_read(...) { bar(); __real_read(...); }
但是,从包装器@L_673_1@的Library Bar需要使用libc的read()函数而不经过包装器(从而导致循环依赖).
图书馆酒吧
void bar(void) { read(fd,sizE) }
更改库栏中的所有包装例程以使用__real_read()不是一个选项,因为库栏中对外部库的附加@L_673_1@中存在的间接级别是任意的.
避免标志
解决此问题的一种方法是使用每线程标志来防止源自Library Bar的包装读取重新进入库.虽然我不想使用这个解决方案,但我也愿意接受有关如何在包装器和条形库中使用最少的代码更改来实现此解决方案的建议.
理想解决方案
???这就是为什么我问这个问题:)
谢谢…
-n
以上是大佬教程为你收集整理的防止“ld -wrap”循环引用全部内容,希望文章能够帮你解决防止“ld -wrap”循环引用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。