В каком формате эта строка представляет буфер 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? Если я получил такую ​​строку, есть ли способ понять, что она представляет определенное значение, не будучи автором кода, отправившего сообщение?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Соответствующие части кода таковы:

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, оканчивающейся нулем).

0x1388 — это значение serv_addr.sin_port, которое печатается как третий и четвертый байты (13 и 88, в сетевом (большой порядок байтов) порядке байтов).


Зная, что вывод представляет собой необработанные данные структуры sockaddr_in, мы можем легко расшифровать данные.

  • 02 00 Это элемент sin_family со значением 2 (десятичное). Это значение соответствует AF_INET. Это в порядке байтов хоста.

  • 13 88 Это (как уже упоминалось) сетевой порядок байтов порта в sin_port.

  • 7f 00 00 01 Это участник sin_addr и соответствует IP-адресу 127.0.0.1 (7f это 127). Это также в сетевом порядке байтов.

  • Остальное, 30 30 30 30 30 30 30 30, — это «мусор», который заполняет структуру до обычного размера для struct sockaddr, который составляет 16 байт.

Другие вопросы по теме