加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

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

2021/03/19
96
閱讀需 2 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

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

我們看一個簡單的程序:

#include 
#include 

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

    return 0;
}

 

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

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

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

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

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

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

 

哇!地址一樣!

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

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