я получил некоторых из них шестнадцатеричного 0xAAABBCCDDEEFF
Хитрость заключается в том, чтобы получить эти значения в памяти запущенного процесса. Может быть полезно написать крошечную вспомогательную программу для этого.
Например, предположим, что у вас есть шестнадцатеричный дамп пакета, а удаленный сервер распечатал этот пакет, а затем разбился. (Обычный способ отладки это сделать удаленный дамп сервера core
, а затем отладить его core
- это позволит вам отлаживать гораздо больше проблем, чем то, что можно отлаживать, используя подход «ведения журнала», но я отвлекаюсь).
Так мы пишем вспомогательную программу, как это (с помощью this answer):
#include <string.h>
#include <sstream>
#include <iostream>
#include "packet.h" // "complicated" packet structure defined here.
int main(int argc, char *argv[]) {
struct packet pkt;
static const int num_ints = ((sizeof(pkt) + sizeof(int) - 1) & ~(sizeof(int) - 1))/sizeof(int);
for (int j = 1; j < argc; j++) {
memset(&pkt, 0, sizeof(pkt)); // start in clean state
// chop input string into 8-char chunks
std::string s = argv[j];
for (int k = 0; k < num_ints && k < (s.size()/8) + 1 ; k++) {
std::stringstream ss;
ss << std::hex << s.substr(8 * k, 8);
unsigned int x;
ss >> x;
((unsigned int *)&pkt)[k] = x;
}
std::cout << std::endl; // break here.
}
}
Теперь скомпилировать эту программу с g++ -g helper.cc -o helper
, запустить его с
gdb -q ./helper AAABBCCDDEEFF....
Установить точку останова на строке 24 («обкатки здесь "), и используйте print pkt
для проверки декодированного пакета.
Возможный дубликат [Использование gdb для декодирования шестнадцатеричных данных в struct] (http://stackoverflow.com/questions/39653514/using-gdb-to-decode-hex-data-to-struct) –