簡體   English   中英

按偏移量查找成員

[英]Find member by offset

我有一個(大)類,並且該類有一個偏移量。 如何有效地找到在該偏移量處定義的成員?

例:

struct Dummy {
    int a, b, c;
}

給定偏移量4並假設sizeof(int) == 4 ,我想得到'b'。

顯然,我不想在運行時執行此操作,因此我已經使用nmobjdumpgdb已有一段時間了,但是沒有做到這一點。

今天早些時候有同樣的問題,

我能找到的最合適的工具是pahole 用法示例:

$ cat dummy.cpp
#include <string>

struct Dummy {
    int a, b, c;
    std::string d;
};
struct Dummy x; // gcc doesn't emit debug info for unused stuff
$ g++ -c dummy.cpp -ggdb3
$ pahole dummy.o
die__process_class: tag not supported (template_type_parameter)!
//trimmed structs __va_list_tag, tm and lconv
struct Dummy {
    int                        a;                    /*     0     4 */
    int                        b;                    /*     4     4 */
    int                        c;                    /*     8     4 */
    string                     d;                    /*    16     8 */
    //trimmed some constructors
};

不幸的是,它不打印模板內容,例如std :: string aka std :: basic_string <char>。

我還發現了pstruct (比pahole更容易混淆,根本不接受C ++), Clang -cc1 -fdump-record-layouts (它給了我一堆指向Clang地址空間的指針,但沒有偏移量)和MSVC -d1reportAllClassLayout (當我嘗試時,該標志沒有區別)。

或手動方法:

將結構記憶設置為零,將相關偏移設置為0xFF,在gdb中打印結構(使用set print pretty on這樣就不會將所有內容都放在一條大行上),對非零值進行grep輸出,並希望STL漂亮打印機不要太困惑。

也許我應該制作一個GDB模塊來自動執行此操作,無論我做什么都非常乏味...

暫無
暫無

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

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