Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions libvmi/libvmi.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,22 @@ def __setitem__(self, index, value):
raise_from(RuntimeError('Unknown field {} in regs.x86'
.format(index.name.lower())), e)

def __str__(self):
# Heuristic to determine the architecture
if hasattr(self.cffi_regs.x86, 'rip') or hasattr(self.cffi_regs.x86, 'eip'):
regs_to_print = self.cffi_regs.x86
elif hasattr(self.cffi_regs.arm, 'pc'):
regs_to_print = self.cffi_regs.arm
else:
raise RuntimeError("Unable to determine architecture")
attributes = []
for attr in dir(regs_to_print):
if not attr.startswith('_'):
value = getattr(regs_to_print, attr)
attributes.append(f"{attr.lower()} = {value:#x}")

return '\n'.join(attributes)


class VMIMode(Enum):
XEN = lib.VMI_XEN
Expand All @@ -150,6 +166,8 @@ class VMIConfig(Enum):
GLOBAL_FILE_ENTRY = lib.VMI_CONFIG_GLOBAL_FILE_ENTRY
STRING = lib.VMI_CONFIG_STRING
DICT = lib.VMI_CONFIG_GHASHTABLE
JSON_PATH = lib.VMI_CONFIG_JSON_PATH
FILE_PATH = lib.VMI_CONFIG_FILE_PATH


class VMIStatus(Enum):
Expand Down Expand Up @@ -318,8 +336,8 @@ def __init__(self, domain, init_flags=INIT_DOMAINNAME, init_data=None,
# from str to bytes
if init_flags & INIT_DOMAINNAME or init_flags & INIT_DOMAINID:
domain = domain.encode()
# same for VMI_CONFIG_STRING
if config_mode == VMIConfig.STRING:
# same for VMI_CONFIG_STRING | VMI_CONFIG_FILE_PATH | VMI_CONFIG_JSON_PATH
if config_mode in [VMIConfig.STRING, VMIConfig.FILE_PATH, VMIConfig.JSON_PATH]:
config = config.encode()
elif config_mode == VMIConfig.DICT:
# need to convert config to a GHashTable
Expand Down
4 changes: 4 additions & 0 deletions libvmi/libvmi_cdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@ typedef enum vmi_config {
VMI_CONFIG_STRING, /**< config string provided */

VMI_CONFIG_GHASHTABLE, /**< config GHashTable provided */

VMI_CONFIG_JSON_PATH, /**< config in json file at the location provided */

VMI_CONFIG_FILE_PATH, /**< config file path provided */
} vmi_config_t;

// vmi_mode
Expand Down