2013-05-03 169 views
0

因此,最近我一直在做大量的汇编工作,并且我发现它不得不继续输入x/d $ eax,x/d $ ecx,x/t ...等上。我编辑我的.gdbinit有:GDB脚本问题

define showall 
printf "Value:\n" 
print $arg0 
printf "Hex:\n" 
x/x $arg0 
printf "Decimal:\n" 
x/d $arg0 
print "Character:\n" 
x/c $arg0 
... and so on. 

我遇到的问题是,当印刷为X/d或其他格式,其失败,该脚本会停止,也不会执行,显示该语句的其余部分其他格式(如果可以的话)。

问题的一个例子:

gdb someFile 
showall $eax 
... 
:Value can't be converted to an integer. 
*stops and doesn't continue to display x/c* 

有没有办法告诉脚本继续,即便是无法显示的格式?

回答

2

我不认为有办法让GDB命令文件解释不会停在第一个错误,但你可以使用Python脚本来做你想做的事情。

保存这examine-all-formats.py

def examine_all(v): 
    gdb.write('Value:\n%s\n' % v) 
    try: 
     v0 = int(v) 
    except ValueError: 
     pass 
    else: 
     gdb.write('Hex:\n0x%x\n' 
        'Decimal:\n%d\n' 
        % (v0, v0)) 
    try: 
     c = chr(v) 
    except ValueError: 
     pass 
    else: 
     gdb.write('Character:\n' 
        '%r\n' % (c,)) 

class ExamineAll(gdb.Command): 
    def __init__(self): 
     super(ExamineAll, self).__init__('examine-all', gdb.COMMAND_DATA, gdb.COMPLETE_SYMBOL) 

    def invoke(self, args, from_tty): 
     for i in gdb.string_to_argv(args): 
      examine_all(gdb.parse_and_eval(i)) 

ExamineAll() 

然后运行:

$ gdb -q -x examine-all-formats.py 
(gdb) file /bin/true 
Reading symbols from /usr/bin/true...Reading symbols from /usr/lib/debug/usr/bin/true.debug...done. 
done. 
(gdb) start 
Temporary breakpoint 1 at 0x4014c0: file true.c, line 59. 
Starting program: /usr/bin/true 


(gdb) examine-all argc 
Value: 
1 
Hex: 
0x1 
Decimal: 
1 
Character: 
'\x01' 
(gdb) examine-all $eax 
Value: 
1532708112 
Hex: 
0x5b5b4510 
Decimal: 
1532708112