在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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变量是如何赋值的呢?
|
请发表评论