C 这个字符串代表serv\u addr缓冲区的格式是什么?
所以我一直在阅读关于如何使用Frida:的教程,我遇到了以下问题:C 这个字符串代表serv\u addr缓冲区的格式是什么?,c,networking,format,byte,C,Networking,Format,Byte,所以我一直在阅读关于如何使用Frida:的教程,我遇到了以下问题: $ ./client 127.0.0.1 connect() is at: 0x400780 Here's the serv_addr buffer: 02 00 13 88 7f 00 00 01 30 30 30 30 30 30 30 30 Press ENTER key to Continue 本教程指出,字节表示0x1388或5000,因此显然不是十六进制或十进制。我尝试使用base64转换器转换字符串,以查看是否
$ ./client 127.0.0.1
connect() is at: 0x400780
Here's the serv_addr buffer:
02 00 13 88 7f 00 00 01 30 30 30 30 30 30 30 30
Press ENTER key to Continue
本教程指出,字节表示0x1388或5000,因此显然不是十六进制或十进制。我尝试使用base64转换器转换字符串,以查看是否出现0x1388或5000,但没有运气
这是什么格式的?我最近没有做过低级编程,如果我记得的话,字节是由8位1和0组成的组
编辑:
是的,教程说这代表一个结构。但他怎么知道它代表0x1388?如果我收到这样的字符串,有没有办法让我理解它代表一个特定的值,而不是发送消息的代码的作者?代码的相关部分如下:
printf ("\nHere's the serv_addr buffer:\n");
b = (unsigned char *) &serv_addr;
for (i = 0; i != sizeof (serv_addr); i++)
printf ("%s%02x", (i != 0) ? " " : "", b[i]);
它所做的只是从结构serv\u addr
(在中为struct sockaddr\u类型)打印原始数据
这里没有“字符串”(即以C null结尾的字节字符串)
0x1388
是serv\u addr.sin\u port
的值,打印为第三和第四个字节(13
和88
,按网络()字节顺序)
知道输出是
结构中的sockaddr_的原始数据,我们可以很容易地破译数据
02 00
这是sinu族
成员,其值为2
(十进制)。此值对应于AF\u INET
。这是主机字节顺序
1388
这是sinu-port
中端口的网络字节顺序(如前所述)
7f 00 00 01
这是sin_addr
成员,对应于IP地址127.0.0.1
(7f
是127
)。这也是网络字节顺序
- 其余的是“垃圾”,它将结构填充到
struct sockaddr
的公共大小,长度为16字节
根据您的链接页面,它是中的struct sockaddr\u。字节13
和88
都在该输出中,因此可以猜测0x1388
就是从那里来的。我们还可以猜测这是二进制结构的原始字节输出,如果您查看代码,可以确认这一点。@EugeneSh。但是结构是什么格式的,他是如何从这个字符串中检索0x1388的?在我看来像是原始二进制文件。第3和第4字节是0x13和0x88。sockaddr\u中的sin\u端口
处于网络顺序。根据文件。数字似乎是大端的格式-在网络相关数据中并不少见。所以它实际上是十六进制的。。。但在big endian?但是十六进制值是0x1388。对不起,如果我的问题听起来很愚蠢。我将回顾一下endianness并重新阅读您的回复。