【发布时间】:2015-11-17 17:28:20
【问题描述】:
我正在尝试使用 Go 在 linux 中挂钩 fopen 系统调用。
通常我会使用 C 来完成类似的事情(例如:https://stackoverflow.com/a/880278/5572976),但 CTF 声明解决方案需要用 Go 编写。
我查看了 syscall 包,基本上我正在寻找的是在 Go 中使用以下内容。
dlsym(RTLD_NEXT, "open");
编辑:那是 open,而不是 fopen。
【问题讨论】:
-
这听起来很像那种需要更多细节的问题,因为我几乎可以肯定有更好的方法可以实现您实际想要完成的任务。跨度>
-
@ZanLynx 我想要完成的是使用 LD_PRELOAD 全局挂钩 fopen 系统调用并更改具有特定名称的文件的输出。只要提交的代码是 Go,就可以使用混合 C 和 Go 的库。
-
您只是在很大程度上重申了您的问题。唯一的新位是“更改具有特定名称的文件的输出”。看起来更像是
inotify的工作。 -
你也不能在 Go 中挂钩
fopen,因为 Go 甚至不使用 C 库。当 Go 进行系统调用时,它会直接调用操作系统内核。 -
为了帮助可能对您的问题感到困惑的人,(就像我一样),请始终更正您的问题;我认为它应该到处都说 open,而不是 fopen 和 open 的混合。对吗?
标签: linux go system-calls