簡體   English   中英

使用十六進制內存地址獲取變量的值

[英]Get the value of a variable using the hexadecimal memory address

我只想使用十六進制地址獲取值:

#include<stdio.h>

int main()
{
   int *hold, value=10;
   hold = &value;
   printf("%p",hold);
}

它給了我地址0x7fffd7c24334 我只是想知道 C 或 C++ 中是否有一種方法可以0x7fffd7c24334使用十六進制數0x7fffd7c24334直接獲取“value”的值。 我想變量hold的地址在一段時間內是相同的,因此0x7fffd7c24334仍然指向value ,但我不確定。

假設這個地址在你的程序每次執行時都是一致的,你可以使用這個:

int value2 = *(int*)0x7fffd7c24334;

但請注意,這種假設通常是錯誤的!

函數中局部變量的地址取決於調用函數時執行點的堆棧狀態(SP 寄存器的值)。

它可能在main工作,因為此函數僅被調用一次,並且每次執行程序時 SP 寄存器都應具有相同的值。 但即使它確實有效,只要在value之前添加變量,該地址就會改變。 簡單來說,不要使用這種方法。

printf("%d",*hold);

取消引用並使用%d

您不能依賴十六進制地址。

見這里: http : //ideone.com/RdY4Ni

我認為你可以使用這個:

printf("%x", hold);

暫無
暫無

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

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