2013-12-12 3 views
0

Кто-нибудь сталкивался с этим вопросом указателя поврежденным в Fedora Core 17 64бинуюУказатель коррупции при передаче из другого файла Fedora 17

Linux (none) 3.3.4-5.fc17.x86_64 #1 

НКУ gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)

Например, есть файлы Ac функция, содержащая aaa() возвращает или принимает некоторый указатель, а Bc имеет функцию bbb(), возвращающую или принимающую некоторый указатель. В моем случае я передаю указатель контекста из БББ() до ааа(), и вот что я прохожу

values e n d 0x2b440c0 0x2b4a190 0x2b57db0 

и вот что я получаю в функции ааа()

values e n d 0x2b440c000000000 0x2b57db000000000 0x0 

I Я не выполняю никаких флагов оптимизации компилятора. Хотя, если я поддерживаю обе функции в одном файле, все работает нормально, как и ожидалось.

Добавили код здесь, которые могли бы помочь

file: src/enc/encrypt.c 
function PopulateEncryptionKeys 

dataEncrypt->stRsa = RSA_new(); ---> this is ok 0x21d0440 
    if(dataEncrypt->stRsa == NULL) 
    { 

     return FALSE; 
    } 


    dataEncrypt->stRsa->e = BN_bin2bn("<hex data>", 1, dataEncrypt->stRsa->e); 
    dataEncrypt->stRsa->n = BN_bin2bn(dataEncrypt->m_nPublicKey, val, dataEncrypt->stRsa->n); 
    dataEncrypt->stRsa->d = BN_bin2bn(dataEncrypt->m_nPrivateExponent, val, dataEncrypt->stRsa->d); ----> these are ok 
    RSA_blinding_off(dataEncrypt->stRsa); 


file: src/enc/encrypt.c 
function: Decipher 

keyRetVal = RSAPrivateDecrypt(nDecryptedMessage,nDataBuffer,m_dataEncryption->stRsa,val,var); 

Uptill this the values of e n and d above are 
values e n d 0x2364090 0x23640d0 0x23a2c10 

This function calls another function part of crypto wraper, which inturn is supposed to to call BN_bn2bin 

file: src/crypto/wrapper.c 
function: RSAPrivateDecrypt 

int RSAPrivateDecrypt(unsigned char *decryptedBuffer,unsigned char *data, RSA* rsa, int flen, int reverseKeyData) 

RSAPrivateDecrypt: rsa is 0x20cc440 e n d 0x229ec1000000000 0x226009000000000 (nil) 

Любые мысли по этому поводу?

Цените, спасибо

+3

Если вы еще не сделали этого, пожалуйста, прочитайте [Стек Переполнение вопрос Контрольный список] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist). Вы также можете узнать, что такое [SSCCE] (http://sscce.org/). –

+0

Я прочитал ссылки. Я искал в сети и не мог найти ответа, и если вы намекаете на пример, код является пристойностью и я работаю над примером для публикации :) – user1663533

+0

То, что я пытаюсь сказать с моим комментарием, заключается в том, что ваш вопрос невозможно ответить без какого-либо кода. Вам не нужно показывать * весь * ваш код или даже * реальный * код, просто примерный код, который показывает, что вы делаете. –

ответ

0

я понял, ответ, основной прямой вопрос decleration. При переносе на 64-битный с 32-битного, если у вас есть какая-либо функция, которая не объявлена ​​до ее вызова, то любые указатели, которые она возвращает, будут разделены на 32 бит. Прочтите его онлайн и откройте свой сложный код. Надеюсь, это поможет кому-то.

С уважением