共享XDR例程和指向.rodata部分的指针

时间:2011-11-06 11:09:45

标签: pointers segmentation-fault xdr

我使用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*

你可以看到here?那么在这种情况下意味着xdr_u_char()函数会改变我的数据吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

要将字符串传输到XDR,您应使用xdr_string而不是xdr_u_char;向我们展示*.x的{​​{1}}文件...