/* OpenIDA - Outil d'analyse de fichiers binaires * list.c - ensemble des jeux de commandes de JDWP * * Copyright (C) 2010 Cyrille Bagard * * This file is part of OpenIDA. * * OpenIDA is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * OpenIDA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Foobar. If not, see . */ #include "list.h" #include #include "vm.h" /* Reconstitue une charge utile à partir d'un contenu binaire. */ typedef bool (* get_jdwp_payload_fc) (const bin_t *, off_t, jdwp_payload *); /* Libère le contenu d'une charge utile. */ typedef void (* free_jdwp_payload_fc) (jdwp_payload *); /* Commandes JDWP */ typedef struct _jdwp_command { get_jdwp_payload_fc get_payload; /* Constitution de la charge */ free_jdwp_payload_fc free_payload; /* Libération de la mémoire */ } jdwp_command; /* Energistrement des différents jeux */ static jdwp_command _commands[][256] = { [JDWP_CST_VIRTUAL_MACHINE] = { [JDWP_CMD_VM_VERSION] = { .get_payload = (get_jdwp_payload_fc)get_jdwp_vm_version, .free_payload = (free_jdwp_payload_fc)free_jdwp_vm_version }, }, }; /****************************************************************************** * * * Paramètres : blob = ensemble de données binaires brutes. * * len = quantité de données valides. * * set = jeu de commandes concerné. * * cmd = identifiant d'une commande donnée. * * payload = charge utile à reconstituer. [OUT] * * * * Description : Reconstitue une charge utile à partir d'un contenu binaire. * * * * Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ bool get_jdwp_payload(const bin_t *blob, off_t len, uint8_t set, uint8_t cmd, jdwp_payload *payload) { bool result; /* Bilan à retourner */ if (_commands[set][cmd].get_payload == NULL) result = false; else result = _commands[set][cmd].get_payload(blob, len, payload); return result; } /****************************************************************************** * * * Paramètres : payload = charge utile à supprimer de la mémoire. * * set = jeu de commandes concerné. * * cmd = identifiant d'une commande donnée. * * * * Description : Libère le contenu d'une charge utile. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void free_jdwp_payload(jdwp_payload *payload, uint8_t set, uint8_t cmd) { if (_commands[set][cmd].free_payload != NULL) _commands[set][cmd].free_payload(payload); }