2009-10-27 54 views
5

mprotect的功能按照Linux man page for mprotect功能有3個參數:調用5個參數

int mprotect(const void *addr, size_t len, int prot); 

但一會兒說我分析程序運行ltrace我看到的mprotect被稱爲像這樣:

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)  = 0 

什麼是第四和第五個參數?

編輯:使用ltrace版本0.5。和內核2.6.24-24-通用

感謝

+0

如何第五一? – Cascabel 2009-10-27 19:40:57

+0

對不起,在掃描參數時我錯過了第四個;) – woolagaroo 2009-10-27 19:44:08

+0

strace的版本。哪個版本的linux內核? – Puppe 2009-10-27 19:51:46

回答

7

五是那ltrace如果不能找到函數的配置文件中的描述將打印參數的個數。 (我認爲默認情況下是/etc/ltrace.conf)。

在我的系統上,我可以看到相同的行爲,並且在那裏找不到mprotect,只有SYS_mprotect。

如果您想再次查看ltrace源代碼,則感興趣的地方是output.c,即「func = name2func(function_name);」之後的條件。 - 如果找不到函數名的元信息(在這種情況下name2func中的線性查找返回NULL),將打印5個參數 。

因此,該手冊是正確的,這是ltrace這是「錯誤的」(援引「錯誤的」,因爲技術上的代碼工作,因爲它應該,雖然可能在配置的DEFS應該是固定的)

+0

現在它似乎是'ret-> num_params = 4;'在'build_default_prototype'中。不過,感謝這個評論,它幫助我瞭解了ltrace如何確定來自未知函數的#參數。我希望這會是一些神奇的算法。 – wump 2012-10-30 13:00:21