dwarf

    2熱度

    3回答

    在DWARF2調試格式中,藉助.debug_frame部分中的CFI(調用幀信息)支持堆棧展開。這恰恰是一個表格,它爲每個寄存器在前一幀中保留一個規則來獲取它的值。但是,所有這些規則都依賴於寄存器在某個位置保存在堆棧中的事實。 當沒有幀指針時,在前一幀寄存器中獲取堆棧指針的值時不適用。在這種情況下,堆棧指針可能不會保存在堆棧上,而只是通過遞增和遞減值來進行管理。然而,dwarf2(或通常的矮小格式

    4熱度

    1回答

    是否.dSYM資源包含除DWARF信息以外的任何其他信息?我創建了一個應用程序的發佈版本。現在如果我運行它dwarfdump,它說可執行文件沒有DWARF信息(說它是「空的」),這是我所期望的。但是如果我然後運行dsymutil,它會創建非空符號文件。這些是二進制文件,所以我不知道它們是什麼。任何人都可以啓發我嗎?有沒有這些文件的觀衆?

    1熱度

    1回答

    我不明白如何在dwarf2展開堆棧確保在一些非常基本的ABI(應用程序二進制接口)方案中可靠地恢復參數。考慮一個ABI,它表示前三個參數必須在寄存器中,並放在堆棧上。據我所知,dwarf2堆棧展開機制確保如果CFI表被正確填充,可以獲得當前幀的調用點處的寄存器值。但是,這不會讓你進入調用者的序幕,並且知道參數寄存器的內容是什麼。所以,我認爲應該有辦法找到寄存器的值,即使在同一幀中的不同點(在.de

    2熱度

    1回答

    ,我使用CreateEntryBlockAlloca把各種變量納入塊範圍的開頭: template <typename VariableType> static inline llvm::AllocaInst *CreateEntryBlockAlloca(BuilderParameter& buildParameters, const std::string &V

    39熱度

    2回答

    的說明我想要解釋一下GCC生成的彙編中使用的.cfi_def_cfa_offset指令的值。我隱約知道.cfi指令涉及到調用幀和堆棧展開,但我想要更詳細地解釋爲什麼,例如,在GCC輸出的程序集中使用值16和8編譯以下C程序在我的64位Ubuntu機器上。 C程序: #include <stdio.h> int main(int argc, char** argv) { print

    4熱度

    2回答

    我正在尋找一種工具,旨在將一種格式的調試符號轉換爲兼容GDB使用的另一種格式。這似乎是一個單調乏味而且可能很複雜的項目,所以我不確定如何解決它。 Injective我打算將Borland編譯器發出的Turbo Debug Symbol表格(TDS)轉換成類似stabs或矮人格式的東西(看起來像矮人更喜歡我的研究)。但理想情況下,我想將我的工具設計得很容易擴展,以便稍後可以轉換其他格式。例如code

    3熱度

    2回答

    我試圖在Windows下構建libdwarf api,但我收到以下編譯錯誤。 in dwarf_elf_access.c undefined type Elf32_Ehdr, undefined symbol EI_CLASS undefined symbol ELFCLASS64 undefined symbol ELFDATA2LSB ... 我做了所有頭文件和源文件的搜索,我無

    1熱度

    1回答

    是否有可能從ELF可執行文件中獲取結構中某個元素的地址而不編譯調試? 例如,給出下面的代碼: typedef struct { int tokyo; int paris; int london; }cities; cities places; 兩個nm和readelf給變量的 '地方' 的起始地址,並readelf也給出了的sizeof: Num: Valu

    4熱度

    1回答

    我有一個通過內存跟蹤程序執行的應用程序。我試圖使用readelf --debug-dump=decodedline來獲取內存地址/行信息,但我看到的內存地址經常與該轉儲給出的地址不匹配。我寫了一些東西來匹配DWARF數據中出現的「最新」地址的每個地址 - 這似乎清理了一些東西,但我不確定這是否是「官方」解釋這些數據的方式。 有人可以解釋確切的過程,以使用DWARF將程序地址映射到行號嗎?

    0熱度

    2回答

    我想知道使用屬性DW_AT_location進行調試。它是矮人用於調試的屬性之一,但不能真正理解它代表的是什麼。而且當我們編譯代碼時應該何時發出這個屬性。