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.10.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gtirb_live_register_analysis-0.0.10-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for gtirb-live-register-analysis-0.0.10.tar.gz
Algorithm Hash digest
SHA256 9dcbd921c92139ba3bab3ac7d0e69a5ec324ab16d67e6a3c3ef041e8ac5bd1bd
MD5 67b7323e27f2aa59b223d2734a56d4a6
BLAKE2b-256 d4f4fea508f6a594596b9068044f85ccd8c6cafab7d0dc163e4ecdb27f1bdfbe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gtirb_live_register_analysis-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 5ad0d569d6eb6c55976e9b1a4c066e51ead925f20477153a403f59f6304caaa2
MD5 e095572fc8c6ea856652dfd3b006276e
BLAKE2b-256 37524aad20ed0f7038271d2c3268231643e3b8882eed689a41725f1994478089

See more details on using hashes here.

Supported by

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