diff options
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/binary.c | 77 | ||||
-rw-r--r-- | src/analysis/binary.h | 1 | ||||
-rw-r--r-- | src/analysis/db/misc/rlestr.c | 2 | ||||
-rw-r--r-- | src/analysis/db/server.c | 2 |
4 files changed, 78 insertions, 4 deletions
diff --git a/src/analysis/binary.c b/src/analysis/binary.c index b94071c..cf01e16 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -36,6 +36,7 @@ #include "binary-int.h" #include "routine.h" #include "binaries/file.h" +#include "db/items/bookmark.h" #include "decomp/decompiler.h" #include "disass/disassembler.h" #include "../common/extstr.h" @@ -78,6 +79,15 @@ static bool g_loaded_binary_save_storage(const GLoadedBinary *, xmlDocPtr, xmlXP +/* -------------------------- MANIPULATION DES COLLECTIONS -------------------------- */ + + +/* Actualise suite à un changement affectant les signets. */ +static void on_binary_bookmarks_change(GDbCollection *, DBAction, GDbBookmark *, GLoadedBinary *); + + + + /* Indique le type défini pour une description de fichier binaire. */ @@ -138,6 +148,8 @@ static void g_loaded_binary_class_init(GLoadedBinaryClass *klass) static void g_loaded_binary_init(GLoadedBinary *binary) { + GDbCollection *collec; /* Collection à lister ici */ + binary->username = strdup("default"); binary->remote_host = strdup("localhost"); @@ -150,6 +162,9 @@ static void g_loaded_binary_init(GLoadedBinary *binary) binary->collections = create_collections_list(); + collec = g_loaded_binary_find_collection(binary, DBF_BOOKMARKS); + g_signal_connect(collec, "content-changed", G_CALLBACK(on_binary_bookmarks_change), binary); + binary->col_display[BVW_BLOCK][BLC_PHYSICAL] = true; binary->col_display[BVW_BLOCK][BLC_VIRTUAL] = true; binary->col_display[BVW_BLOCK][BLC_BINARY] = true; @@ -811,6 +826,61 @@ bool _g_loaded_binary_add_to_collection(GLoadedBinary *binary, DBFeatures featur + + +/****************************************************************************** +* * +* Paramètres : collec = collection dont le contenu vient de changer. * +* action = type de modification notifiée par la collection. * +* bookmark = élément en cause dans le changement survenu. * +* binary = structure contenant les informations maîtresses. * +* * +* Description : Actualise suite à un changement affectant les signets. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void on_binary_bookmarks_change(GDbCollection *collec, DBAction action, GDbBookmark *bookmark, GLoadedBinary *binary) +{ + const vmpa2t *addr; /* Adressse associée au signet */ + GBufferLine *line; /* Ligne de tampon à marquer */ + + addr = g_db_bookmark_get_address(bookmark); + + line = g_code_buffer_find_line_by_addr(binary->disass_buffer, addr); + + if (line != NULL) + { + if (action == DBA_ADD_ITEM) + g_buffer_line_add_flag(line, BLF_BOOKMARK); + + else /*if (action == DBA_REM_ITEM)*/ + g_buffer_line_remove_flag(line, BLF_BOOKMARK); + + g_object_unref(G_OBJECT(line)); + + } + +} + + + + + + + + + + + + + + + + /****************************************************************************** * * * Paramètres : binary = élément binaire à traiter. * @@ -832,11 +902,13 @@ void g_loaded_binary_analyse(GLoadedBinary *binary) /* Contacts avec les serveurs */ - + // Déconnexion... disassemble_binary(binary, &binary->instrs, &binary->disass_buffer, ack_completed_disassembly); + + /* TODO : remme ! */ //ack_completed_disassembly(NULL, binary); @@ -1096,6 +1168,9 @@ void ack_completed_disassembly(GDelayedDisassembly *disass, GLoadedBinary *binar g_object_unref(G_OBJECT(disass)); + g_loaded_binary_connect(binary); + + /* Décompilation... */ diff --git a/src/analysis/binary.h b/src/analysis/binary.h index b0fb369..6878fe4 100644 --- a/src/analysis/binary.h +++ b/src/analysis/binary.h @@ -112,7 +112,6 @@ bool g_loaded_binary_connect(GLoadedBinary *); -/* ------------------------- INFORMATIONS D'ENREGISTREMENTS ------------------------- */ /* -------------------------- MANIPULATION DES COLLECTIONS -------------------------- */ diff --git a/src/analysis/db/misc/rlestr.c b/src/analysis/db/misc/rlestr.c index d75e7ab..631b1e9 100644 --- a/src/analysis/db/misc/rlestr.c +++ b/src/analysis/db/misc/rlestr.c @@ -331,7 +331,7 @@ bool send_rle_string(const rle_string *str, int fd, int flags) { bool status; /* Bilan d'une opération */ - status = safe_send(fd, (uint32_t []) { htobe32(str->length) }, sizeof(uint32_t), flags); + status = safe_send(fd, (uint32_t []) { htobe32(str->length) }, sizeof(uint32_t), MSG_MORE | flags); if (!status) return false; if (str->length > 0) diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c index 04b0dc4..c51c21e 100644 --- a/src/analysis/db/server.c +++ b/src/analysis/db/server.c @@ -390,7 +390,7 @@ static void *g_db_server_listener(GDbServer *server) if (archive != NULL) error = g_cdb_archive_add_client(archive, fd, &user); - + continue; gdsl_error: |