mirror of
https://github.com/cemu-project/idapython.git
synced 2025-01-15 03:19:20 +01:00
Added get_many_bytes(ea, size) -> String | None
This commit is contained in:
parent
42a2f7f630
commit
7d32ff30f0
46
swig/bytes.i
46
swig/bytes.i
@ -76,15 +76,16 @@
|
|||||||
|
|
||||||
%rename (nextthat) py_nextthat;
|
%rename (nextthat) py_nextthat;
|
||||||
%rename (prevthat) py_prevthat;
|
%rename (prevthat) py_prevthat;
|
||||||
|
%rename (get_many_bytes) py_get_many_bytes;
|
||||||
|
|
||||||
%{
|
%{
|
||||||
//<code(py_bytes)>
|
//<code(py_bytes)>
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
static bool idaapi py_testf_cb(flags_t flags, void *ud)
|
static bool idaapi py_testf_cb(flags_t flags, void *ud)
|
||||||
{
|
{
|
||||||
PyObject *py_flags = PyLong_FromLong(flags);
|
PyObject *py_flags = PyLong_FromUnsignedLong(flags);
|
||||||
PyObject *result = PyObject_CallFunctionObjArgs((PyObject *) ud, py_flags, NULL);
|
PyObject *result = PyObject_CallFunctionObjArgs((PyObject *) ud, py_flags, NULL);
|
||||||
bool ret = result != NULL && result == Py_True;
|
bool ret = result != NULL && PyObject_IsTrue(result);
|
||||||
Py_XDECREF(result);
|
Py_XDECREF(result);
|
||||||
Py_XDECREF(py_flags);
|
Py_XDECREF(py_flags);
|
||||||
return ret;
|
return ret;
|
||||||
@ -92,12 +93,10 @@ static bool idaapi py_testf_cb(flags_t flags, void *ud)
|
|||||||
|
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// Wraps the (next|prev)that()
|
// Wraps the (next|prev)that()
|
||||||
ea_t py_npthat(ea_t ea, ea_t bound, PyObject *py_callable, bool next)
|
static ea_t py_npthat(ea_t ea, ea_t bound, PyObject *py_callable, bool next)
|
||||||
{
|
{
|
||||||
if (!PyCallable_Check(py_callable))
|
if (!PyCallable_Check(py_callable))
|
||||||
return BADADDR;
|
return BADADDR;
|
||||||
// ea_t (ida_export *np_that_t)(ea_t, ea_t, testf_t *, void *ud);
|
|
||||||
// np_that_t = ;
|
|
||||||
return (next ? nextthat : prevthat)(ea, bound, py_testf_cb, py_callable);
|
return (next ? nextthat : prevthat)(ea, bound, py_testf_cb, py_callable);
|
||||||
}
|
}
|
||||||
//</code(py_bytes)>
|
//</code(py_bytes)>
|
||||||
@ -105,14 +104,47 @@ ea_t py_npthat(ea_t ea, ea_t bound, PyObject *py_callable, bool next)
|
|||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
//<inline(py_bytes)>
|
//<inline(py_bytes)>
|
||||||
ea_t py_nextthat(ea_t ea, ea_t maxea, PyObject *callable)
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
static ea_t py_nextthat(ea_t ea, ea_t maxea, PyObject *callable)
|
||||||
{
|
{
|
||||||
return py_npthat(ea, maxea, callable, true);
|
return py_npthat(ea, maxea, callable, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ea_t py_prevthat(ea_t ea, ea_t minea, PyObject *callable)
|
static ea_t py_prevthat(ea_t ea, ea_t minea, PyObject *callable)
|
||||||
{
|
{
|
||||||
return py_npthat(ea, minea, callable, false);
|
return py_npthat(ea, minea, callable, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
// Get the specified number of bytes of the program into the buffer.
|
||||||
|
static PyObject *py_get_many_bytes(ea_t ea, int size)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (size <= 0)
|
||||||
|
break;
|
||||||
|
// Allocate memory
|
||||||
|
char *buf = (char *) qalloc(size);
|
||||||
|
if (buf == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Read bytes
|
||||||
|
bool ok = get_many_bytes(ea, buf, size);
|
||||||
|
|
||||||
|
// If ok, create a python string
|
||||||
|
PyObject *py_buf;
|
||||||
|
if (ok)
|
||||||
|
py_buf = PyString_FromStringAndSize(buf, size);
|
||||||
|
|
||||||
|
// Free buffer
|
||||||
|
qfree(buf);
|
||||||
|
|
||||||
|
// Return buffer to Python
|
||||||
|
if (ok)
|
||||||
|
return py_buf;
|
||||||
|
} while (false);
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
}
|
||||||
//</inline(py_bytes)>
|
//</inline(py_bytes)>
|
||||||
%}
|
%}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user