package linksem
A formalisation of the core ELF and DWARF file formats written in Lem
Install
Dune Dependency
Authors
Maintainers
Sources
0.8.tar.gz
md5=2075c56715539b3b8f54ae65cc808b8c
sha512=f7c16e4036a1440a6a8d13707a43f0f9f9db0c68489215f948cc300b6a164dba5bf852e58f89503e9d9f38180ee658d9478156ca1a1ef64d6861eec5f9cf43d2
doc/linksem_zarith/Memory_image/index.html
Module Memory_image
Source
Source
type element = {
startpos : Nat_big_num.num option;
length1 : Nat_big_num.num option;
contents : Byte_pattern.byte_pattern;
}
Source
type expr_operand =
| Var of string
| CursorPosition
| Constant of Nat_big_num.num
| UnOp of expr_unary_operation * expr_operand
| BinOp of expr_binary_operation * expr_operand * expr_operand
Source
and expr_binary_operation =
| Add of expr_operand * expr_operand
| Sub of expr_operand * expr_operand
| BitwiseAnd of expr_operand * expr_operand
| BitwiseOr of expr_operand * expr_operand
Source
type expr =
| False
| True
| Not of expr
| And of expr * expr
| Or of expr * expr
| BinRel of expr_binary_relation * expr_operand
Source
type elf_file_feature =
| ElfHeader of Elf_header.elf64_header
| ElfSectionHeaderTable of Elf_section_header_table.elf64_section_header_table
| ElfProgramHeaderTable of Elf_program_header_table.elf64_program_header_table
| ElfSection of Nat_big_num.num * Elf_interpreted_section.elf64_interpreted_section
| ElfSegment of Nat_big_num.num * Elf_interpreted_segment.elf64_interpreted_segment
Source
type symbol_definition = {
def_symname : string;
def_syment : Elf_symbol_table.elf64_symbol_table_entry;
def_sym_scn : Nat_big_num.num;
def_sym_idx : Nat_big_num.num;
def_linkable_idx : Nat_big_num.num;
}
Source
val instance_Basic_classes_Ord_Memory_image_symbol_definition_dict :
symbol_definition Lem_basic_classes.ord_class
Source
type symbol_reference = {
ref_symname : string;
ref_syment : Elf_symbol_table.elf64_symbol_table_entry;
ref_sym_scn : Nat_big_num.num;
ref_sym_idx : Nat_big_num.num;
}
Source
val instance_Basic_classes_Ord_Memory_image_symbol_reference_dict :
symbol_reference Lem_basic_classes.ord_class
Source
type reloc_site = {
ref_relent : Elf_relocation.elf64_relocation_a;
ref_rel_scn : Nat_big_num.num;
ref_rel_idx : Nat_big_num.num;
ref_src_scn : Nat_big_num.num;
}
Source
val instance_Basic_classes_Ord_Memory_image_reloc_site_dict :
reloc_site Lem_basic_classes.ord_class
Source
type reloc_decision =
| LeaveReloc
| ApplyReloc
| ChangeRelocTo of Nat_big_num.num * symbol_reference * reloc_site
Source
val instance_Basic_classes_Ord_Memory_image_reloc_decision_dict :
reloc_decision Lem_basic_classes.ord_class
Source
type symbol_reference_and_reloc_site = {
ref : symbol_reference;
maybe_reloc : reloc_site option;
maybe_def_bound_to : (reloc_decision * symbol_definition option) option;
}
Source
val symRefAndRelocSiteCompare :
symbol_reference_and_reloc_site ->
symbol_reference_and_reloc_site ->
int
Source
val instance_Basic_classes_Ord_Memory_image_symbol_reference_and_reloc_site_dict :
symbol_reference_and_reloc_site Lem_basic_classes.ord_class
Source
type 'abifeature range_tag =
| ImageBase
| EntryPoint
| SymbolDef of symbol_definition
| SymbolRef of symbol_reference_and_reloc_site
| FileFeature of elf_file_feature
| AbiFeature of 'abifeature
Source
type 'abifeature annotated_memory_image = {
elements : memory_image;
by_range : (element_range option * 'abifeature range_tag) Pset.set;
by_tag : ('abifeature range_tag, element_range option) Multimap.multimap;
}
Source
type reloc_calculate_fn =
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num
Source
type 'abifeature reloc_apply_fn =
'abifeature annotated_memory_image ->
Nat_big_num.num ->
symbol_reference_and_reloc_site ->
Nat_big_num.num * reloc_calculate_fn
Source
val noop_reloc_apply :
'a ->
'b ->
'c ->
Nat_big_num.num
* (Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num)
Source
val noop_reloc :
'a ->
bool
* ('abifeature annotated_memory_image ->
Nat_big_num.num ->
symbol_reference_and_reloc_site ->
Nat_big_num.num * reloc_calculate_fn)
Source
type 'abifeature abi = {
is_valid_elf_header : Elf_header.elf64_header -> bool;
make_elf_header : Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num -> Elf_header.elf64_header;
reloc : 'abifeature reloc_fn;
section_is_special : Elf_interpreted_section.elf64_interpreted_section -> 'abifeature annotated_memory_image -> bool;
section_is_large : Elf_interpreted_section.elf64_interpreted_section -> 'abifeature annotated_memory_image -> bool;
maxpagesize : Nat_big_num.num;
minpagesize : Nat_big_num.num;
commonpagesize : Nat_big_num.num;
symbol_is_generated_by_linker : string -> bool;
make_phdrs : Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num -> 'abifeature annotated_memory_image -> Elf_interpreted_section.elf64_interpreted_section list -> Elf_program_header_table.elf64_program_header_table_entry list;
max_phnum : Nat_big_num.num;
guess_entry_point : 'abifeature annotated_memory_image -> Nat_big_num.num option;
pad_data : Nat_big_num.num -> char list;
pad_code : Nat_big_num.num -> char list;
generate_support : (string * 'abifeature annotated_memory_image) list -> 'abifeature annotated_memory_image;
concretise_support : 'abifeature annotated_memory_image -> 'abifeature annotated_memory_image;
get_reloc_symaddr : symbol_definition -> 'abifeature annotated_memory_image -> (element_range option * symbol_definition) list -> reloc_site option -> Nat_big_num.num;
parse_reloc_info : Uint64_wrapper.uint64 -> Nat_big_num.num * Nat_big_num.num;
}
Source
val address_of_range :
(string * (Nat_big_num.num * 'a)) ->
'b annotated_memory_image ->
Nat_big_num.num
Source
val range_contains :
(Nat_big_num.num * Nat_big_num.num) ->
(Nat_big_num.num * Nat_big_num.num) ->
bool
Source
val range_overlaps :
(Nat_big_num.num * Nat_big_num.num) ->
(Nat_big_num.num * Nat_big_num.num) ->
bool
Source
val is_partition :
(Nat_big_num.num * Nat_big_num.num) list ->
(Nat_big_num.num * Nat_big_num.num) list ->
bool
Source
val expand_sorted_ranges :
(Nat_big_num.num * Nat_big_num.num) list ->
Nat_big_num.num ->
bool list ->
bool list
Source
val expand_unsorted_ranges :
(Nat_big_num.num * Nat_big_num.num) list ->
Nat_big_num.num ->
bool list ->
bool list
Source
val swap_pairs :
'a Lem_basic_classes.setType_class ->
'b Lem_basic_classes.setType_class ->
('b * 'a) Pset.set ->
('a * 'b) Pset.set
Source
val by_range_from_by_tag :
'a Lem_basic_classes.setType_class ->
'b Lem_basic_classes.setType_class ->
('a * 'b) Pset.set ->
('b * 'a) Pset.set
Source
val by_tag_from_by_range :
'a Lem_basic_classes.setType_class ->
'b Lem_basic_classes.setType_class ->
('a * 'b) Pset.set ->
('b * 'a) Pset.set
Source
val filter_elements :
((string * element) -> bool) ->
'abifeature annotated_memory_image ->
'abifeature annotated_memory_image
Source
val tag_image :
'abifeature range_tag ->
string ->
Nat_big_num.num ->
Nat_big_num.num ->
'abifeature annotated_memory_image ->
'abifeature annotated_memory_image
Source
val address_to_element_and_offset :
Nat_big_num.num ->
'a annotated_memory_image ->
(string * Nat_big_num.num) option
Source
val element_and_offset_to_address :
(string * Nat_big_num.num) ->
'a annotated_memory_image ->
Nat_big_num.num option
Source
val pattern_possible_starts_in_one_byte_sequence :
'a option list ->
'a list ->
Nat_big_num.num ->
Nat_big_num.num list
Source
val compute_virtual_address_adjustment :
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num
Source
val natural_to_byte_list_padded_to :
Endianness.endianness ->
Nat_big_num.num ->
Nat_big_num.num ->
char list
Source
val read_memory_image :
'a annotated_memory_image ->
Nat_big_num.num ->
Nat_big_num.num ->
char list option
Source
val read_memory_image_byte_sequence :
'a annotated_memory_image ->
Nat_big_num.num ->
Nat_big_num.num ->
Byte_sequence_wrapper.byte_sequence option
Source
val write_memory_image :
'abifeature annotated_memory_image ->
Nat_big_num.num ->
Byte_pattern.byte_pattern_element list ->
'abifeature annotated_memory_image
Source
val mask_memory_image :
'a annotated_memory_image ->
Nat_big_num.num ->
Nat_big_num.num ->
'a annotated_memory_image
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>