C 这个字符串代表serv\u addr缓冲区的格式是什么?

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转换器转换字符串,以查看是否

所以我一直在阅读关于如何使用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转换器转换字符串,以查看是否出现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并重新阅读您的回复。