簡體   English   中英

在 linux 內核中使用正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM