• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

如何讓Linux進(jìn)程在固定堆運(yùn)行

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

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

我們看一個(gè)簡(jiǎn)單的程序:

#include 
#include 

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

    return 0;
}

 

顯然程序每次運(yùn)行的地址都不一樣!

那么有沒(méi)有辦法讓相同程序每次運(yùn)行的地址都一樣呢?

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

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

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

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

 

哇!地址一樣!

相關(guān)推薦

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