故障查找或查找

问题描述 投票:0回答:1

我有这段代码,有人可以向我建议任何可能使代码崩溃的输入字符串,可能使代码通过分段错误

#define POLYNOMIAL 0x04c11db7L
uint32_t crc_table[256];

int win()
{
  printf("Great Job\n");
  exit(0);
}


void gen_crc_table()
{
 uint16_t i, j;
 uint32_t crc_accum;

 for (i=0; i<256; i++)
  {
    crc_accum = ((uint32_t)i << 24);
    for (j = 0;j < 8; j++)
    {
        if (crc_accum & 0x80000000L)
            crc_accum = (crc_accum << 1) ^ POLYNOMIAL;
        else
            crc_accum = (crc_accum << 1);
    }
    crc_table[i] = crc_accum;
   } 
}

uint32_t update_crc(uint32_t crc_accum, uint8_t *data_blk_ptr, uint32_t data_blk_size)
{
 uint32_t i, j;

for (j=0; j < data_blk_size; j++)
{
    i = ((int) (crc_accum >> 24) ^ *data_blk_ptr++) & 0xFF;
    crc_accum = (crc_accum << 8) ^ crc_table[i];
 }
  crc_accum = ~crc_accum;
  return crc_accum;
}


int main()
{
  char buffer[256];
  unsigned long long target;

  scanf("%256s", buffer);
  gen_crc_table();
  if (update_crc(-1, buffer, sizeof(buffer)) == 0x4920cbc3)
  {
    memcpy(buffer + 128, buffer, sizeof(buffer));
  }
  exit(1);
 }

我曾尝试使用这种输入,但我仍然无法在这段代码中遇到任何错误。

abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456G78JTUZABCDLMNOP defghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGXVjKRSTUVKLMNO opqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

segmentation-fault fault
1个回答
0
投票

我曾尝试使用这种输入,但我仍然无法在这段代码中遇到任何错误。

您需要准备输入,

update_crc()
将返回特定值
0x4920cbc3
.

“手工”“随机”猜测不太可能产生这样的输出。您可能想在程序中尝试随机输入并检查结果的预期值。

由于 CRC 不是加密强哈希,您应该能够在不枚举所有可能的 (22048`) 输入的情况下找到这样的输入。

您可能可以使用所有可能的 ASCII 输入来开始搜索。

© www.soinside.com 2019 - 2024. All rights reserved.