簡體   English   中英

C,獲取給定指針的內存段

[英]C, get the memory segment given the pointer

是否有可能獲得給定指針/次地址值的內存段。

GDB中已經有可用的解決方案了嗎? 如果不是定制的gcc(非便攜式)功能實現也應該很好。

例如:

int data = 100;
int main(void) {
   int ldata = 100;
   int *hdata = malloc(10 * sizeof(int));
}

getMemSeg(&data)  should return "DATA"
getMemSeg(&ldata) should return "STACK"
getMemSeg(hdata)  should return "HEAP"

您可以閱讀/proc/self/maps來查看進程的內存布局的詳細信息。 AC庫中有一個符號,指示堆的開始。 在glibc中,它稱為_end 而且,堆棧中的所有內容始終都低於當前堆棧幀中的所有內容(至少在x86和其他處理器中堆棧向下增長的位置)。 因此,至少對於一個簡單的程序,這些啟發式將起作用:

extern int _end;

const char* getMemSeg(void* p){
   int stackframe;
   if(p>(void*)&stackframe)
      return "STACK";
   if(p<(void*)&_end)
      return "DATA";
   return "HEAP";
}

暫無
暫無

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

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