在之前写一个代码的过程中,没有注意细节,对于一个文件的大小,就默认定义为unsigned int类型了,然后,每次遍历一段之后,就减去遍历的长度,这个unsigned int类型的值,在正常的测试下,并没有出现什么问题,但是到了真正的压力测试,大量的fuzzer来进行测试的时候,出现了一个看起来很奇怪的bug,正数居然比负数小?这是什么原因?我们看看下面的代码:
int v1 = -1;
unsigned int v2 = 5;
if (v2 < v1)
{
printf("error\n");
}
else
{
printf("rigth\n");
}
按照我们的思路,该代码输出的肯定是right,因为很明显5比-1要大。但是最终输出的结果是:
说明在比较的时候,确实-1大于了5?为什么会这样呢?接下来我们来看一段汇编:
int v1 = -1;
00A5180E mov dword ptr [v1],0