亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

Systemtap常規使用方法

2025-04-15 01:50:31
10
0

1. 查看函數參數的方法

直接使用 $變量名即可。

probe kernel.function("do_mmap_pgoff")
       printf("%s(%d) %s (%s)\n",execname(),pid(),$pgoff,$len)
}

2. 查看結構體成員變量

直接結構體變量名->成員名即可,如

probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
        printf("%s(%d) %x\n",execname(),pid(),$info->node)
}

如果結構體是void指針,則需要使用@cast接口進行強制轉換,如

struct fb_info {
...
	void *par;
...
}

probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
        p = @cast($info->par, "struct psb_fbdev")->pfb
	printf("%s(%d) %d\n",execname(),pid(),p)
}

如果還要繼續訪問其中的void指針指向的成員,則需要繼續進行類型轉換,如

probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
 	p = @cast(@cast($info->par, "struct psb_fbdev")->psb_fb_helper->dev->dev_private, "struct drm_psb_private")->pg->stolen_size
	printf("%s(%d) %d\n",execname(),pid(),p)
}

3. 查看函數參數及返回結果

probe process("./test").function("testB").return {
        printf("arg:%s ret:%s\n",$$parms, $$return$)
}

4. 編寫自定義函數

%{ 
   #include <linux/netdevice.h>
%}
private function show_dev:string(skb:long) %{
   struct sk_buff *skb;
   struct net_device *dev;
   skb = (struct sk_buff *)STAP_ARG_skb;
   dev = skb->dev;
   if (dev)
       STAP_RETURN(dev->name);
   else
       STAP_RETURN("unknown");
%}

probe kernel.function("__netif_receive_skb_core").label("drop"){
      printf("0x%04X, net is: %s\n", ntohs($skb->protocol), show_dev($skb));
} 

5. 更多使用說明請查看 systemtap官方文檔。

0條評論
作者已關閉評論
GuoJin
7文章數
1粉絲數
GuoJin
7 文章 | 1 粉絲
原創

Systemtap常規使用方法

2025-04-15 01:50:31
10
0

1. 查看函數參數的方法

直接使用 $變量名即可。

probe kernel.function("do_mmap_pgoff")
       printf("%s(%d) %s (%s)\n",execname(),pid(),$pgoff,$len)
}

2. 查看結構體成員變量

直接結構體變量名->成員名即可,如

probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
        printf("%s(%d) %x\n",execname(),pid(),$info->node)
}

如果結構體是void指針,則需要使用@cast接口進行強制轉換,如

struct fb_info {
...
	void *par;
...
}

probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
        p = @cast($info->par, "struct psb_fbdev")->pfb
	printf("%s(%d) %d\n",execname(),pid(),p)
}

如果還要繼續訪問其中的void指針指向的成員,則需要繼續進行類型轉換,如

probe kernel.statement("fb_mmap@drivers/video/fbmem.c:1357")
{
 	p = @cast(@cast($info->par, "struct psb_fbdev")->psb_fb_helper->dev->dev_private, "struct drm_psb_private")->pg->stolen_size
	printf("%s(%d) %d\n",execname(),pid(),p)
}

3. 查看函數參數及返回結果

probe process("./test").function("testB").return {
        printf("arg:%s ret:%s\n",$$parms, $$return$)
}

4. 編寫自定義函數

%{ 
   #include <linux/netdevice.h>
%}
private function show_dev:string(skb:long) %{
   struct sk_buff *skb;
   struct net_device *dev;
   skb = (struct sk_buff *)STAP_ARG_skb;
   dev = skb->dev;
   if (dev)
       STAP_RETURN(dev->name);
   else
       STAP_RETURN("unknown");
%}

probe kernel.function("__netif_receive_skb_core").label("drop"){
      printf("0x%04X, net is: %s\n", ntohs($skb->protocol), show_dev($skb));
} 

5. 更多使用說明請查看 systemtap官方文檔。

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0