2012-09-10 27 views
4

我需要編寫一些需要在32位和64位體系結構之間不同的gdb宏。 我正在尋找一種方法來確定在gdb中調試的可執行文件是32位還是64位。gdb宏來確定已調試程序的體系結構

信息目標包括關於文件類型

例如信息文件類型elf32-i386

但是這是嵌入在一個較長的輸出。

作爲gdb宏的新手,我不知道如何處理那個輸出,或者找到另一種方法來獲取它。

請暫時不要python gdb。

回答

-1

請暫時不要python gdb。

我不相信你可以實現你想要的不蟒蛇-GDB,它是瑣碎達到你想要做什麼用。所以考慮放寬你的限制。

+0

那麼,如何在Python中的例子? – dbbd

+0

@dbbd完成! http://stackoverflow.com/a/33222010/895245 –

1

其實,我發現了一個非常簡單的答案

if sizeof(unitptr_t) == 4 
    set $arch = 32 
else 
    set $arch = 64 
end 
+0

您已經找到了與您所提問題不同的問題的答案。祝你好運,使用這種方法區分elf32-i386和elf32-ppc。 –

+0

是不是'unitptr_t'是一個錯字?這不應該是'uint'而不是'unit'?另外,爲什麼使用'sizeof(uintptr_t)'而不是'sizeof(void *)'或甚至'sizeof(unsigned int *)'?後者可能對C,C++和Objective-C更好,不僅包括C++ 11和C99,而且還包含「」。 – mormegil

3

這裏是您的解決方案,而不是 '污染' 的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)。請享用!

+0

非常好,謝謝。它也回答瞭如何處理gdb輸出的一般問題。 – dbbd