如何在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. 在malloc鉤子的文檔中,「保存底層鉤子」是什麼意思?
- 2. Django用戶保存鉤子
- 3. 掛鉤保存文件對話框
- 4. 如何在自動保存上調用保存後鉤子?
- 5. 修改Linux文件,並在Python保存
- 6. 如何保存文件在Linux centos
- 7. gtk +保存文件,同時保留linux中的文件權限
- 8. 全局鉤子JAVA LINUX(Ubuntu)
- 9. 在Linux中爲內存映射文件保留物理內存
- 10. 如何在linux下添加posix鉤子?
- 11. 保存文件子域
- 12. 將幀保存爲文件(linux腳本)
- 13. 如何在Linux中的文件中保存日誌輸出
- 14. Mongoose:預存嵌入文檔的鉤子之前是否預保存父項的鉤子?
- 15. 在Linux上使用libcurl在Linux中保存絕對路徑的文件
- 16. mongoose unique:真正的預保存鉤子調用驗證之前的鉤子
- 17. 黃瓜中是否存在@BeforeClass鉤子?
- 18. 遞歸的Zip文件夾,保存給定的子文件夾(Linux)
- 19. Emacs中的文件擴展鉤子
- 20. 配置文件夾中的Subversion鉤子
- 21. 鉤子文件創建在python
- 22. 預提交鉤子在提交文件
- 23. Linux Shell腳本:在變量/文件中保存命令輸出?
- 24. 命令在Linux操作系統上保存MATLAB中的文件
- 25. Java。在Linux中以root身份保存文件
- 26. 檢查在Linux和Windows中保存文件的進程
- 27. 貓鼬|預保存鉤子中的對象更改不會保存到db
- 28. vim打開文件名之前是否存在鉤子?
- 29. 用於保存文件的Windows事件掛鉤
- 30. MODX在鉤子「emailTo」中保留動態郵件地址
什麼樣的程序是你想修改? Linux不是Windows,不只有一種程序保存你可以「掛鉤」的文件。 – bmargulies 2010-04-26 00:20:45
我很想製作一個程序,它可以將每一個保存在PC上的文件(如圖像,音樂,文檔或其他東西)掛鉤,並強制用戶標記它們,最終獲得真正的好用和有用的標籤收藏。像這樣的東西) – peaceprayer 2010-04-27 20:35:22