From 2acdb04d262863d2b2751e647b76a63b6519681c Mon Sep 17 00:00:00 2001 From: ussrhero Date: Mon, 7 May 2018 01:05:16 +0300 Subject: [PATCH 1/3] pykd_deinit function --- kdlibcpp | 2 +- pykd/pymod.cpp | 42 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/kdlibcpp b/kdlibcpp index 107f991..6f96e04 160000 --- a/kdlibcpp +++ b/kdlibcpp @@ -1 +1 @@ -Subproject commit 107f991bb61245de85862717550cb365d54de2b0 +Subproject commit 6f96e046f3e79bc464759c6729d6d344083587e4 diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index d265da9..d0af56e 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -127,7 +127,8 @@ void uninitialize() } -BOOST_PYTHON_MODULE( pykd ) +//BOOST_PYTHON_MODULE( pykd ) +void pykd_init() { python::scope().attr("__version__") = pykdVersion; python::scope().attr("version") = pykdVersion; @@ -1370,7 +1371,7 @@ BOOST_PYTHON_MODULE( pykd ) .value("FinalBreak", kdlib::FinalBreak) .value("PreferDml", kdlib::PreferDml) ; - + python::enum_("breakpointAccess", "Breakpoint access types") .value("Read", kdlib::Read) .value("Write", kdlib::Write) @@ -1382,3 +1383,40 @@ BOOST_PYTHON_MODULE( pykd ) } ////////////////////////////////////////////////////////////////////////////////// + +void pykd_deinit(void*) +{ + kdlib::uninitialize(); +} + +////////////////////////////////////////////////////////////////////////////////// + +PyMODINIT_FUNC +PyInit_pykd(void) +{ + static PyModuleDef_Base initial_base = { + PyObject_HEAD_INIT(NULL) + 0, /* m_init */ + 0, /* m_index */ + 0 /* m_copy */ + }; + + static PyMethodDef initial_methods[] = { { 0, 0, 0, 0 } }; + + static struct PyModuleDef moduledef = { \ + initial_base, + "pykd", + 0, /* m_doc */ + -1, /* m_size */ + initial_methods, + 0, /* m_reload */ + 0, /* m_traverse */ + 0, /* m_clear */ + pykd_deinit + }; + + return boost::python::detail::init_module(moduledef, pykd_init); +} + +////////////////////////////////////////////////////////////////////////////////// + From 9b7cfc9ab05bf6aef59117b1b099633f78631584 Mon Sep 17 00:00:00 2001 From: ussrhero Date: Mon, 7 May 2018 01:10:18 +0300 Subject: [PATCH 2/3] fixed pykd_deinit --- pykd/pymod.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index d0af56e..e8903cb 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -127,7 +127,6 @@ void uninitialize() } -//BOOST_PYTHON_MODULE( pykd ) void pykd_init() { python::scope().attr("__version__") = pykdVersion; @@ -1386,7 +1385,8 @@ void pykd_init() void pykd_deinit(void*) { - kdlib::uninitialize(); + if ( kdlib::isInintilized() ) + kdlib::uninitialize(); } ////////////////////////////////////////////////////////////////////////////////// From a384e9bb5662a12ab09cdb6486b880e12a1cb02a Mon Sep 17 00:00:00 2001 From: ussrhero Date: Tue, 8 May 2018 20:40:30 +0300 Subject: [PATCH 3/3] python 2.7 support --- pykd/pymod.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index e8903cb..c5cac9e 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -1383,25 +1383,25 @@ void pykd_init() ////////////////////////////////////////////////////////////////////////////////// +#if PY_VERSION_HEX >= 0x03000000 + void pykd_deinit(void*) { if ( kdlib::isInintilized() ) kdlib::uninitialize(); } -////////////////////////////////////////////////////////////////////////////////// - PyMODINIT_FUNC PyInit_pykd(void) { static PyModuleDef_Base initial_base = { PyObject_HEAD_INIT(NULL) 0, /* m_init */ - 0, /* m_index */ + 0, /* m_index */ 0 /* m_copy */ - }; - - static PyMethodDef initial_methods[] = { { 0, 0, 0, 0 } }; + }; + + static PyMethodDef initial_methods[] = { { 0, 0, 0, 0 } }; static struct PyModuleDef moduledef = { \ initial_base, @@ -1417,6 +1417,24 @@ PyInit_pykd(void) return boost::python::detail::init_module(moduledef, pykd_init); } +#else +void pykd_deinit(PyObject*) +{ + if (kdlib::isInintilized()) + kdlib::uninitialize(); +} + +PyMODINIT_FUNC +initpykd() +{ + PyObject* moduleObj = boost::python::detail::init_module("pykd", pykd_init); + + PyObject* moduleDeiniter = PyCapsule_New( (void*)1, "pykd.__deinit__", pykd_deinit); + + PyModule_AddObject(moduleObj, "pykd.__deinit__", moduleDeiniter); +} + +#endif //////////////////////////////////////////////////////////////////////////////////