逃避探测功能
Escaping probefunc
我在我的应用程序中列出了探针:
sudo dtrace -p "$(pgrep run)" -ln 'pid$target:QtCore:*sendPostedEvents*:entry {}'
ID PROVIDER MODULE FUNCTION NAME
8037 pid53854 QtCore QCoreApplication::sendPostedEvents(QObject*, int) entry
8038 pid53854 QtCore QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) entry
我想跟踪函数的入口探针QCoreApplication::sendPostedEvents(QObject*, int)
。但是函数名中有些字符我无法表达dtrace 探测说明符。
例如,我不能只输入它而不以某种方式转义它(因为冒号在 DTrace 探测说明符中是有意义的):
sudo dtrace -p "$(pgrep run)" -n 'pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*, int):entry { ustack(3); }'
dtrace: invalid probe specifier pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*, int):entry { ustack(3); }: invalid probe description "pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*": Overspecified probe description
我试过使用反斜杠、单引号、双引号进行转义。是否可以通过名称指定此探测函数?
我不能使用通配符; *sendPostedEvents*
匹配 QCoreApplicationPrivate::sendPostedEvents
,这是我不想要的。
我怀疑我是否也可以依赖探测器 ID,因为这是 PID 提供程序(我希望探测器 ID 在随后的代码编译中发生变化)。
您可以使用 ?
通配符来匹配单个字符:
sudo dtrace -p "$(pgrep run)" -n 'pid$target:QtCore:QCoreApplication??sendPostedEvents*:entry { ustack(3); }'
问号将匹配“::”但不匹配 "Private::"。
我在我的应用程序中列出了探针:
sudo dtrace -p "$(pgrep run)" -ln 'pid$target:QtCore:*sendPostedEvents*:entry {}'
ID PROVIDER MODULE FUNCTION NAME
8037 pid53854 QtCore QCoreApplication::sendPostedEvents(QObject*, int) entry
8038 pid53854 QtCore QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) entry
我想跟踪函数的入口探针QCoreApplication::sendPostedEvents(QObject*, int)
。但是函数名中有些字符我无法表达dtrace 探测说明符。
例如,我不能只输入它而不以某种方式转义它(因为冒号在 DTrace 探测说明符中是有意义的):
sudo dtrace -p "$(pgrep run)" -n 'pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*, int):entry { ustack(3); }'
dtrace: invalid probe specifier pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*, int):entry { ustack(3); }: invalid probe description "pid$target:QtCore:QCoreApplication::sendPostedEvents(QObject*": Overspecified probe description
我试过使用反斜杠、单引号、双引号进行转义。是否可以通过名称指定此探测函数?
我不能使用通配符; *sendPostedEvents*
匹配 QCoreApplicationPrivate::sendPostedEvents
,这是我不想要的。
我怀疑我是否也可以依赖探测器 ID,因为这是 PID 提供程序(我希望探测器 ID 在随后的代码编译中发生变化)。
您可以使用 ?
通配符来匹配单个字符:
sudo dtrace -p "$(pgrep run)" -n 'pid$target:QtCore:QCoreApplication??sendPostedEvents*:entry { ustack(3); }'
问号将匹配“::”但不匹配 "Private::"。