memcpy "segmentation fault". Verlagerung der Datenstruktur Grenzen

Ich versuche zu Debuggen dieser Fehler aber nicht in der Lage, es zu tun für eine Weile jetzt. Ich habe versucht, verwenden Sie memmove als alternative aber auch dass die Ergebnisse in einem segmentation fault.
Der link zu dem code, der in dieser Frage ist verfasst am - http://pastebin.com/hiwV5G04

Kann mir bitte jemand helfen zu verstehen, was mache ich falsch ?

//------------------------------------------------------------------------
//Somewhere in the main function, This is the piece of code I am executing
//------------------------------------------------------------------------
SslDecryptSession *ssl_session = malloc(sizeof(struct _SslDecryptSession ));
ssl_session->client_random.data = NULL;  //Make the stuff point somewhere. Else can use malloc also here. Not sure if this is a problem
ssl_session->server_random.data= NULL;
const u_char *payload;                  /* Packet payload */
//Case for client random
printf("Client Random ");
for (cs_id = 11; cs_id < 43; cs_id++){
printf("%hhX", payload[cs_id] );
}
printf("\n");
cs_id=11;
ssl_session->client_random.data_len=32;
//Segmentation fault here
memcpy(ssl_session->client_random.data, payload[cs_id], 32);

Den Definitionen der Strukturen beteiligt sind -

typedef struct _SslDecryptSession {
guchar _master_secret[SSL_MASTER_SECRET_LENGTH];
guchar _session_id[256];
guchar _client_random[32];
guchar _server_random[32];
StringInfo session_id;
StringInfo session_ticket;
StringInfo server_random;
StringInfo client_random;
StringInfo master_secret;
StringInfo handshake_data;
StringInfo pre_master_secret;
guchar _server_data_for_iv[24];
StringInfo server_data_for_iv;
guchar _client_data_for_iv[24];
StringInfo client_data_for_iv;

gint state;
SslCipherSuite cipher_suite;
SslDecoder *server;
SslDecoder *client;
SslDecoder *server_new;
SslDecoder *client_new;
gcry_sexp_t private_key;
StringInfo psk;
guint16 version_netorder;
 StringInfo app_data_segment;
    SslSession session;
} SslDecryptSession;


typedef struct _StringInfo {
    guchar  *data;         
    guint    data_len;  
   } StringInfo

Die Ausgabe von gdb ist das

b 1985    //Putting a break point at line 1985 in my source code. 
//Here this is eqvialent to line 83, that is "ssl_session->client_random.data_len=32;"
Breakpoint 1 at 0x403878: file Newversion.c, line 1985.
run       //run the code in gdb
At breakpoint 1 the following info is in the variables
p ssl_session
$1 = (SslDecryptSession *) 0x60fc50   //I put some data in ssl_session->version_netorder earlier. So it is not null here. Everything works fine here
p ssl_session->client_random.data
$2 = (guchar *) 0x0
p ssl_session->client_random.data_len
$3 = 32
step  //Execute 1 more line in the code
//I reach at the memcpy line and I get this error then
Breakpoint 1, got_packet (args=0x0, header=0x7fffffffe2c0, packet=0x7ffff6939086 "P=\345\203\376\177") at Newversion.c:1995
1995                memcpy(ssl_session->client_random.data, payload[cs_id], 32);
(gdb) 
(gdb) s
__memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:27
27  ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S: No such file or directory.
(gdb) 
28  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 
29  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 
30  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 
31  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 
32  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 
33  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 
34  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 
35  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
(gdb) 

Program received signal SIGSEGV, Segmentation fault.
__memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:35
35  in ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S
Haben Sie versucht, und das Profil der code mit Valgrind und versuchen Sie ein Analyse-tool in einer IDE? Sie haben 0 compiler-Warnungen?
Ich habe diese compiler-Warnung Newversion.c:2044:65: warning: passing argument 2 of ‘memcpy’ makes pointer from integer without a cast [-Wint-conversion] memcpy(ssl_session->server_random.data, payload[cs_id], 33); ` ^In der Datei enthalten, aus Newversion.c:39:0: /usr/include/string.h:42:14: Anmerkung: expected "const void * restrict", aber argument ist vom Typ 'u_char {aka const unsigned char}' extern void *memcpy (void *__restrict __ - dest, const void *__restrict __src `
Sie vergessen, & : memcpy(ssl_session->client_random.Daten &Nutzlast[cs_id], 32);
Ich habe versucht Sie das zweite argument der memcpy dieser memcpy(ssl_session->client_random.Daten -, payload+11, 32) gibt Es keine compiler-Warnungen nach dieser Bearbeiten Diese sollte die gleiche sein, mit dem '&', Aber entweder Sie funktionieren nicht, und noch am Ende in mem Ausrichtungen

InformationsquelleAutor Choi | 2016-05-07

Schreibe einen Kommentar