我需要編寫一些需要在32位和64位體系結構之間不同的gdb宏。 我正在尋找一種方法來確定在gdb中調試的可執行文件是32位還是64位。gdb宏來確定已調試程序的體系結構
信息目標包括關於文件類型
例如信息文件類型elf32-i386
但是這是嵌入在一個較長的輸出。
作爲gdb宏的新手,我不知道如何處理那個輸出,或者找到另一種方法來獲取它。
請暫時不要python gdb。
我需要編寫一些需要在32位和64位體系結構之間不同的gdb宏。 我正在尋找一種方法來確定在gdb中調試的可執行文件是32位還是64位。gdb宏來確定已調試程序的體系結構
信息目標包括關於文件類型
例如信息文件類型elf32-i386
但是這是嵌入在一個較長的輸出。
作爲gdb宏的新手,我不知道如何處理那個輸出,或者找到另一種方法來獲取它。
請暫時不要python gdb。
請暫時不要python gdb。
我不相信你可以實現你想要的不蟒蛇-GDB,它是瑣碎達到你想要做什麼用。所以考慮放寬你的限制。
其實,我發現了一個非常簡單的答案
if sizeof(unitptr_t) == 4
set $arch = 32
else
set $arch = 64
end
您已經找到了與您所提問題不同的問題的答案。祝你好運,使用這種方法區分elf32-i386和elf32-ppc。 –
是不是'unitptr_t'是一個錯字?這不應該是'uint'而不是'unit'?另外,爲什麼使用'sizeof(uintptr_t)'而不是'sizeof(void *)'或甚至'sizeof(unsigned int *)'?後者可能對C,C++和Objective-C更好,不僅包括C++ 11和C99,而且還包含「
這裏是您的解決方案,而不是 '污染' 的Python:
define set-program-arch
set logging file tmp.gdb
set logging overwrite on
set logging redirect on
set logging on
set pagination off
info target
set pagination on
set logging off
set logging redirect off
set logging overwrite off
shell echo -n 'set $program_arch="' > tmp2.gdb
shell grep 'file type' tmp.gdb | sed "s/\.$//g" | cut -d ' ' -f 4 | tr -d '\n' >> tmp2.gdb
shell echo '"' >> tmp2.gdb
source tmp2.gdb
shell rm -f tmp2.tmp tmp.gdb
end
這臺可變program_arch以ELF類型二進制被調試(例如elf64-x86-64)。請享用!
非常好,謝謝。它也回答瞭如何處理gdb輸出的一般問題。 – dbbd
Python的API示例
frame = gdb.selected_frame()
arch = frame.architecture()
print(arch.name())
樣本輸出:
i386
爲一個32位的ELFi386:x86-64
爲一個64位的ELF文檔:https://sourceware.org/gdb/onlinedocs/gdb/Architectures-In-Python.html
在GDB 7.7.1,Ubuntu 14.04 AMD64上測試。
那麼,如何在Python中的例子? – dbbd
@dbbd完成! http://stackoverflow.com/a/33222010/895245 –