2010-03-08 71 views
0

我想獲取我自己使用的vsyscall頁面的地址。我在這裏只有兩個想法:修改編譯器,將其存儲在某個已知位置,然後將其讀入__start或讀取/ proc/[pid]/maps。我真的不想讀取/ proc /,因爲這很慢,應該沒有必要。我也不想編譯器修改。有沒有人有另一種選擇?有一個我應該知道的符號嗎?在Linux用戶空間進程中,vsyscall頁面的地址是什麼?

它在這一點上我試圖將這個功能塞進我作爲這項工作的一部分開發的模塊中的ioctl調用中!

回答

0

這是一個在黑暗中刺傷:

如果你能處理棧開始什麼地址確定,那麼你可以找到可能被其提供給__start的參數。然後,您可以通過將適當類型的指針設置爲來自初始堆棧指針的相應偏移量來訪問參數。

根據文章How main() is executed on Linux , by Hyouck "Hawk" Kim,在調用__libc_start_main之前,__start的前幾條指令將以確定性方式寫入初始參數。

很顯然,像這樣的任何方法都是特定於平臺的,並且如果__start的實現發生更改,則會受到不穩定的影響。

相關問題