2012-12-17 60 views
0

内核模块化调试器(kmdb)使用lex生成来自内核空间 [0121]的的词法分析器。有一些黑客,其中一些甚至不是POSIX兼容的。内核空间中的词法分析器生成器

我有疑问:

  1. 什么是在内核模式下使用法陷阱?
  2. 它有没有合理的方法来采用flex [2] [1]?
  3. 什么是内核空间的lex/flex的替代方法?

(在不得已的情况,我要建立和使用Illumos的法,但我真的想避免它)

[1] https://github.com/illumos/illumos-gate/blob/master/usr/src/cmd/mdb/common/mdb/mdb_lex.l

[2] https://github.com/westes/flex/

+0

为什么不能灵活工作? flex不知道它是否为内核空间生成。 –

+0

我有点担心flex I/O,缓冲区等。 – Igor

回答

1

您应该能够使用illumos lex文件中的hacks来从Flex中抢夺I/O的控制权。或者你可以使用flex的字符串缓冲区功能。请参阅flex manual中的yy_scan_string和yy_scan_buffer。

yy_scan_string将导致flex复制字符串,这可能是必需的,因为flex会随着缓冲区的继续而修改缓冲区的内容。如果你不关心这个,并且要避免复制你在一个位置放完全无效的输入而不是一个结束,那么你可以使用yy_scan_buffer

Flex手册中还有一章介绍了如何提供自己的内存分配功能(“Overriding The Default Memory Management”),这可能也是必要的。 Flex不会分配除缓冲区以外的大量内存,并且如果您提供自己的缓冲区,则可以使Flex的缓冲区大小任意小。这应该可以从固定长度的字节数组中分配内存;我不知道你能做到多少,但我猜你应该能够把它缩小到几百个字节,如果你小心的话。

相关问题