簡體   English   中英

在 c 程序中靜態分配一個 memory 地址

[英]Statically assign a memory address in c program

我正在構建非常小的測試程序,我想讓程序每次都訪問相同的 memory 地址(我知道這不是一個好習慣)來模擬一些行為。 我怎樣才能選擇一個 memory 地址在程序中進行硬編碼並嘗試一下? 有沒有辦法查看 memory 地址的未使用塊並阻止它們?

我完全理解這可能會造成不必要的條件/情況。

您可以使用與號ampersand operator (&)將指針指向特定的 memory 地址。 但是,您的程序必須能夠合法地訪問該地址,該地址由您的操作系統分配給您的程序的地址范圍決定,否則您將出現segmentation fault

示例代碼:

void * p1 = (void *)0x28ff44;

或者,如果您希望它作為 char 指針:

char * p2 = (char *)0x28ff44;

附言

您可以找出分配給您的程序的地址,並將其中的一個地址放入您的程序中。 對於單次運行,您的程序將訪問相同的 memory 位置,但對於另一次運行,分配給您的進程的位置將不同,但該運行的位置相同。

您可以參考此處查看如何讀取分配給您的進程的 memory 地址。 您可以在運行時獲取輸入以提供您的process id以獲取文件路徑

解決方法

由於您提到它是small test program ,您還可以通過禁用ASLR測試您的程序來禁用randomization of memory addresses ,您只需使用 linux 禁用 ASLR

echo 0 > /proc/sys/kernel/randomize_va_space

然后運行你的程序,聲明和初始化一個變量,打印它的地址,然后在你的程序中硬編碼這個地址。 答對了。! 每次都將使用該地址,直到您再次啟用 ASLR。

但是關閉 ASLR 並不安全,測試后您應該再次啟用 ASLR

echo 1 > /proc/sys/kernel/randomize_va_space

暫無
暫無

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

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