2012-06-29 53 views
0

我在x86-64上使用Linux。在用戶程序開始執行代碼之前(但在加載器/鏈接器映射庫之後),我需要插入一個系統調用(本質上需要一個陷阱到OS)。有沒有人有建議要達到這個需要二進制修改/重新編譯沒有最好的方法是什麼?主要調用系統調用

+3

爲什麼你想要做這樣的事情,而不需要二進制修改?對我來說,這聽起來像你想創建一個軟件,然後你會分發和監視人的一些跟蹤軟件... xD,但請糾正我,如果我錯了:) – evotopid

回答

2

使用LD_PRELOAD環境變量在libc之前加載自定義庫,該庫將攔截對__libc_start_main的調用,_start似乎用於開始實際的main()函數。

或者像調試器那樣使用ptrace()附加到進程。

+0

我一直在玩這一點。如果我定義了自己的__libc_start_main(),那麼調用它很容易,並且使用dlsym和RTLD_NEXT查找原始地址似乎可行,但到目前爲止,我還沒有能夠調用原始或返回。我懷疑這是因爲我沒有找到正確的函數簽名,所以我正在破壞堆棧。在eglibc源代碼中找到這個函數的實際定義並不容易。 –