manager.target[index].recv_thread = -1;
manager.target[index].allocmem = 0;
manager.target[index].starttime = 0;
+ manager.target[index].initial_log = 0;
if(manager.target[index].event_fd != -1)
close(manager.target[index].event_fd);
manager.target[index].event_fd = -1;
log.length = sprintf(log.data, "%d`,%Lu", manager.target[index].pid, manager.target[index].starttime);
}
+ manager.target[index].initial_log = 1;
sendDataToHost(&log);
}
int socket; // written only by main thread
pthread_t recv_thread; // written only by main thread
int event_fd; // for thread communication (from recv thread to main thread)
+ int initial_log; // written only by main thread
} __da_target_info;
typedef struct
manager.target[i].socket = -1;
manager.target[i].event_fd = -1;
manager.target[i].recv_thread = -1;
+ manager.target[i].initial_log = 0;
manager.target[i].allocmem = 0;
manager.target[i].starttime = 0;
}
static void* recvThread(void* data)
{
int index = (int)data;
+ int pass = 0;
uint64_t event;
ssize_t recvLen;
msg_t log;
write(manager.target[index].event_fd, &event, sizeof(uint64_t));
break;
}
+ else if(log.type == MSG_MSG)
+ {
+ // don't send to host
+ LOGI("EXTRA MSG %d|%d|%s\n", log.type, log.length, log.data);
+ continue;
+ }
#ifdef PRINT_TARGET_LOG
else if(log.type == MSG_LOG)
{
#endif
// any message before MSG_PID message arrived did not be sent to host
+ if(unlikely(pass == 0))
+ {
+ while(manager.target[index].initial_log == 0)
+ {
+ sleep(0);
+ }
+ }
+ pass = 1;
+
if(manager.target[index].pid != -1)
sendDataToHost(&log);
}
Name: dynamic-analysis-manager
Summary: dynamic analyzer manager
-Version: 2.1.1
+Version: 2.1.2
Release: 1
Group: System/Libraries
License: Apache License, Version 2