.gdbinit
中自动执行以下操作:break boost::uuids::detail::sha1::process_bytes
# When execution stops at the above breakpoint,
# I want to display the contents of `rcx` as a string:
x/s $rcx
c # do not stop here
如何自动执行此操作?
更新:这是一个更好的
.gdbinit
示例:# Our custom-built libcurl, with debugging symbols enabled:
set environment LD_PRELOAD=./curl/curl-7.34.0/lib/.libs/libcurl.so
# File that connects to the evil server:
file ./evil
# Make sure we get notified when it connects!
break curl_easy_setopt
commands $bpnum
clear curl_easy_setopt # to avoid recursion
call curl_easy_setopt(curl, CURLOPT_VERBOSE)
continue
end
此钩子连接到邪恶的二进制文件,并且在初始化其curl句柄时,将其设置为冗长,因此我们可以了解到发生的一切。
谢谢您的回答。
#1 楼
很简单。在您的情况下,您最可能需要的是commands
,可用于创建在遇到断点时运行的“例程”。大致适合您的情况:break boost::uuids::detail::sha1::process_bytes
commands 1
x/s $rcx
continue
end
问题是您需要对断点号进行硬编码。根据GDB版本的不同,您可以使用便捷变量
$bpnum
来解决此问题。因此:break boost::uuids::detail::sha1::process_bytes
commands $bpnum
x/s $rcx
continue
end
也请参见最后一个示例。
注意:使用此方法可能会对CPU造成很大的负担,具体取决于如何通常会调用此方法,以及GDB是否可以使用硬件断点。
还可以使用条件形式的断点。在此处查看实际的权威参考。格式如下:使用
info break
获取断点的编号,然后将其用作bnum
,用于:break ... if cond