簡體   English   中英

Linux內核:當前的宏工作

[英]Linux kernel : Current macro working

關於Linux內核中當前宏的工作(我指的是ARM體系結構)

當前宏的代碼:

return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));

這意味着struct thread_info位於堆棧的頂部?

這是來自linux Kernel開發的第3版:

struct thread_info位於堆棧的底部(對於向下增長的堆棧)和堆棧頂部(對於成長的堆棧)。

如何通過覆蓋來阻止這個struct thread_info

THREAD_SIZE是一個冪為2的常量,它給出了為線程堆棧分配的內存量。

  • 表達式~(THREAD_SIZE - 1)然后給出一個位掩碼來刪除實際的堆棧地址。 例如。 對於8 kB堆棧,它將是0xffffff00。

通過按位並使用堆棧指針值, 我們得到為堆棧分配的最低地址

堆棧指針對於獲取線程信息很有用,因為每個線程總是有自己的堆棧。

它不受保護,不會被超限。

如果堆棧變得太大(堆棧溢出),它首先超出的是`struct thread_info,這很快會導致各種令人討厭的失敗。

因此在編寫內核代碼時,盡量使用盡可能少的堆棧空間,以避免溢出。

指向線程struct thread_info指針放在內存的底部,該內存是為線程的內核堆棧保留的。 (每個線程都需要自己的堆棧,因此保證堆棧指針的值對於每個線程都是唯一的。)

沒有特殊的保護機制來防止覆蓋此指針,除了內核代碼不占用太多空間(並且中斷被切換到它們自己的堆棧)這一事實。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM