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++;
}
}
}
指针的一种新理解,形式上的理解