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.1.post1.tar.gz.

File metadata

File hashes

Hashes for gtirb-live-register-analysis-0.0.1.post1.tar.gz
Algorithm Hash digest
SHA256 de081669ccc376f114c83d3ff54869a3e9d2d0123d66f260f01f39f84df75d35
MD5 91c9170be6c610c23537ba2c0cc6e010
BLAKE2b-256 66d6869c8cf9ef7ac11e3bc1bcdb9401899dd8b191dbfe79d9f3dea3c3eaf859

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gtirb_live_register_analysis-0.0.1.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 dd76a37d54d21001f455d96c0e83a8bb0eaf0557e644f10566344c99be8c19ae
MD5 617e3fb385fd25a25796a2e5de8da447
BLAKE2b-256 2fcc641f18f3d63b9675dd43c9595cd55a5447791ee32909c753118249fe0bf6

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