-1
我正在做一個項目,我需要完全控制過程的地址空間。我需要將線程的堆棧從當前位置移到我選擇的預定義區域,因爲我需要取消分配原始堆棧內存。我找不到如何做到這一點,只有如何處理堆棧大小,但這不是我所需要的。我有兩個想法如何做到這一點,它們都不是理想的:是否可以在Windows中決定線程的堆棧位置?
- 將ESP和EBP設置爲我的預定義區域,並更新線程TEB中的堆棧基本和堆棧限制字段。這聽起來似乎是一個糟糕的主意,因爲很難知道是否還有其他地方需要更新,更不用說內核在內部保存有關堆棧位置的簿記信息的可能性。
- 隨處存儲內存,基本上強制新線程的堆棧分配到我剩下的可用空間中。我知道這是一個可怕的想法。
是否有可能做到這樣的事情?它不一定是同一個線程。
編輯:任何事情只要我釋放原始堆棧並決定新/舊堆棧的新位置,就會執行任何操作。因此,複製/移動堆棧,殺死舊線程並在預定位置使用堆棧啓動新線程等應該會很好。我不需要舊的線程,我只需要一種方法來強制線程在某個位置運行(已解決),並將其堆棧放在由我決定的安全位置。所以在這種情況下,丟棄舊的堆棧數據就好了,因爲目前我不依賴它。
是否允許您分配自己的內存,在那裏建立一個堆棧並使用它,而不是試圖「移動」現有的堆棧?因爲你真的不能這樣做。但是,你可以複製它。 –
你想在哪一點移動線程堆棧?如果在線程開始在用戶模式下執行之前或者在線程EP開始執行之前 - 如果可能的話。但隨機的時候,線程已經執行 - 100%是不可能的。例如如何使用指向棧中變量的指針?和主要 - 什麼意義嘗試這樣做? – RbMm
簡單的答案是否定的。 –