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

Uploaded Source

Built Distribution

File details

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

File metadata

File hashes

Hashes for gtirb-live-register-analysis-0.0.1.tar.gz
Algorithm Hash digest
SHA256 4b9eda5522a35f67b351cff9e68646492bfee4d3daa1624dd0b097c8b91fa149
MD5 33a6ec724291bb9545377527c576b2d1
BLAKE2b-256 1d1621061405e32f0f95adf3f9197fcba02be386bd45d9c89e73c00c68cda9ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gtirb_live_register_analysis-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b17c75ff65fa617c5845cfbf2fbafdfb53e353830584c58b2c36594de1904ca1
MD5 446009613b6bcf24f15a1ef17ba84fe5
BLAKE2b-256 70c35e08be6d849bd56ddaf0db99a1634d799f68fe49b95b23fd513fb1ef16fd

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