CGC

class cle.backends.cgc.CGC[source]

Bases: ELF

Backend to support the CGC elf format used by the Cyber Grand Challenge competition.

See : https://github.com/CyberGrandChallenge/libcgcef/blob/master/cgc_executable_format.md

is_default = True
__init__(binary, binary_stream, *args, **kwargs)[source]
Parameters:
  • binary – The path to the binary to load

  • binary_stream – The open stream to this binary. The reference to this will be held until you call close.

  • is_main_bin – Whether this binary should be loaded as the main executable

static is_compatible(stream)[source]

Determine quickly whether this backend can load an object from this stream

supported_filetypes = ['cgc']
class cle.backends.cgc.BackedCGC[source]

Bases: CGC

This is a backend for CGC executables that allows user provide a memory backer and a register backer as the initial state of the running binary.

is_default = True
__init__(*args, memory_backer=None, register_backer=None, writes_backer=None, permissions_map=None, current_allocation_base=None, **kwargs)[source]
Parameters:
  • path – File path to CGC executable.

  • memory_backer – A dict of memory content, with beginning address of each segment as key and actual memory content as data.

  • register_backer – A dict of all register contents. EIP will be used as the entry point of this executable.

  • permissions_map – A dict of memory region to permission flags

  • current_allocation_base – An integer representing the current address of the top of the CGC heap.

static is_compatible(stream)[source]

Determine quickly whether this backend can load an object from this stream

property threads

If this backend represents a dump of a running program, it may contain one or more thread contexts, i.e. register files. This property should contain a list of names for these threads, which should be unique.

thread_registers(thread=None)[source]

If this backend represents a dump of a running program, it may contain one or more thread contexts, i.e. register files. This method should return the register file for a given thread (as named in Backend.threads) as a dict mapping register names (as seen in archinfo) to numbers. If the thread is not specified, it should return the context for a “default” thread. If there are no threads, it should return an empty dict.

class cle.backends.cgc.cgc.CGC[source]

Bases: ELF

Backend to support the CGC elf format used by the Cyber Grand Challenge competition.

See : https://github.com/CyberGrandChallenge/libcgcef/blob/master/cgc_executable_format.md

is_default = True
__init__(binary, binary_stream, *args, **kwargs)[source]
Parameters:
  • binary – The path to the binary to load

  • binary_stream – The open stream to this binary. The reference to this will be held until you call close.

  • is_main_bin – Whether this binary should be loaded as the main executable

static is_compatible(stream)[source]

Determine quickly whether this backend can load an object from this stream

supported_filetypes = ['cgc']
addr_to_line: SortedDict[int, set[tuple[int, int]]]
variables: list[Variable] | None
compilation_units: list[CompilationUnit] | None
load_args: dict[str, Any]
unpacked_name: str | None
imports: dict[str, Relocation]
relocs: list[Relocation]
child_objects: list[Backend]
exception_handlings: list[ExceptionHandling]
function_hints: list[FunctionHint]
memory: Clemory
cached_content: bytes | None
class cle.backends.cgc.backedcgc.FakeSegment[source]

Bases: Segment

__init__(start, size)[source]
class cle.backends.cgc.backedcgc.BackedCGC[source]

Bases: CGC

This is a backend for CGC executables that allows user provide a memory backer and a register backer as the initial state of the running binary.

is_default = True
__init__(*args, memory_backer=None, register_backer=None, writes_backer=None, permissions_map=None, current_allocation_base=None, **kwargs)[source]
Parameters:
  • path – File path to CGC executable.

  • memory_backer – A dict of memory content, with beginning address of each segment as key and actual memory content as data.

  • register_backer – A dict of all register contents. EIP will be used as the entry point of this executable.

  • permissions_map – A dict of memory region to permission flags

  • current_allocation_base – An integer representing the current address of the top of the CGC heap.

static is_compatible(stream)[source]

Determine quickly whether this backend can load an object from this stream

property threads

If this backend represents a dump of a running program, it may contain one or more thread contexts, i.e. register files. This property should contain a list of names for these threads, which should be unique.

thread_registers(thread=None)[source]

If this backend represents a dump of a running program, it may contain one or more thread contexts, i.e. register files. This method should return the register file for a given thread (as named in Backend.threads) as a dict mapping register names (as seen in archinfo) to numbers. If the thread is not specified, it should return the context for a “default” thread. If there are no threads, it should return an empty dict.

addr_to_line: SortedDict[int, set[tuple[int, int]]]
variables: list[Variable] | None
compilation_units: list[CompilationUnit] | None
load_args: dict[str, Any]
unpacked_name: str | None
imports: dict[str, Relocation]
relocs: list[Relocation]
child_objects: list[Backend]
exception_handlings: list[ExceptionHandling]
function_hints: list[FunctionHint]
memory: Clemory
cached_content: bytes | None