From a5974124ce05dc7ee58a4e80809aa5e090692758 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Mon, 26 Nov 2018 19:16:01 +0100 Subject: Updated the Python bindings printing memory ranges. --- plugins/pychrysalide/arch/vmpa.c | 57 ++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/plugins/pychrysalide/arch/vmpa.c b/plugins/pychrysalide/arch/vmpa.c index c226224..abca73f 100644 --- a/plugins/pychrysalide/arch/vmpa.c +++ b/plugins/pychrysalide/arch/vmpa.c @@ -165,29 +165,27 @@ static PyObject *py_vmpa_to_str(PyObject *obj) PyObject *result; /* Chaîne à retourner */ vmpa2t *addr; /* Véritable adresse manipulée */ phys_t physical; /* Position physique */ - virt_t virtual; /* Adresse virtuelle */ VMPA_BUFFER(phys_str); /* Version humaine de position */ + virt_t virtual; /* Adresse virtuelle */ VMPA_BUFFER(virt_str); /* Version humaine d'adresse */ addr = &((py_vmpa_t *)obj)->addr; physical = get_phy_addr(addr); - virtual = get_virt_addr(addr); - - vmpa2_phys_to_string(addr, MDS_UNDEFINED, phys_str, NULL); - vmpa2_virt_to_string(addr, MDS_UNDEFINED, virt_str, NULL); - if (physical == VMPA_NO_PHYSICAL && virtual == VMPA_NO_VIRTUAL) - result = PyUnicode_FromFormat(""); - - else if (physical != VMPA_NO_PHYSICAL && virtual == VMPA_NO_VIRTUAL) - result = PyUnicode_FromFormat("", phys_str); + if (physical == VMPA_NO_PHYSICAL) + strncpy(phys_str, _("None"), sizeof(phys_str) - 1); + else + vmpa2_phys_to_string(addr, MDS_UNDEFINED, phys_str, NULL); - else if (physical == VMPA_NO_PHYSICAL && virtual != VMPA_NO_VIRTUAL) - result = PyUnicode_FromFormat("", virt_str); + virtual = get_virt_addr(addr); + if (virtual == VMPA_NO_VIRTUAL) + strncpy(virt_str, _("None"), sizeof(virt_str) - 1); else - result = PyUnicode_FromFormat("", phys_str, virt_str); + vmpa2_virt_to_string(addr, MDS_UNDEFINED, virt_str, NULL); + + result = PyUnicode_FromFormat("", phys_str, virt_str); return result; @@ -838,8 +836,39 @@ int convert_any_to_vmpa(PyObject *arg, void *dst) static PyObject *py_mrange_to_str(PyObject *obj) { PyObject *result; /* Chaîne à retourner */ + mrange_t *range; /* Espace mémoire à traiter */ + vmpa2t *addr; /* Véritable adresse manipulée */ + phys_t physical; /* Position physique */ + VMPA_BUFFER(phys_str); /* Version humaine de position */ + virt_t virtual; /* Adresse virtuelle */ + VMPA_BUFFER(virt_str); /* Version humaine d'adresse */ + vmpa2t length; /* Fausse taille physique */ + VMPA_BUFFER(len_str); /* Version humaine de longueur */ + + range = get_internal_mrange(obj); + assert(range != NULL); + + addr = get_mrange_addr(range); + + physical = get_phy_addr(addr); + + if (physical == VMPA_NO_PHYSICAL) + strncpy(phys_str, _("None"), sizeof(phys_str) - 1); + else + vmpa2_phys_to_string(addr, MDS_UNDEFINED, phys_str, NULL); + + virtual = get_virt_addr(addr); + + if (virtual == VMPA_NO_VIRTUAL) + strncpy(virt_str, _("None"), sizeof(virt_str) - 1); + else + vmpa2_virt_to_string(addr, MDS_UNDEFINED, virt_str, NULL); + + init_vmpa(&length, get_mrange_length(range), VMPA_NO_VIRTUAL); + + vmpa2_phys_to_string(&length, MDS_UNDEFINED, len_str, NULL); - result = PyUnicode_FromFormat(""); + result = PyUnicode_FromFormat("(, +%s)", phys_str, virt_str, len_str); return result; -- cgit v0.11.2-87-g4458