compare-sections
命令沒有返回在if
語句中可以使用的值,但下面的代碼可以做你想做的。
首先,定義一個convenience function命名$cmdeval
將執行一個gdb的命令,並返回其輸出作爲一個字符串:
import gdb
class CmdEval(gdb.Function):
"""$cmdeval(str) - evaluate argument string as a gdb command
and return the result as a string.
"""
def __init__(self):
super(CmdEval, self).__init__("cmdeval")
def invoke(self, gdbcmd):
return gdb.execute(gdbcmd.string(), from_tty=False, to_string=True)
CmdEval()
你可以把這個在名爲cmdeval.py
文件,並鍵入(gdb) source cmdeval.py
將其加載到GDB。
其次,由於compare-sections
輸出"MIS-MATCHED"
爲已更改的任何部分,你可以看看使用$_regex
方便的功能,它包含在較新版本的GDB的那個字符串:
(gdb) if $_regex($cmdeval("compare-sections -r"),".*MIS-MATCHED.*")
>echo need to load again\n
>end