GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
py-disasm.c File Reference
#include "defs.h"
#include "python-internal.h"
#include "dis-asm.h"
#include "arch-utils.h"
#include "charset.h"
#include "disasm.h"
#include "progspace.h"

Go to the source code of this file.

Classes

struct  disasm_info_object
 
struct  disasm_result_object
 
struct  gdbpy_disassembler
 
struct  scoped_disasm_info_object
 

Macros

#define DISASMPY_DISASM_INFO_REQUIRE_VALID(Info)
 

Functions

PyTypeObject disasm_info_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("disasm_info_object")
 
PyTypeObject disasm_result_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("disasm_result_object")
 
static bool disasm_info_object_is_valid (disasm_info_object *obj)
 
static void disasm_info_fill (disasm_info_object *obj, struct gdbarch *gdbarch, program_space *progspace, bfd_vma address, disassemble_info *di, disasm_info_object *next)
 
static int disasm_info_init (PyObject *self, PyObject *args, PyObject *kwargs)
 
static void disasm_info_dealloc (PyObject *self)
 
static PyObjectdisasmpy_info_is_valid (PyObject *self, PyObject *args)
 
static void disasmpy_set_memory_error_for_address (CORE_ADDR address)
 
static void disasmpy_init_disassembler_result (disasm_result_object *obj, int length, std::string content)
 
static PyObjectdisasmpy_builtin_disassemble (PyObject *self, PyObject *args, PyObject *kw)
 
static PyObjectdisasmpy_set_enabled (PyObject *self, PyObject *args, PyObject *kw)
 
static PyObjectdisasmpy_info_read_memory (PyObject *self, PyObject *args, PyObject *kw)
 
static PyObjectdisasmpy_info_address (PyObject *self, void *closure)
 
static PyObjectdisasmpy_info_architecture (PyObject *self, void *closure)
 
static PyObjectdisasmpy_info_progspace (PyObject *self, void *closure)
 
static PyObjectdisasmpy_result_length (PyObject *self, void *closure)
 
static PyObjectdisasmpy_result_string (PyObject *self, void *closure)
 
static int disasmpy_result_init (PyObject *self, PyObject *args, PyObject *kwargs)
 
gdb::optional< int > gdbpy_print_insn (struct gdbarch *gdbarch, CORE_ADDR memaddr, disassemble_info *info)
 
static void disasmpy_dealloc_result (PyObject *self)
 
int gdbpy_initialize_disasm ()
 

Variables

static bool python_print_insn_enabled = false
 
static gdb_PyGetSetDef disasm_info_object_getset []
 
static PyMethodDef disasm_info_object_methods []
 
static gdb_PyGetSetDef disasm_result_object_getset []
 
PyMethodDef python_disassembler_methods []
 
static struct PyModuleDef python_disassembler_module_def
 
PyTypeObject disasm_info_object_type
 
PyTypeObject disasm_result_object_type
 

Macro Definition Documentation

◆ DISASMPY_DISASM_INFO_REQUIRE_VALID

#define DISASMPY_DISASM_INFO_REQUIRE_VALID (   Info)
Value:
do { \
{ \
PyErr_SetString (PyExc_RuntimeError, \
_("DisassembleInfo is no longer valid.")); \
return nullptr; \
} \
} while (0)
static bool disasm_info_object_is_valid(disasm_info_object *obj)
Definition py-disasm.c:188

Definition at line 275 of file py-disasm.c.

Function Documentation

◆ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF() [1/2]

PyTypeObject disasm_info_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ( "disasm_info_object"  )

◆ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF() [2/2]

PyTypeObject disasm_result_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ( "disasm_result_object"  )

◆ disasm_info_dealloc()

static void disasm_info_dealloc ( PyObject self)
static

Definition at line 236 of file py-disasm.c.

References disasm_info_object::next.

◆ disasm_info_fill()

static void disasm_info_fill ( disasm_info_object obj,
struct gdbarch gdbarch,
program_space progspace,
bfd_vma  address,
disassemble_info *  di,
disasm_info_object next 
)
static

◆ disasm_info_init()

static int disasm_info_init ( PyObject self,
PyObject args,
PyObject kwargs 
)
static

◆ disasm_info_object_is_valid()

static bool disasm_info_object_is_valid ( disasm_info_object obj)
static

Definition at line 188 of file py-disasm.c.

References disasm_info_object::gdb_info.

Referenced by disasmpy_info_is_valid().

◆ disasmpy_builtin_disassemble()

static PyObject * disasmpy_builtin_disassemble ( PyObject self,
PyObject args,
PyObject kw 
)
static

◆ disasmpy_dealloc_result()

static void disasmpy_dealloc_result ( PyObject self)
static

Definition at line 943 of file py-disasm.c.

References disasm_result_object::content.

◆ disasmpy_info_address()

static PyObject * disasmpy_info_address ( PyObject self,
void *  closure 
)
static

◆ disasmpy_info_architecture()

static PyObject * disasmpy_info_architecture ( PyObject self,
void *  closure 
)
static

◆ disasmpy_info_is_valid()

static PyObject * disasmpy_info_is_valid ( PyObject self,
PyObject args 
)
static

Definition at line 253 of file py-disasm.c.

References disasm_info_object_is_valid().

◆ disasmpy_info_progspace()

static PyObject * disasmpy_info_progspace ( PyObject self,
void *  closure 
)
static

◆ disasmpy_info_read_memory()

static PyObject * disasmpy_info_read_memory ( PyObject self,
PyObject args,
PyObject kw 
)
static

◆ disasmpy_init_disassembler_result()

static void disasmpy_init_disassembler_result ( disasm_result_object obj,
int  length,
std::string  content 
)
static

◆ disasmpy_result_init()

static int disasmpy_result_init ( PyObject self,
PyObject args,
PyObject kwargs 
)
static

◆ disasmpy_result_length()

static PyObject * disasmpy_result_length ( PyObject self,
void *  closure 
)
static

Definition at line 599 of file py-disasm.c.

References gdb_py_object_from_longest(), and disasm_result_object::length.

◆ disasmpy_result_string()

static PyObject * disasmpy_result_string ( PyObject self,
void *  closure 
)
static

◆ disasmpy_set_enabled()

static PyObject * disasmpy_set_enabled ( PyObject self,
PyObject args,
PyObject kw 
)
static

Definition at line 401 of file py-disasm.c.

References gdb_PyArg_ParseTupleAndKeywords(), and python_print_insn_enabled.

◆ disasmpy_set_memory_error_for_address()

static void disasmpy_set_memory_error_for_address ( CORE_ADDR  address)
static

◆ gdbpy_initialize_disasm()

int gdbpy_initialize_disasm ( )

◆ gdbpy_print_insn()

gdb::optional< int > gdbpy_print_insn ( struct gdbarch gdbarch,
CORE_ADDR  memaddr,
disassemble_info *  info 
)

Variable Documentation

◆ disasm_info_object_getset

gdb_PyGetSetDef disasm_info_object_getset[]
static
Initial value:
= {
{ "address", disasmpy_info_address, nullptr,
"Start address of the instruction to disassemble.", nullptr },
{ "architecture", disasmpy_info_architecture, nullptr,
"Architecture to disassemble in", nullptr },
{ "progspace", disasmpy_info_progspace, nullptr,
"Program space to disassemble in", nullptr },
{ nullptr }
}
static PyObject * disasmpy_info_architecture(PyObject *self, void *closure)
Definition py-disasm.c:479
static PyObject * disasmpy_info_address(PyObject *self, void *closure)
Definition py-disasm.c:468
static PyObject * disasmpy_info_progspace(PyObject *self, void *closure)
Definition py-disasm.c:490

Definition at line 952 of file py-disasm.c.

◆ disasm_info_object_methods

PyMethodDef disasm_info_object_methods[]
static
Initial value:
= {
{ "read_memory", (PyCFunction) disasmpy_info_read_memory,
METH_VARARGS | METH_KEYWORDS,
"read_memory (LEN, OFFSET = 0) -> Octets[]\n\
Read LEN octets for the instruction to disassemble." },
{ "is_valid", disasmpy_info_is_valid, METH_NOARGS,
"is_valid () -> Boolean.\n\
Return true if this DisassembleInfo is valid, false if not." },
{nullptr}
}
static PyObject * disasmpy_info_read_memory(PyObject *self, PyObject *args, PyObject *kw)
Definition py-disasm.c:428
static PyObject * disasmpy_info_is_valid(PyObject *self, PyObject *args)
Definition py-disasm.c:253

Definition at line 964 of file py-disasm.c.

◆ disasm_info_object_type

PyTypeObject disasm_info_object_type

◆ disasm_result_object_getset

gdb_PyGetSetDef disasm_result_object_getset[]
static
Initial value:
= {
{ "length", disasmpy_result_length, nullptr,
"Length of the disassembled instruction.", nullptr },
{ "string", disasmpy_result_string, nullptr,
"String representing the disassembled instruction.", nullptr },
{ nullptr }
}
static PyObject * disasmpy_result_length(PyObject *self, void *closure)
Definition py-disasm.c:599
static PyObject * disasmpy_result_string(PyObject *self, void *closure)
Definition py-disasm.c:609

Definition at line 977 of file py-disasm.c.

◆ disasm_result_object_type

PyTypeObject disasm_result_object_type

◆ python_disassembler_methods

PyMethodDef python_disassembler_methods[]
Initial value:
=
{
{ "builtin_disassemble", (PyCFunction) disasmpy_builtin_disassemble,
METH_VARARGS | METH_KEYWORDS,
"builtin_disassemble (INFO, MEMORY_SOURCE = None) -> None\n\
Disassemble using GDB's builtin disassembler. INFO is an instance of\n\
gdb.disassembler.DisassembleInfo. The MEMORY_SOURCE, if not None, should\n\
be an object with the read_memory method." },
{ "_set_enabled", (PyCFunction) disasmpy_set_enabled,
METH_VARARGS | METH_KEYWORDS,
"_set_enabled (STATE) -> None\n\
Set whether GDB should call into the Python _print_insn code or not." },
{nullptr, nullptr, 0, nullptr}
}
static PyObject * disasmpy_set_enabled(PyObject *self, PyObject *args, PyObject *kw)
Definition py-disasm.c:401
static PyObject * disasmpy_builtin_disassemble(PyObject *self, PyObject *args, PyObject *kw)
Definition py-disasm.c:313

Definition at line 989 of file py-disasm.c.

◆ python_disassembler_module_def

struct PyModuleDef python_disassembler_module_def
static
Initial value:
=
{
PyModuleDef_HEAD_INIT,
"_gdb.disassembler",
nullptr,
-1,
nullptr,
nullptr,
nullptr,
nullptr
}
PyMethodDef python_disassembler_methods[]
Definition py-disasm.c:989

Definition at line 1006 of file py-disasm.c.

Referenced by gdbpy_initialize_disasm().

◆ python_print_insn_enabled

bool python_print_insn_enabled = false
static

Definition at line 83 of file py-disasm.c.

Referenced by disasmpy_set_enabled(), and gdbpy_print_insn().