0

我使用 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() 函数会更改我的数据吗?

4

2 回答 2

0

我相信它在接收而不是发送数据时正在更改数据。您确定您的远程呼叫确实使用带XDR_ENCODE模式的 XDR 吗?

于 2011-11-06T11:14:07.017 回答
0

要将字符串传输到 XDR,您应该使用xdr_stringnot xdr_u_char; 向我们展示 ...的*.x文件rpcgen

于 2011-11-06T11:35:34.317 回答