Tracker | Dll Injected
前天在某推看到 在一年前(subtee)发现了
Tracker.exe用于启动一个进程,并在创建之后将FileTracker.dll注入到该进程中。跟踪目标进程的文件访问,并在进程退出之前写入.tlog文件。
但是,如果多个线程(具有相同的中间目录)并行地(通过Tracker.exe)并行启动同一目标可执行文件的多个实例,则所有这些进程将尝试写入同名的.tlog文件* *当他们退出。如果足够的进程并行运行,这种竞争条件不可避免地导致其中一个无法打开文件进行写入(因为另一个实例已经打开),导致错误FTK1011:
FileTracker:错误FTK1011:无法创建新文件跟踪日志文件:C:\ … \ tlogs \ ipconfig.read.1.tlog。该文件存在。
我在实际应用中观察到了这一点,并将其简化为一个简单的自包含的测试用例。只需运行它,并等待控制台中出现错误(可能需要两到三次尝试,但通常至少发生一次)。
请注意,Visual Studio设法通过巧合来避免这种竞争条件 - 在构建一个包含许多C ++文件的项目时,构建系统不是同时启动多个cl.exe实例,而是构建系统启动一个实例并将所有C ++文件(然后cl.exe使用多个线程并行编译)。
详细信息
正好也是在这个月推主发推了
自己也复现了一下
最后也是感谢两位 Yansu 、 V@1n3R. 给我的帮助, 最终一起能复现出这个bug。
我已打包上传到 GitHub 上了 https://github.com/demonsec666/Tracker
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Demon!