summaryrefslogtreecommitdiff
path: root/src/debug/jdwp/sets/vm.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2012-02-17 17:51:06 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2012-02-17 17:51:06 (GMT)
commit73605bffb935fc51a52be1936426211e31dd898a (patch)
tree094d72321011baae0d5054e06906e9d006249c3b /src/debug/jdwp/sets/vm.c
parent98a3c749a15349b874dcef0ce3a43ebff651d95a (diff)
Listed all running threads using Python.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@234 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/debug/jdwp/sets/vm.c')
-rw-r--r--src/debug/jdwp/sets/vm.c109
1 files changed, 107 insertions, 2 deletions
diff --git a/src/debug/jdwp/sets/vm.c b/src/debug/jdwp/sets/vm.c
index fdb1ec0..d8e3255 100644
--- a/src/debug/jdwp/sets/vm.c
+++ b/src/debug/jdwp/sets/vm.c
@@ -2,7 +2,7 @@
/* OpenIDA - Outil d'analyse de fichiers binaires
* vm.c - constitution des charges utiles liées à la VM
*
- * Copyright (C) 2010 Cyrille Bagard
+ * Copyright (C) 2010-2012 Cyrille Bagard
*
* This file is part of OpenIDA.
*
@@ -24,9 +24,11 @@
#include "vm.h"
+#include <malloc.h>
#include <string.h>
+#include "../misc/id.h"
#include "../misc/types.h"
#include "../../../common/endianness.h"
@@ -36,6 +38,7 @@
* *
* Paramètres : blob = ensemble de données binaires brutes. *
* len = quantité de données valides. *
+* sizes = références pour la valeur des tailles dynamiques. *
* reply = structure de réponse à constituer. [OUT] *
* *
* Description : Reconstitue une réponse quant à une version de serveur. *
@@ -46,7 +49,7 @@
* *
******************************************************************************/
-bool get_jdwp_vm_version(const bin_t *blob, off_t len, jdwp_cmd_vm_version_reply *reply)
+bool get_jdwp_vm_version(const bin_t *blob, off_t len, const jdwp_cmd_vm_id_sizes_reply *sizes, jdwp_cmd_vm_version_reply *reply)
{
bool result; /* Bilan à retourner */
off_t pos; /* Tête de lecture */
@@ -95,3 +98,105 @@ void free_jdwp_vm_version(jdwp_cmd_vm_version_reply *reply)
free_jdwp_string(&reply->vm_name);
}
+
+
+/******************************************************************************
+* *
+* Paramètres : blob = ensemble de données binaires brutes. *
+* len = quantité de données valides. *
+* sizes = références pour la valeur des tailles dynamiques. *
+* reply = structure de réponse à constituer. [OUT] *
+* *
+* Description : Reconstitue une réponse fournissant la liste des threads. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool get_jdwp_vm_all_threads(const bin_t *blob, off_t len, const jdwp_cmd_vm_id_sizes_reply *sizes, jdwp_cmd_vm_allthreads_reply *reply)
+{
+ bool result; /* Bilan à retourner */
+ off_t pos; /* Tête de lecture */
+ uint32_t i; /* Boucle de parcours */
+
+ pos = 0;
+ memset(reply, 0, sizeof(jdwp_cmd_vm_id_sizes_reply));
+
+ result = read_u32(&reply->count, blob, &pos, len, SRE_BIG);
+ if (!result) return false;
+
+ reply->threads = (jdwp_dynsized_id *)calloc(reply->count, sizeof(jdwp_dynsized_id));
+
+ for (i = 0; i < reply->count && result; i++)
+ result = get_jdwp_thread_id(blob, &pos, len, sizes, &reply->threads[i]);
+
+ if (!result)
+ free_jdwp_all_threads(reply);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : reply = structure de réponse à supprimer de la mémoire. *
+* *
+* Description : Libère le contenu d'une réponse offrant une liste de threads.*
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void free_jdwp_all_threads(jdwp_cmd_vm_allthreads_reply *reply)
+{
+ free(reply->threads);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : blob = ensemble de données binaires brutes. *
+* len = quantité de données valides. *
+* sizes = références pour la valeur des tailles dynamiques. *
+* reply = structure de réponse à constituer. [OUT] *
+* *
+* Description : Reconstitue une réponse quant aux tailles spécifiques. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool get_jdwp_vm_id_sizes(const bin_t *blob, off_t len, const jdwp_cmd_vm_id_sizes_reply *sizes, jdwp_cmd_vm_id_sizes_reply *reply)
+{
+ bool result; /* Bilan à retourner */
+ off_t pos; /* Tête de lecture */
+
+ pos = 0;
+ memset(reply, 0, sizeof(jdwp_cmd_vm_id_sizes_reply));
+
+ result = read_u32(&reply->field_id_size, blob, &pos, len, SRE_BIG);
+ if (!result) return false;
+
+ result = read_u32(&reply->method_id_size, blob, &pos, len, SRE_BIG);
+ if (!result) return false;
+
+ result = read_u32(&reply->object_id_size, blob, &pos, len, SRE_BIG);
+ if (!result) return false;
+
+ result = read_u32(&reply->reference_type_id_size, blob, &pos, len, SRE_BIG);
+ if (!result) return false;
+
+ result = read_u32(&reply->frame_id_size, blob, &pos, len, SRE_BIG);
+ if (!result) return false;
+
+ return true;
+
+}