C语言 此字符串表示缓冲区serv_addr格式是什么?



所以我一直在阅读本教程,了解如何使用 Frida: https://www.frida.re/docs/functions/并且我遇到了以下情况:

$ ./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_addr(类型为struct sockaddr_in)打印原始数据。

这里没有"字符串"(在以 C null 结尾的字节字符串的意义上)。

0x1388serv_addr.sin_port的值,它以网络(大端序)字节顺序打印为第三和第四字节(1388)。


知道输出是sockaddr_in结构的原始数据,我们可以轻松破译数据

  • 02 00这是sin_family成员,值为2(十进制)。此值对应于AF_INET。这是按主机字节顺序排列的。

  • 13 88这是(如前所述)端口的网络字节顺序,以sin_port为单位。

  • 7f 00 00 01这是sin_addr成员,对应于 IP 地址127.0.0.1(7f127)。这也是按网络字节顺序排列的。

  • 其余的,30 30 30 30 30 30 30 30,是"垃圾",将结构填充到struct sockaddr的通用大小,长度为16字节。

最新更新