From 643ad3b7981e4da54c1748e72b525a1f477ea155 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 24 Nov 2019 23:26:04 +0100
Subject: Defined special values of memory locations for Python.

---
 plugins/pychrysalide/analysis/db/constants.c | 11 +++--
 plugins/pychrysalide/arch/Makefile.am        |  1 +
 plugins/pychrysalide/arch/constants.c        | 70 ++++++++++++++++++++++++++++
 plugins/pychrysalide/arch/constants.h        | 38 +++++++++++++++
 plugins/pychrysalide/arch/vmpa.c             |  4 ++
 5 files changed, 120 insertions(+), 4 deletions(-)
 create mode 100644 plugins/pychrysalide/arch/constants.c
 create mode 100644 plugins/pychrysalide/arch/constants.h

diff --git a/plugins/pychrysalide/analysis/db/constants.c b/plugins/pychrysalide/analysis/db/constants.c
index 07c7a06..76385fd 100644
--- a/plugins/pychrysalide/analysis/db/constants.c
+++ b/plugins/pychrysalide/analysis/db/constants.c
@@ -1,6 +1,6 @@
 
 /* Chrysalide - Outil d'analyse de fichiers binaires
- * constants.c - équivalent Python partiel du fichier "plugins/dex/dex_def.h"
+ * constants.c - ajout des constantes liées aux bases de données
  *
  * Copyright (C) 2018 Cyrille Bagard
  *
@@ -63,7 +63,8 @@ bool define_db_protocol_constants(PyTypeObject *type)
         goto exit;
     }
 
-    result = attach_constants_group(type, false, "DBFeatures", values, "Features provided by database items.");
+    result = attach_constants_group(type, false, "DBFeatures", values,
+                                    "Features provided by database items.");
 
  exit:
 
@@ -104,7 +105,8 @@ bool define_db_item_constants(PyTypeObject *type)
         goto exit;
     }
 
-    result = attach_constants_group(type, true, "DbItemFlags", values, "Properties of a database item.");
+    result = attach_constants_group(type, true, "DbItemFlags", values,
+                                    "Properties of a database item.");
 
  exit:
 
@@ -142,7 +144,8 @@ bool define_hub_server_constants(PyTypeObject *type)
         goto exit;
     }
 
-    result = attach_constants_group(type, false, "ServerStartStatus", values, "Status of a server start.");
+    result = attach_constants_group(type, false, "ServerStartStatus", values,
+                                    "Status of a server start.");
 
  exit:
 
diff --git a/plugins/pychrysalide/arch/Makefile.am b/plugins/pychrysalide/arch/Makefile.am
index b26727d..8b0e992 100644
--- a/plugins/pychrysalide/arch/Makefile.am
+++ b/plugins/pychrysalide/arch/Makefile.am
@@ -2,6 +2,7 @@
 noinst_LTLIBRARIES = libpychrysaarch.la
 
 libpychrysaarch_la_SOURCES =			\
+	constants.h constants.c				\
 	context.h context.c					\
 	feeder.h feeder.c					\
 	immediate.h immediate.c				\
diff --git a/plugins/pychrysalide/arch/constants.c b/plugins/pychrysalide/arch/constants.c
new file mode 100644
index 0000000..341cb63
--- /dev/null
+++ b/plugins/pychrysalide/arch/constants.c
@@ -0,0 +1,70 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * constants.c - ajout des constantes de base pour les architectures
+ *
+ * Copyright (C) 2018 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  Chrysalide 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.
+ *
+ *  Chrysalide 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include "constants.h"
+
+
+#include <arch/vmpa.h>
+
+
+#include "../helpers.h"
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : type = type dont le dictionnaire est à compléter.            *
+*                                                                             *
+*  Description : Définit les constantes relatives aux emplacements.           *
+*                                                                             *
+*  Retour      : true en cas de succès de l'opération, false sinon.           *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool define_arch_vmpa_constants(PyTypeObject *type)
+{
+    bool result;                            /* Bilan à retourner           */
+    PyObject *values;                       /* Groupe de valeurs à établir */
+
+    values = PyDict_New();
+
+    result = add_const_to_group(values, "NO_PHYSICAL", VMPA_NO_PHYSICAL);
+    if (result) result = add_const_to_group(values, "NO_VIRTUAL", VMPA_NO_VIRTUAL);
+
+    if (!result)
+    {
+        Py_DECREF(values);
+        goto exit;
+    }
+
+    result = attach_constants_group(type, false, "VmpaSpecialValue", values,
+                                    "Special values for memory locations.");
+
+ exit:
+
+    return result;
+
+}
diff --git a/plugins/pychrysalide/arch/constants.h b/plugins/pychrysalide/arch/constants.h
new file mode 100644
index 0000000..d1fc2d4
--- /dev/null
+++ b/plugins/pychrysalide/arch/constants.h
@@ -0,0 +1,38 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * constants.h - prototypes pour l'ajout des constantes de base pour les architectures
+ *
+ * Copyright (C) 2019 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  Chrysalide 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.
+ *
+ *  Chrysalide 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 this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#ifndef _PLUGINS_PYCHRYSALIDE_ARCH_CONSTANTS_H
+#define _PLUGINS_PYCHRYSALIDE_ARCH_CONSTANTS_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+/* Définit les constantes relatives aux emplacements. */
+bool define_arch_vmpa_constants(PyTypeObject *);
+
+
+
+#endif  /* _PLUGINS_PYCHRYSALIDE_ARCH_CONSTANTS_H */
diff --git a/plugins/pychrysalide/arch/vmpa.c b/plugins/pychrysalide/arch/vmpa.c
index 015687f..aa745cf 100644
--- a/plugins/pychrysalide/arch/vmpa.c
+++ b/plugins/pychrysalide/arch/vmpa.c
@@ -32,6 +32,7 @@
 #include <i18n.h>
 
 
+#include "constants.h"
 #include "../access.h"
 #include "../helpers.h"
 
@@ -681,6 +682,9 @@ bool ensure_python_vmpa_is_registered(void)
         if (!register_python_module_object(module, type))
             return false;
 
+        if (!define_arch_vmpa_constants(type))
+            return false;
+
     }
 
     return true;
-- 
cgit v0.11.2-87-g4458