lua中的ffi是如何解析的呢?
拿bcc中对proto的解析说起;
metatype是有大学问的:
ffi.metatype(ffi.typeof(‘struct ip_t‘), { __index = { -- Skip IP header length (stored as number of words) -- e.g. hlen = 5, Header Length = 5 x sizeof(u32) = 20 octets -- Mask first nibble and shift by 2 (multiplication by 4) icmp = function(e, dst) next_offset(e, dst, ffi.typeof(‘uint8_t‘), 0, 0x0f, 2) end, udp = function(e, dst) next_offset(e, dst, ffi.typeof(‘uint8_t‘), 0, 0x0f, 2) end, tcp = function(e, dst) next_offset(e, dst, ffi.typeof(‘uint8_t‘), 0, 0x0f, 2) end, } })
其中,ip_t就是
_G(pkg) 这是变量的最后一道屏障,如果在这里访问不到变量,那么lua就要报错了!
lua中的表真是高度抽象的一个概念:
pkg.ip.proto, pkg是全局的包,然后ip是这类变量的回调函数,proto又是ip的局部变量
在函数中metatype(‘struct net_t‘) 是一个
pkt是一个全局变量表示数据包,那么这个pkt变量是如何赋值的呢?