Visual Studio 2012에서 작업하고 있습니다. 그러나 디버그 모드에서는 프로그램이 올바르게 작동하지만 릴리스 모드로 변경하면 프로그램은 내가 그들의 다운로드 페이지에서 PBC의 MS VC++ Convertion를 사용하고있어 PBC 기능 element_pow_zn()PBC (기반 암호화 기반 라이브러리) element_to_mpz()에 대한 호출시 힙 손상
에 의해 호출됩니다 element_to_mpz().
_realloc()에 대한 호출에서 호출 스택이 오류를 나타내는 것으로 보입니다. 나는 책임이있는 선을 찾았다 고 생각한다. 인민 은행 소스에서, montfp.c의 133 행합니다 (_mpz_realloc() 호출)
static void fp_to_mpz(mpz_ptr z, element_ptr e) {
eptr ep = e->data;
if (!ep->flag) mpz_set_ui(z, 0);
else {
// x is stored as xR.
// We must divide out R to convert to standard representation.
fptr p = e->field->data;
mp_limb_t tmp[2 * p->limbs];
memcpy(tmp, ep->d, p->limbs * sizeof(mp_limb_t));
memset(&tmp[p->limbs], 0, p->limbs * sizeof(mp_limb_t));
/**************************************************************************
* The line I believe to be failing - However I can't step into PBC.dll as
* I do not have the symbols.
**************************************************************************/
_mpz_realloc(z, p->limbs);//This is a call into the GMP library
mont_reduce(z->_mp_d, tmp, p);
// Remove leading zero limbs.
for (z->_mp_size = p->limbs; !z->_mp_d[z->_mp_size - 1]; z->_mp_size--);
}
}
코드 실제로 (element_to_mpz 전화를 사용하고 있습니다)은 다음과 같습니다
bswabe_cph_t*
bswabe_enc(bswabe_pub_t* pub, element_t m, char* policy)
{
bswabe_cph_t* cph;
element_t s;
cph = (bswabe_cph_t*)malloc(sizeof(bswabe_cph_t));
element_init_Zr(s, pub->p);
element_init_GT(m, pub->p);
element_init_GT(cph->cs, pub->p);
element_init_G1(cph->c, pub->p);
cph->p = parse_policy_postfix(policy);
element_random(m);
element_random(s);
/****************************************************
* The call to element_to_mpz() is in element_pow_zn()
*****************************************************/
element_pow_zn(cph->cs, pub->g_hat_alpha, s);
element_mul(cph->cs, cph->cs, m);
element_pow_zn(cph->c, pub->h, s);
fill_policy(cph->p, pub, s);
return cph;
}
위의 코드는 CPABE에 있습니다 - 어떤 정책 기반 암호화를위한 라이브러리입니다. 인수 pub, m 및 정책은 모두 호출 환경에서 올바르게 초기화됩니다.
이것이 CPABE 코드, PBC, 코드 또는 GMP의 버그인지 여부는 확실하지 않습니다. (그 이후로 _mpz_realloc()이 정의 됨)
모든 도움을 주시면 감사하겠습니다.