Skip to main content

Utilities for dealing with live register analysis in GTIRB functions

Project description

gtirb-live-register-analysis

Overview

The gtirb-live-register-analysis package provides a Python API for live register analysis of GTIRB functions. A simple interface is also provided for working with gtirb-rewriting patches.

Supported ABIs

ISA File Format
X64 (x86-64) ELF

Getting Started

Generic Usage

from gtirb_live_register_analysis import LiveRegisterManager

reg_manager = LiveRegisterManager(module)

# Analyze function of interest
reg_manager.analyze(function)

# The sets of live and free registers can then be retrieved
live_regs = reg_manager.live_registers(function, block, instruction_idx)
free_regs = reg_manager.free_registers(function, block, instruction_idx)

Use with gtirb-rewriting patches

Wrap the decorator function around a patch function to assign free registers to be used as scratch registers. When there are not enough free registers, the library falls back to gtirb-rewriting, which generates code to spill/restore the excess registers to stack.

@reg_manager.allocate_registers(function, block, instruction_idx)
@patch_constraints(x86_syntax=X86Syntax.INTEL, scratch_registers=6)
def my_patch(self, ctx: InsertionContext):
    reg1, reg2, reg3, reg4, reg5, reg6 = ctx.scratch_registers
    return f"""
        xor {reg1}, {reg1}
        xor {reg2}, {reg2}
        xor {reg3}, {reg3}
        xor {reg4}, {reg4}
        xor {reg5}, {reg5}
        xor {reg6}, {reg6}
    """

rewriting_ctx.insert_at(block, offset, Patch.from_function(my_patch))

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gtirb-live-register-analysis-0.0.6.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file gtirb-live-register-analysis-0.0.6.tar.gz.

File metadata

File hashes

Hashes for gtirb-live-register-analysis-0.0.6.tar.gz
Algorithm Hash digest
SHA256 0151442a217db997780de3df27e6510b07acf4b089def2bb8d4a5d8d4c84fb1e
MD5 3472d5b5618a48657971e1b8ebb6055a
BLAKE2b-256 b1fa5c4835ad8f55a38773d3346a08a1be62a0001738806db8c4dd3e60b68ec4

See more details on using hashes here.

File details

Details for the file gtirb_live_register_analysis-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for gtirb_live_register_analysis-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 3f77667f313c310d8a13c263322f6ce0c9dcc2aae709becc430132e5bea242e5
MD5 4a2159111ac955f0fe758e4f1e737e2d
BLAKE2b-256 811d6e056fb516896805bf8c28b957b18a202325beb77df6b35ba86190b66181

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page