문제

다음 코드가 있습니다.

#include <openssl/bn.h>
#include <openssl/rsa.h>

unsigned char* key;
RSA* rsa = RSA_new();
rsa = RSA_generate_key(1024,65537,NULL,NULL);
//init pubkey
key[BN_num_bytes(rsa->n)] = '\0';
BN_bn2bin(rsa->n, key);
printf("RSA Pub: %s\n", key);
RSA_free( rsa );
rsa = NULL;

디버거에서 줄에 "액세스 위반 쓰기 위치" 문제가 있다고 표시됩니다.

key[BN_num_bytes(rsa->n)] = '\0';

해당 줄을 주석 처리하면 문제는 다음으로 이동합니다.

BN_bn2bin(rsa->n, key);

이 문제를 해결하는 방법에 대한 제안이 있으면 좋을 것입니다.

도움이 되었습니까?

해결책

부터 key 아무것도 가리키지 않고 배열 표기법 아래 첨자로 참조했습니다. 이것이 소스입니다.키는 어떻게 값을 얻나요?귀하의 소유가 아닌 다른 메모리 블록을 덮어쓰거나 짓밟고 있으므로 창에 갇힌 '액세스 위반'이 발생합니다.코드를 다시 확인하고 변수가 malloc 또는 new로 지정되었는지 확인하세요.

참고로, 이렇게 선언하는 것이 정신 건강에 가장 좋습니다.

unsigned char *key = NULL;

그런 식으로 액세스를 시도하면 key malloc'd/new'd가 없으면 메모리 예외 오류가 발생합니다(쉽게 해결할 수 있음).디버깅이 훨씬 쉬워진다고 생각하세요.

이것이 도움이되기를 바랍니다.

다른 팁

Null 종결자를 사용하여 키를 할당하려고 했지만 키에 대한 메모리를 할당하지 않았기 때문에 액세스 위반이 발생했습니다.우리는 당신이 무엇을 성취하려고 하는지 알아야 합니다.

키에 메모리를 할당하지 않습니다. 처음 사용되는 것은 요소를 0으로 설정하려고 할 때입니다.

이 경우 올바른 양의 메모리를 할당하는 올바른 솔루션은 다음과 같습니다.

key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top