|
帖子沉的好快。
目前在驱动部分发现了一个有可能导致这个问题发生的地方,看代码:
pDstOffset += sprintf( pDstOffset, "%02X\0", pMemCard->CIDRegister.ManufacturerID );
sprintf( pDstOffset, "%08X\0", pMemCard->CIDRegister.ProductSerialNumber );其中pDstOffset指向的是UCHAR类型长度12的数组,
pMemCard->CIDRegister.ManufacturerID是一个UCHAR变量;
pMemCard->CIDRegister.ProductSerialNumber是一个DWORD变量;
根据驱动部分的代码来看,意图是把ID和SerialNumber放在这个pDstOffset指向的数组中,
假设ID为0x18;SerialNumber为0x12345678;估计代码想在执行完之后有下面的形式:
1,8,'\0',1,2,3,4,5,6,7,8,'\0'。
可是通过上面的代码执行完之后呢,实际应该是:
1,8,1,2,3,4,5,6,7,8,'\0',XXX。
从上面的结果看,是代码在这里的偏移少了一个UCHAR的空间。而后果就是最后留下了一个XXX的数据。
这个数据就是数组分配时的初始值,如果没有给初始化值的话就不知道是个什么值了。那么就会在调用
Memcmp的时候返回不同了。而且看了这部分驱动的代码,确实是没有初始化这个Buffer。
上面的代码我利用VC验证过,的确有这种可能性。而且目前还没有在设备上得到验证。
各位高手请帮忙看看,有没有可能会是我提到的这种情况所导致的。
这里还有点疑问,就是这部分代码都是微软SDMEMORY部分的,我们也未做修改,如果真是由上面提到的所引发的
那么在项目上应该很早就会出这种问题,还是说这种情况几率非常小?对于内存管理这部分还没有仔细研究过,有
经验的高手能不能指点一下。
明天加班验证一下上面的疑点,希望运气好就是它。这样也能快点解掉这个BUG。
|
|