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

Uploaded Source

Built Distribution

File details

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

File metadata

File hashes

Hashes for gtirb-live-register-analysis-0.0.8.tar.gz
Algorithm Hash digest
SHA256 6257b223e929b6fb3e8a61618a404952a00fec053cd37073250e4e012d17d2a8
MD5 819df99cf2c1d5155b19192978454c0f
BLAKE2b-256 0aa653a1392d6eeb967c375b9ab3f064fc776ed5f5fa5dd97c1bcebe09a903c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gtirb_live_register_analysis-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 1fef9f0a812fcaa37d8a9f80e3e8077c29a68c039c61cf347169cca11e27d08e
MD5 6263c0481edc373c366b06c0372cd1c6
BLAKE2b-256 415070d1a2b943c2511b79b43db8a89d91d885f6b26bc0ec05e29d1c4a5d415d

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