新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式系統(tǒng)中進程間通信的監(jiān)視方法

        嵌入式系統(tǒng)中進程間通信的監(jiān)視方法

        作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏
                             else {  /* Syscall exit */
                                 Syscall_entry = 0;
                             }
                         }
                         ptrace(PTRACE_SYSCALL, traced_process, NULL, NULL);
                      } /* while */
         
                                   return 0;
                              }  /* main */

        被監(jiān)視進程的 trace 標志被激活后,它的每一次系統(tǒng)調(diào)用都會被內(nèi)核檢查。我們程序也隨之被內(nèi)核用信號通知。使用參數(shù) PTRACE_GETREGS 的 ptrace() 將獲得截獲的系統(tǒng)調(diào)用的參數(shù)。最重要的參數(shù)是系統(tǒng)調(diào)用號。它保存在了 u_in.orig_eax 中。通過系統(tǒng)調(diào)用號,我們可以確定發(fā)生的是那一個系統(tǒng)調(diào)用。系統(tǒng)調(diào)用號可以在 Linux 的源代碼中查找。它的定義在 linux-source-2.6.xx/arch/x86/kernel/syscall_table_32.S 中。它的部分代碼如下所示:

        本文引用地址:http://www.104case.com/article/201610/305865.htm
                    .long sys_fstatfs       /* 100 */
                    .long sys_ioperm
                    .long sys_socketcall
                    .long sys_syslog

        在這里,我們最關(guān)心的是 sendto 系統(tǒng)調(diào)用。在 Linux 的內(nèi)核中, sendto 的真實入口是 socketcall 系統(tǒng)調(diào)用。它是 bind , sendto 等socket相關(guān)系統(tǒng)調(diào)用的入口。在這個系統(tǒng)調(diào)用中,通過一個 call number來區(qū)分出 bind , sendto 等不同的子系統(tǒng)調(diào)用。在我們的程序中,這個 call number 保存在 u_in.ebx 中。 從上面的 syscall_table_32.S 示例代碼就可以看出, socketcall 的系統(tǒng)調(diào)用號是102(從100向下數(shù)兩行)。而 call number 則在 net.h 有定義,我們關(guān)心的 sendto 的 call number 被定義為 SYS_SENDTO ,其絕對值為11。有了這兩個重要的數(shù)據(jù),我們的程序據(jù)此判斷當前發(fā)生的系統(tǒng)調(diào)用是否為 sendto 。這一點表現(xiàn)為代碼:

        • <del id="0gim0"><dfn id="0gim0"></dfn></del>
        •              if (u_in.orig_eax == 102  u_in.ebx == SYS_SENDTO)                            
          				
                      
                          
          			
          							

          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          主站蜘蛛池模板: 集安市| 景谷| 阳城县| 潞城市| 吴忠市| 囊谦县| 永和县| 衡阳县| 陵川县| 罗山县| 洛宁县| 安宁市| 册亨县| 玉龙| 井陉县| 石屏县| 仲巴县| 鹿邑县| 扎兰屯市| 托克逊县| 麟游县| 邓州市| 顺平县| 江达县| 仙居县| 天柱县| 扎赉特旗| 都江堰市| 洪雅县| 阳泉市| 兴国县| 仪陇县| 肃北| 顺义区| 闽侯县| 泰安市| 凤冈县| 花莲县| 天水市| 景东| 微博|
          <ul id="0gim0"></ul>
          • <ul id="0gim0"></ul>