【发布时间】:2012-09-14 06:34:04
【问题描述】:
这就是我正在研究的场景:
我有 3 个库 - A、B 和 C。
- 库 A 实现函数
foo()并将其公开为 API。 - 函数
foo()调用POSIXwrite()调用以写入一些数据。 - 库 B 使用链接器 -wrap 选项将包装器写入
write()glibc 调用。 - 库 C 链接到 A 和 B。
库 C 进行的任何 write() 调用都将被包装器拦截
库B。但是,我的问题是,如果库C调用foo(),foo()中的write()调用会被B拦截吗?
【问题讨论】:
-
尝试编写代码,看看会发生什么,这就是我会做的。
-
glibc
write函数是真正系统调用的包装器。 -
谢谢你,@JonathanCruz。这些是我正在谈论的假设库,并且包装库在这种情况下的行为将是决定我是否应该开始编写它的决定因素。但是,我现在正在研究一个较小的测试用例。我只是认为转向 stackoverflow 可能会得到更快的响应:)
-
天啊。关于 SO 的一个好问题。赞成。
-
您可以访问您的库的源代码吗?您是否期待某处出现恶意行为?不要忘记库可以在调用任何函数的情况下执行
write系统调用(特别是包装write(2)系统调用的Glibc 中的write函数)-e.g.只是通过巧妙的asm序列使用sysenter。见stackoverflow.com/a/11609768/841108