hashcat中的一些写法

1.

for (mask_pos = 0, css_pos = 0; mask_pos < mask_len; mask_pos++, css_pos++)
  {

这里的mask是包含“?”这样的分隔符的,例如?l?a?b这样,

所以定义两个位置,一个mask_pos(代表未解码区的位置),一个css_pos(代表解码区的位置)。

 

2.

 chr |= (u32) hex_convert ((u8) p1) << 0;
 chr |= (u32) hex_convert ((u8) p0) << 4;

利用偏移来进行拼凑。

我之前研究的游戏代码里,也有异曲同工的一个写法。

例如“力量的数值”与“力量的经验值”,就算400力量,5000经验,例如400*1000 + 5000拼凑成400500,

用的时候再用除法分解开,400500/1000是力量,400500%1000是经验值。

 

3.

  u64 *root_stats_buf = (u64 *) hccalloc (SP_ROOT_CNT, sizeof (u64));

  u64 *root_stats_ptr = root_stats_buf;
 
  u64 *root_stats_buf_by_pos[SP_PW_MAX];

  for (int i = 0; i < SP_PW_MAX; i++)
  {
    root_stats_buf_by_pos[i] = root_stats_ptr;

    root_stats_ptr += CHARSIZ;
  }

这是C形式的动态二维数组,等于C++里 new int[SP_PW_MAX][CHARSIZ],

有点复杂啊,不过能更明白数组原理。

 

4.

    for (i = 1; i < PW_MAX; i++)
    {
      uint64_t *out = markov_stats_buf_by_key[0][0];
      uint64_t *in  = markov_stats_buf_by_key[i][0];

      for (j = 0; j < CHARSIZ; j++)
      {
        for (k = 0; k < CHARSIZ; k++)
        {
          *out++ += *in++;
        }
      }
    }

指针的一种新理解,形式上的理解

 

posted @ 2018-07-31 21:46  Rayint  阅读(442)  评论(0编辑  收藏  举报