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

Uploaded Source

Built Distribution

File details

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

File metadata

File hashes

Hashes for gtirb-live-register-analysis-0.0.5.tar.gz
Algorithm Hash digest
SHA256 fcac47267d9fb24869d3ee014fee63695ff654fb5500323e0214f03fc78bfe67
MD5 b7ee13c77f8f12608d96935067ad266f
BLAKE2b-256 a9f11f8be9d4e950b322e833970252cae24fd8ddab6a19fcbb45b6d934f1d6d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gtirb_live_register_analysis-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 068c10ec8440a4ad7d94a2c0561b336a230ce4ffa133b83f553194042007f1ad
MD5 89afd30967819a53a8201e0f1b810887
BLAKE2b-256 90a4dedaeb8493fe64b07f8a11ee7d82d90a111b7212ad3e3c1e93d3f32908ea

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