[英]Use regex in linux kernel
我想在 linux 內核模塊中使用正則表達式。 我准備好了正則表達式,並在用戶空間中使用regex.h
測試了它們。
我知道regex.h
是一個用戶空間庫,但是有內核替代方案嗎?
謝謝!
編輯:我正在嘗試在大學項目的 SMTP 連接中查找 C 代碼。
內核已經有一個正則表達式引擎; 這些函數在kernel/trace/trace.h 中聲明。 它是 linux 跟蹤框架的一部分,可以相對容易地進行調整。 您可以查看當前使用的位置(標識符搜索) 。
另請注意,有人在您之前到達那里。 l7-filter
內核組件基於(除其他外)匹配數據包的正則表達式對 L7 流量進行分類。 他們的正則表達式實現有一個手冊頁。
您還可以使用libipq
通過套接字將數據包傳遞到用戶空間,對它們進行分類,然后將它們傳回。 這是一種更簡單的方法,但速度較慢,顯然不是您想要的(但可能對其他讀者有用)。
linux 內核沒有真正的正則表達式函數。 它只有處理字符串中“*”的函數。
l7-filter內核組件提供了regex函數,但是它的match函數是遞歸的,不適合小棧的內核。
最好的選擇是kpcre 內核組件,它支持無堆棧即時編譯。 它提供 POSIX 正則表達式函數以及 PCRE(perl 兼容正則表達式)函數。
如果您只需要簡單的模式匹配,您還可以使用 glob 匹配功能。
bool __pure glob_match(char const *pat, char const *str)
這是它可以支持的聯機幫助頁: https : //www.man7.org/linux/man-pages/man7/glob.7.html
這是內核代碼中的函數定義: https : //elixir.bootlin.com/linux/latest/source/lib/glob.c
您需要為它包含頭文件"linux/glob.h"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.