VS2010调试纯C程序

ggxxjj123 2012-11-16 11:31:28
定义了四个unsigned long int类型的指针并赋为NULL
但调试走过了后 只有三个指针的值显示为0
其中一个显示为0x00000001
如图所示
请指教,谢谢!!

...全文
615 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
qpx1125 2012-11-19
  • 打赏
  • 举报
回复
貌似VS编译Debug版程序时偶尔就会有些奇怪的问题 你给ppritype弄个printf或assert之类的,然后用release版运行一下试试
ggxxjj123 2012-11-19
  • 打赏
  • 举报
回复
引用 22 楼 bluesky12312388 的回复:
这种情况有可能是没有重新编译导致,建议清除已经编译的项目,重新编译一次在看看。 另外,这个调试的结果在Debug下可能有问题,建议打印出实际的值看看。
谢谢 重新编译过无数次 打印也试过
czechliu 2012-11-17
  • 打赏
  • 举报
回复
我还在用VS2005
didijiji 2012-11-16
  • 打赏
  • 举报
回复
清除工程,重新编译一次试试!!!
GS_21 2012-11-16
  • 打赏
  • 举报
回复
你是在调Process Hacker 2 吗?
bluesky12312388 2012-11-16
  • 打赏
  • 举报
回复
这种情况有可能是没有重新编译导致,建议清除已经编译的项目,重新编译一次在看看。 另外,这个调试的结果在Debug下可能有问题,建议打印出实际的值看看。
happyjw 2012-11-16
  • 打赏
  • 举报
回复
恩你在仔细看看,吧调试的各种窗口都打开来看看
ggxxjj123 2012-11-16
  • 打赏
  • 举报
回复
引用 19 楼 happyjw 的回复:
e,还是不清楚,你在问问其他人吧
哎 好吧 谢谢啦 最近在学WIN32汇编 就是还不熟练 不然也说不定能看出来原因在哪了 谢啦
happyjw 2012-11-16
  • 打赏
  • 举报
回复
e,还是不清楚,你在问问其他人吧
ggxxjj123 2012-11-16
  • 打赏
  • 举报
回复
对了 还有点 就是我试着把那几个参数位置换一下 但是就是ppubtype 变量下面的那个变量会被赋值为0x00000001
ggxxjj123 2012-11-16
  • 打赏
  • 举报
回复
我知道啊 只是不是之前感觉 强制转换会有影响吗 我就把它去掉了看看 0x000000001的+号展开后


happyjw 2012-11-16
  • 打赏
  • 举报
回复
你都还没有执行到那儿去,改下面也没用啊 你把那个调试 = 0x000000001的+号展开看下呢
ggxxjj123 2012-11-16
  • 打赏
  • 举报
回复
        /*RSA密钥对生*/        ret = GM_SDF_GenerateKeyPair_RSA(hSessionHandle,*pbits, &ucPublicKey, &ucPrivateKey);         if(0!=ret)             return ret; 
我把这里的hSessionHandle 换成了 (void *)hSession 然后把上面强制类型转换去掉了 也是那样 你说的感觉不太可能 我也感觉不可能啊 怎么会出现这样的问题 但是你看我截的第一张图 确实就是这样的情况 。。。。
happyjw 2012-11-16
  • 打赏
  • 举报
回复
我还是觉得不太可能,刚赋完值,还没执行其他语句就变了
ggxxjj123 2012-11-16
  • 打赏
  • 举报
回复
ggxxjj123 2012-11-16
  • 打赏
  • 举报
回复

CK_RV C_GenerateKeyPair (	CK_SESSION_HANDLE    hSession,
							CK_MECHANISM_PTR     pMechanism,
							CK_ATTRIBUTE_PTR     pPublicKeyTemplate,
							CK_ULONG             ulPublicKeyAttributeCount,
							CK_ATTRIBUTE_PTR     pPrivateKeyTemplate,
							CK_ULONG             ulPrivateKeyAttributeCount,
							CK_OBJECT_HANDLE_PTR phPublicKey,
							CK_OBJECT_HANDLE_PTR phPrivateKey
                        )
{
	CK_RV ret=0;
	CK_ULONG i=0;

	CK_MECHANISM Mec;
	CK_ULONG_PTR pbits=NULL;
	CK_ULONG_PTR ppubclass=NULL;
	CK_ULONG_PTR ppubtype=NULL;
	CK_ULONG_PTR ppritype=NULL;
	CK_ULONG_PTR ppriclass=NULL;

	void * hSessionHandle = (void *)hSession;


	if(NULL==pMechanism)
	{
		return CKR_MECHANISM_INVALID;
	}
	Mec=*pMechanism;

	if((NULL==pPublicKeyTemplate)||(NULL==pPrivateKeyTemplate)||(ulPublicKeyAttributeCount<1)||(ulPrivateKeyAttributeCount<1))
	{
		return CKR_TEMPLATE_INCOMPLETE;
	}


	for(i=0;i<ulPublicKeyAttributeCount;i++)
	{
		if(pPublicKeyTemplate[i].type==CKA_CLASS)
		{
			ppubclass=(CK_ULONG_PTR)(pPublicKeyTemplate[i].pValue);
		}
		if(pPublicKeyTemplate[i].type==CKA_KEY_TYPE)
		{
			ppubtype=(CK_ULONG_PTR)(pPublicKeyTemplate[i].pValue);
		}
		if(pPublicKeyTemplate[i].type==CKA_MODULUS_BITS)
		{
			pbits=(CK_ULONG_PTR)(pPublicKeyTemplate[i].pValue);
		}

	}


	for(i=0;i<ulPrivateKeyAttributeCount;i++)
	{
		if(pPrivateKeyTemplate[i].type==CKA_CLASS)
		{
			ppriclass=(CK_ULONG_PTR)(pPrivateKeyTemplate[i].pValue);
		}
		if(pPrivateKeyTemplate[i].type==CKA_KEY_TYPE)
		{
			ppritype=(CK_ULONG_PTR)(pPrivateKeyTemplate[i].pValue);
		}
	}


	/*入参检测*/
	if(CKM_RSA_PKCS_KEY_PAIR_GEN==(Mec.mechanism))
	{
		if((NULL == ppubclass))
			return CKR_TEMPLATE_INCOMPLETE;

		if((CKO_PUBLIC_KEY != (*ppubclass)) && (NULL != ppubclass))
			return CKR_TEMPLATE_INCONSISTENT;

		if((CKO_PRIVATE_KEY != (*ppriclass)) && (NULL != ppriclass))
			return CKR_TEMPLATE_INCONSISTENT;

		if(NULL != ppubtype)
		{
			if(CKK_RSA != (*ppubtype))
				return CKR_TEMPLATE_INCONSISTENT;
		}
		if(NULL != ppritype)
		{
			if(CKK_RSA != (*ppritype))
				return CKR_TEMPLATE_INCONSISTENT;
		}
		if(NULL == pbits)
			return CKR_TEMPLATE_INCOMPLETE;

		if(1024 != (*pbits)||2048 != (*pbits))
			return CKR_TEMPLATE_INCONSISTENT;
	}
	else
	{
		return CKR_MECHANISM_INVALID;
	}

	/*密钥对生成*/
	if(CKM_RSA_PKCS_KEY_PAIR_GEN == Mec.mechanism)					//RSA密钥对生成
	{

		RSArefPublicKey ucPublicKey;
		RSArefPrivateKey ucPrivateKey;

		A_PBASICATTRIBUTES paSt;
		B_PKEYATTRIBUTES pbSt;

		C_PRSAPUBKEY pcStPub;
		C_PRSAPRIKEY pcStPri;


		/*RSA密钥对生*/
		ret = GM_SDF_GenerateKeyPair_RSA(hSessionHandle,*pbits, &ucPublicKey, &ucPrivateKey);
		if(0!=ret)
			return ret;


		/*将国密公钥与P11结构体串相匹配*/
		paSt = (A_PBASICATTRIBUTES)calloc(1,sizeof(A_BASICATTRIBUTES));
		paSt->ulClass = CKO_PUBLIC_KEY;

		pbSt=(B_PKEYATTRIBUTES)calloc(1,sizeof(B_KEYATTRIBUTES));
		pbSt->bLocal = FALSE;
		pbSt->ulType = CKK_RSA;

		pcStPub = (C_PRSAPUBKEY)calloc(1,sizeof(C_RSAPUBKEY));
		pcStPub->bEnctrue = TRUE;
		pcStPub->bVerctrue = TRUE;
		pcStPub->ulModulusbits = ucPublicKey.bits;
		memcpy(pcStPub->byPublicExponent,ucPublicKey.e,MAX_PUBLIC_EXPONENT_LEN);
		memcpy(pcStPub->byModulus,ucPublicKey.m,MAX_MODULUS_LEN);


		pbSt->pSt = pcStPub;
		paSt->pSt = pbSt;
		*phPublicKey = (CK_OBJECT_HANDLE)paSt;

		/*将国密私钥与P11结构体串相匹配*/
		paSt = (A_PBASICATTRIBUTES)calloc(1,sizeof(A_BASICATTRIBUTES));
		paSt->ulClass = CKO_PRIVATE_KEY;

		pbSt = (B_PKEYATTRIBUTES)calloc(1,sizeof(B_KEYATTRIBUTES));
		pbSt->bLocal=FALSE;
		pbSt->ulType=CKK_RSA;

		pcStPri = (C_PRSAPRIKEY)calloc(1,sizeof(C_RSAPRIKEY));
		pcStPri->bDectrue = TRUE;
		pcStPri->bSigtrue = TRUE;
		pcStPri->ulModulusbits = ucPrivateKey.bits;

		memcpy(pcStPri->byPublicExponent,ucPrivateKey.e,MAX_PUBLIC_EXPONENT_LEN);
		memcpy(pcStPri->byModulus,ucPrivateKey.m,MAX_MODULUS_LEN);
		memcpy(pcStPri->byPrivateExponent,ucPrivateKey.d,MAX_PRIVATE_EXPONENT_LEN);
		memcpy(pcStPri->byCoefficient,ucPrivateKey.coef,MAX_COEFFOCOEMT_LEN);
		memcpy(pcStPri->bPrime1,ucPrivateKey.prime[0],MAX_PRIME_LEN);
		memcpy(pcStPri->bPrime2,ucPrivateKey.prime[1],MAX_PRIME_LEN);
		memcpy(pcStPri->byExponent1,ucPrivateKey.pexp[0],MAX_EXPONENT_LEN);
		memcpy(pcStPri->byExponent2,ucPrivateKey.pexp[1],MAX_EXPONENT_LEN);

		pbSt->pSt = pcStPri;
		paSt->pSt = pbSt;
		*phPrivateKey = (CK_OBJECT_HANDLE)paSt;
	}
	else
	{
		return CKR_TEMPLATE_INCONSISTENT;
	}

	return CKR_OK;
	
}
happyjw 2012-11-16
  • 打赏
  • 举报
回复
你把那个函数贴出来看下呢
happyjw 2012-11-16
  • 打赏
  • 举报
回复
你还是在仔细的看下吧,说不定你哪儿弄错了,应该不可能这样吧
ggxxjj123 2012-11-16
  • 打赏
  • 举报
回复
引用 8 楼 happyjw 的回复:
引用 6 楼 ggxxjj123 的回复: 引用 5 楼 happyjw 的回复:强制类型转换执行之前 的值和之后的值一样吗 一样的 一摸一样 那就是说强制类型转换执行之前也不为NULL吗,刚赋完NULL值就不为NULL了 ?
确实是 从昨天郁闷到现在了
happyjw 2012-11-16
  • 打赏
  • 举报
回复
引用 6 楼 ggxxjj123 的回复:
引用 5 楼 happyjw 的回复:强制类型转换执行之前 的值和之后的值一样吗 一样的 一摸一样
那就是说强制类型转换执行之前也不为NULL吗,刚赋完NULL值就不为NULL了 ?
加载更多回复(7)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧