[英]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.