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

Built Distribution

File details

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

File metadata

File hashes

Hashes for gtirb-live-register-analysis-0.0.5.post1.tar.gz
Algorithm Hash digest
SHA256 95832190f9ab0488f3e9927a9e2c08ecabe0f13e09b5cca003e0962ee1bd608b
MD5 4283da0a985b6a30fcfada8e1d27154a
BLAKE2b-256 ade9b5938b0afca9598e3aef1f8a8f76dd621798eb1aa47362ddc82f6d06228d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gtirb_live_register_analysis-0.0.5.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 851fd3fe82ff8db09d87e64bb7bc034f938d52d0a89b24c64c4c2c408e8a56a3
MD5 ebc236b63aae4e620234b10f10b3f031
BLAKE2b-256 6b13402aff78733aeeef517d20894d609d4bffd277129c207344f85c2dba8fdb

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