如何在Linux系统中钩住文件保存(以显示我的程序对话框,然后与它们一起运行)?在Linux中保存钩子文件
回答
如果您可以编译它们,您可以首先与提供open()的自定义库链接。
有一种做股票的方式。
如果你不能编译它,这个工程的大部分时间:
写入功能_open_posthook,做系统调用(NR_OPEN,...)
提供共享库libopenhook,提供新的开放。除非你想递归,否则Rembember在这里重命名为_open_posthook()。别忘了也提供creat()。
用LD_PRELOAD加载这个库。
编辑:如果你尝试的安全性,这将无法正常工作。你可能会使用strace(),但除非你非常小心,一个坚定的程序员也可以克服这一点。
如果程序确实没有开始使用GUI,这将不会帮助他或她“弹出对话框”。 – bmargulies 2010-04-26 01:05:59
您可以使用某个IPC将消息发送给帮助程序,然后可以显示对话。虽然这很丑陋。我认为这就是Windows访问AV扫描仪通常所做的。使用LD_PRELOAD钩子是不安全的,因为充分确定的应用程序(或者确实是静态链接的)可以绕过它。 – MarkR 2010-04-26 12:40:47
只需使用inotify界面即可获取文件系统更改的通知。请参阅:http://linux.die.net/man/7/inotify
您可以尝试FILE_PRELOAD utility,它们会生成带钩子的C++代码,编译和LD_PRELOAD它。在简短的看了一下之后,你可以感觉到如何轻松地挂接linux。起点是this tutorial。
例如,如果你想改变文件/ tmp的“公开征集” /一些带有的/ tmp/replace_with:
#: FILE_PRELOAD -C "A+f:/tmp/some:/tmp/replace_with" -- bash
#: echo "HaHa" >> /tmp/some
#: ll /tmp/some
ls: cannot access /tmp/some: No such file or directory
#: cat /tmp/replace_with
HaHa
如果你想看到的生成的代码源,只需加上“-p “选项。
#: FILE_PRELOAD -p -C "A+f:/tmp/some:/tmp/replace_with" -- bash
在另外的所有generated.cpp文件,你可以找到在/ tmp/$ USER/FILE_PRELOAD/CPP。
与Linux的钩一个漂亮的打)
生成的代码看起来是这样的:
#include <sys/types.h>
#include <dlfcn.h>
#include <stdio.h>
#include <map>
#include <string>
#define I int
#define C char
#define S string
#define P printf
#define R return
using std::map;
using std::string;
typedef map<S,S> MAP;
static I (*old_open)(const C *p, I flags, mode_t mode);
extern "C"
I open (const C *p, I flags, mode_t mode){
old_open = dlsym(RTLD_NEXT, "open");
P("open hook\n");
MAP files;
files[p]=p;
files["/tmp/some"]="/tmp/replace_with";
S newpath = files[S(p)];
R old_open(newpath.c_str(), flags, mode);
}
# &compile
gcc -w -fpermissive -fPIC -c -Wall file.cpp
gcc -shared file.o -ldl -lstdc++ -o wrap_loadfile.so
LD_PRELOAD=./wrap_loadfile.so bash
nm -D /lib/libc.so.6 | grep open # we hook this syscall
为什么要使用疯狂的定义?......其实,为什么地图,C++,cstr-string转换和其他一切呢? :) – viraptor 2013-06-07 16:39:44
)疯狂的定义,因为我喜欢短文,像[这里](http://nsl.com/papers/origins.htm)。其他с++的东西,因为它有点容易写和理解(我希望)。 – 2013-06-10 05:36:50
- 1. Django用户保存钩子
- 2. 挂钩保存文件对话框
- 3. 如何在自动保存上调用保存后钩子?
- 4. 修改Linux文件,并在Python保存
- 5. 如何保存文件在Linux centos
- 6. 如何在Linux中的文件中保存日志输出
- 7. 在Linux上使用libcurl在Linux中保存绝对路径的文件
- 8. 黄瓜中是否存在@BeforeClass钩子?
- 9. Java。在Linux中以root身份保存文件
- 10. 命令在Linux操作系统上保存MATLAB中的文件
- 11. 检查在Linux和Windows中保存文件的进程
- 12. 预提交钩子在提交文件
- 13. 配置文件夹中的Subversion钩子
- 14. 猫鼬|预保存钩子中的对象更改不会保存到db
- 15. vim打开文件名之前是否存在钩子?
- 16. 用于保存文件的Windows事件挂钩
- 17. MODX在钩子“emailTo”中保留动态邮件地址
- 18. Mongoose预保存钩子触发但未保留数据
- 19. 保存在Linux上的原子文件不会丢失元数据
- 20. 保存帖子时不会调用save_post钩子
- 21. 红宝石DataMapper不保存属性设置在钩子
- 22. SVN钩子不能主动为Linux
- 23. 如何在插件文件中解除WordPress动作钩子?
- 24. 保存文件不保存文件
- 25. 如何添加钩子以保存NetBeans中现有DataObject的事件?
- 26. 将最新文件保存在子文件夹中的批处理文件
- 27. 在Linux中动态添加钩子以处理切换
- 28. Mongoose每次使用预保存钩子保存时都会更改密码
- 29. 比较两个文件,并保存在Linux的差异
- 30. Linux:在文件保存时触发Shell命令
什么样的程序是你想修改? Linux不是Windows,不只有一种程序保存你可以“挂钩”的文件。 – bmargulies 2010-04-26 00:20:45
我很想制作一个程序,它可以将每一个保存在PC上的文件(如图像,音乐,文档或其他东西)挂钩,并强制用户标记它们,最终获得真正的好用和有用的标签收藏。像这样的东西) – peaceprayer 2010-04-27 20:35:22