如何讓Linux進程在固定堆運行

2021/03/19
66
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

我們知道程序在每次運行的時候地址都是不一樣的,linux之所以有這樣的設計也許是為了安全性考慮,不利于黑客的攻擊。

我們看一個簡單的程序:

#include 
#include 

int main(int argc, char* argv[])
{
    int first = 0;
    int *p = malloc(1024);
    printf("p=%pn", p);

    return 0;
}

 

顯然程序每次運行的地址都不一樣!

那么有沒有辦法讓相同程序每次運行的地址都一樣呢?

看到這里你也許會問為什么讓程序每次運行的地址都一樣,這不違背OS設計的初衷了嗎?是的,這的確違背 linux 內(nèi)核設計的初衷。但是實際項目中難免不會遇到奇葩的需求,比如有些app由于歷史的原因需要運行在指定地址上,那這時候就需要把地址空間隨機化關掉。再比如遇到隨機地址crash問題也可以用這種方法debug。

廢話少說,我們看下地址空間隨機化關掉的方法。

echo 0> /proc/sys/kernel/randomize_va_space
or
sudo sysctl -w kernel.randomize_va_space=0

關掉后我們看下該程序的測試結(jié)果:

 

哇!地址一樣!

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

針對嵌入式人工智能,物聯(lián)網(wǎng)等專業(yè)技術分享和交流平臺,內(nèi)容涉及arm,linux,android等各方面。