Этот вопрос немного сложно объяснить, поскольку фрагмент кода является частью более крупного проекта. Я постараюсь объяснить проблему как можно лучше.Memcmp для двух указателей с разными данными
У меня есть два файла
FILE *f,*m;
f=fopen("/home/machine/decoder.txt","a+");
m=fopen("/home/machine/offset.txt","a+");
В функции я запускаю следующий код,
char *c;
int i=0;
c = malloc(sizeof(SslDecoder));
//Pick a value from "decoder" file and compare it to a variable in the function
while (fgets(c, sizeof(SslDecoder), f) != NULL) {
//Print its value to offset file
fprintf(m,"%s\n",c);
// Print value of another variable to offset file.
for(i=0;i<32;i++){
fprintf(m,"%02x",ssl->client_random.data[i]);
}
fprintf(m,"\n");
//Compare the memory in the pointers.
int check = memcmp(c,ssl->client_random.data,32);
fprintf(m,"MEMCMP value: %d\n",check);
}
отпечатанных в offset.txt следующих значений
625b70a9659b2fe9ba76ea26d3cfb6126bae4a48b4997548b26d9a101e682bc3
625b70a9659b2fe9ba76ea26d3cfb6126bae4a48b4997548b26d9a101e682bc3
MEMCMP value: -44
Определения client_random и ssl выглядит следующим образом:
typedef struct _StringInfo {
guchar *data; /* Backing storage which may be larger than data_len */
guint data_len; /* Length of the meaningful part of data */
} StringInfo;
typedef struct _SslDecryptSession {
StringInfo server_random;
StringInfo client_random;
StringInfo master_secret;
guchar _client_data_for_iv[24];
StringInfo client_data_for_iv;
gint state;
SslCipherSuite cipher_suite;
SslDecoder *server;
SslDecoder *client;
SslSession session;
} SslDecryptSession;
Я не понимаю, почему значения memcmp не равны нулю. Я подозреваю, что данные, хранящиеся в указателях, кодируются по-разному, но как я могу сравнить значения в этом случае. Я не знаю, являются ли данные шестнадцатеричного или необработанных/ascii-данных в любом из указателей.
Отклоните свой код. –