我想從現有的struct linux_binprm中提取所有的argv。在內核3.4上,我嘗試了do_excve_common中的這段代碼:http://www.mail-archive.com/[email protected]/msg00278.html,但它不起作用。它返回(null)。什麼是問題,以及如何獲得char *字符串中的所有參數?如何從「struct linux_binprm」獲取argv?
1
A
回答
1
。如果你想在do_execve_common()中執行二進制加載器之前獲得完整的命令行,可以嘗試以下操作: 函數do_execve_common()參數表中有一個參數* argv,爲什麼還要從argv中得到「struct linux_binprm 「?您可以直接使用* argv和以下代碼。在do_execve_common(),插入一些代碼如下:
argc = count(argv, MAX_ARG_STRINGS);
i = 0;
while (i < argc)
{
const char __user *str;
int len;
ret = -EFAULT;
str = get_user_arg_ptr(argv, i);
if (IS_ERR(str))
goto out;
len = strnlen_user(str, MAX_ARG_STRLEN);
if (!len)
goto out;
//copy the str to kernel temporary storage
//NOTE: tmp[] is a string array,
// the memory should have been allocated already for strings storage,
// each string is ended with \0
memcpy(tmp[i], str, len)
}
執行這些代碼後,我想的argv字符串將被所有保存在TMP []數組。
。雖然如果你想在二進制加載器執行後得到完整的命令行,我認爲在這個時候參數頁已經正確設置,那麼你可以嘗試以下方法來獲取完整的命令行: 有一個函數proc_pid_cmdline() ./fs/proc/base.c文件中,您可以重新使用proc_pid_cmdline()函數中的大部分代碼以從參數頁面獲取完整的命令行。
相關問題
- 1. 如何獲得從的argv []
- 2. 如何從ARGV
- 3. linux_binprm中的execve()
- 4. 如何從主C++之外的argv []獲取輸入
- 5. 如何在elixir中獲取struct name?
- 6. 如何在struct中設置/獲取struct結構中的值
- 7. 如何從struct讀取數組?
- 8. 從路徑名獲取文件struct
- 9. 從struct tcp_sock獲取TCP端口號
- 10. 從struct bio獲取設備dev_t
- 11. Elixir從json獲取鍵/值對/ struct
- 12. 如何在Linux內核編程中從'dev_t'獲取'device struct'?
- 13. 如何從一個struct addrinfo獲取我自己的IP地址
- 14. 如何從struct sockaddr生成struct addrinfo?
- 15. 從struct
- 16. 從argv []
- 17. 獲取彙編64的argv [2]地址
- 18. 使用argv獲取命令行?
- 19. 從struct sk_buff提取數據
- 20. 如何獲得argv []作爲int?
- 21. 從內核空間中的給定struct套接字獲取struct文件
- 22. 從ARGV到execvp
- 23. IO :: All:我如何從ARGV和DATA讀取數據?
- 24. py2exe並設置setup.py從argv獲取其目標?
- 25. 如何使用argv
- 26. argv如何填充?
- 27. 如何從其成員的地址獲取struct的起始地址
- 28. 如何從給定的inode獲取路徑名或dentry或struct文件?
- 29. 試圖從struct
- 30. 如何在struct/class中獲取關於「current type」的信息?
工作。大!謝謝。 – gregoiregentil 2013-03-11 06:22:34