【发布时间】:2013-10-10 10:49:47
【问题描述】:
以下代码出现分段错误。我很确定这是因为一个函数试图使用变量的地址而不是它的值。我对指针有点陌生。
int main(int argc, char *argv[])
{
EVP_PKEY priv_key_p;
X509_REQ req_p;
X509 cert;
PKCS7 pkcs7;
/*Need to store value in req_p and priv_key_p*/
makecsr(&req_p, &priv_key_p, passphrase);
/*Need to use value of req_p and priv_key_p*/
create_cert(&req_p, &cert, &priv_key_p, passphrase);
}
int create_cert(X509_REQ *req_p, X509 *cert, EVP_PKEY *priv_key_p, char *passphrase)
{
int i;
long serial = 1;
EVP_PKEY *pkey;
const EVP_MD *digest;
X509_NAME *name;
X509V3_CTX ctx;
/* verify signature on the request */
if (!(pkey = X509_REQ_get_pubkey (req_p))) <--- Segmentation fault here!
int_error ("Error getting public key from request");
....
}
使用GDB,makecsr执行后,我可以打印priv_key_p和req_p的值没有问题。
但是,在 create_cert 函数内部,我只能通过编写 p *priv_key_p / *req_p 来打印值
错误
Program received signal SIGSEGV, Segmentation fault.
0xb7ebb747 in X509_REQ_get_pubkey ()
from /lib/i386-linux-gnu/libcrypto.so.1.0.0
【问题讨论】:
-
你能解释一下你的代码吗,我的意思是你的变量的类型是什么。在目前的状态下,这个问题很难回答。
-
X509_REQ_get_pubkey (&req_p)试试这个。(在黑暗中拍摄) -
类型来自OpenSSL library,&req_p 也没有运气
-
您能否提供创建 CSR 的函数中的代码:makecsr?我猜错误可能来自这里
-
见here
标签: c pointers openssl segmentation-fault memory-address