我使用 rpcgen 为我正在开发的程序生成客户端和服务器存根。因此,存根使用 XDR 封装数据并通过网络发送它们。当我执行这段代码时,会引发分段错误:
char *str = "Hello!";
my_remote_call(str, strlen(str));
相反,如果我以这种方式修改它没有问题:
char *str = "Hello!";
char *str2 = (char*) malloc(strlen(str));
memcpy(str2, str, strlen(str));
my_remote_call(str2, strlen(str2));
使用 GDB,我发现分段错误是在 my_remote_call() 调用的 xdr_u_char() 函数中生成的。我的问题是:
在第一种情况下,Hello 字符串由编译器在 .rodata 部分中分配,而在第二种情况下,堆的一部分用于记忆字符串。可能会生成分段错误,因为 xdr_u_char 签名需要明确
char*
而不是一个
const char*
正如你在这里看到的?那么在这种情况下意味着 xdr_u_char() 函数会更改我的数据吗?