0%

以logtamper为例学习:python+c的struct

#b计算机基础/e_语言/python/语法
2019年12月23日 下午8:58

python修改linux日志(logtamper.py) - 轻轻的烟雾 - 博客园
使用方法,总结在另一篇文章中: logtamper使用

在logtemper的源码中,我们会看到:

1
2
3
4
5
LAST_STRUCT = ‘I32s256s'
LAST_STRUCT_SIZE = struct.calcsize(LAST_STRUCT)

XTMP_STRUCT = ‘hi32s4s32s256shhiii4i20x’
XTMP_STRUCT_SIZE = struct.calcsize(XTMP_STRUCT)
  1. 我这里就来解释struct是什么?
    1. python中struct 模块用于python数据结构与C结构之间的相互转换
    2. 那么我们就需要学习一下c语言中的struct
      1. C语言字节对齐问题详解 - clover_toeic - 博客园这篇文章讲解的十分全面
  2. 以及‘I32s256s’ ‘hi32s4s32s256shhiii4i20x’定义的是什么?
    1. 他们是:自定义的格式化字节的规则
    2. 这里有一个对应表:struct 模块详解
    3. I32s256s:对应的结构体是:
      • I => (unsigned int) =>4 =>timestamp
      • 32s => char[] => 32*1 => ttyname
      • 256s => char[] => 256*1 => hostname
    4. hi32s4s32s256shhiii4i20x对应的结构体:
      1. h => short => 2
      2. i => int => 4
      3. 32s => char[] => 32*1
      4. 4s => char[] => 4*1
      5. 32s => char[] => 32*1 => username
      6. 256s => char[] => 256*1 => hostname
      7. h => short => 2
      8. h => short => 2
      9. i => int => 4 =
      10. i => int => 4 =
      11. i => int => 4 =
      12. 4i => int => 4 * 4 =
      13. 20x => pad byte => 0 => no value
      14. 注:代码只使用了5,6对应的username和hostname