Created
March 24, 2024 17:20
-
-
Save mdaniel/cdf52de6a8aa8982d591da82b160a229 to your computer and use it in GitHub Desktop.
extracted from ipg-pldi-ae.tar in https://zenodo.org/records/7811236
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ELF -> H[0,128] | |
for i = 0 to H.e_shnum in (SH[H.e_shoff+i*H.e_shentsize, H.e_shoff+(i+1)*H.e_shentsize]) | |
for i = 1 to H.e_shnum in (Sec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size]) | |
where Sec -> | |
switch(SH(i).sh_type = 6 -> DynSec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size] | |
/ SH(i).sh_type = 3 -> StrSec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size] | |
/ (SH(i).sh_type = 11) || (SH(i).sh_type = 2) -> DynSymSec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size] | |
/ SH(i).sh_type = 7 -> NoteSec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size] | |
/ SH(i).sh_type = 9 -> RelSec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size] | |
/ SH(i).sh_type = 4 -> RelAddEndSec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size] | |
/ SH(i).sh_type = 8 -> "@data"[0,0] | |
/ "@data"[0, EOI]) | |
; | |
H -> "ELF"[1, 4] | |
{ ei_class = btoi[4, 5] } | |
{ ei_data = btoi[5, 6] } | |
{ ei_version = btoi[6, 7] } | |
{ abi = btoi[7, 8] } | |
{ abi_version = btoi[8, 9] } | |
{ e_type = btoi[16,18] } | |
{ e_machine = btoi[18,20] } | |
{ e_version = btoi[20,24] } | |
{ e_entry = btoi[24,32] } | |
{ e_phoff = btoi[32,40] } | |
{ e_shoff = btoi[40,48] } | |
{ e_flags = btoi[48,52] } | |
{ e_ehsize = btoi[52,54] } | |
{ e_phentsize = btoi[54,56] } | |
{ e_phnum = btoi[56,58] } | |
{ e_shentsize = btoi[58,60] } | |
{ e_shnum = btoi[60,62] } | |
{ e_shstrndx = btoi[62,64] } | |
; | |
SH -> { sh_name = btoi[0,4], | |
sh_type = btoi[4,8], | |
sh_flags = btoi[8,16], | |
sh_addr = btoi[16,24], | |
sh_offset = btoi[24,32], | |
sh_size = btoi[32,40], | |
sh_link = btoi[40,44], | |
sh_info = btoi[44,48], | |
sh_addralign = btoi[48,52], | |
sh_entsize = btoi[52,60] } | |
; | |
DynSec -> for i = 0 to EOI/16 in (DynSecEntry[16 * i, 16 * (i+1)]) | |
; | |
DynSecEntry -> { tag = btoi[0, 8], value_or_ptr = btoi[8, 16] } | |
; | |
StrSec -> Str[0,EOI] StrSec[Str.end,EOI] | |
/ Str[0,EOI] | |
; | |
Str -> "\x00"[0,1] / "@data"[0,1] Str[1, EOI] | |
; | |
DynSymSec -> for i = 0 to EOI/24 in (DynSymSecEntry[24 * i, 24 * (i+1)]) | |
; | |
DynSymSecEntry -> { sh_name = btoi[0,4], | |
st_info = btoi[4,5], | |
st_other = btoi[5,6], | |
st_shndx = btoi[6,8], | |
st_value = btoi[8,16], | |
st_size = btoi[16,24] } | |
; | |
NoteSec -> NoteSecEntry[0,EOI] NoteSec[NoteSecEntry.end, EOI] | |
/ NoteSecEntry[0,EOI] | |
; | |
NoteSecEntry -> { len_name = btoi[0,4] } | |
{ len_descriptor = btoi[4,8] } | |
{ type = btoi[8,12] } | |
Name[12,12+len_name] | |
"@data"[12+len_name,12+len_name+(0-len_name)%4] | |
Descriptor[12+len_name+(0-len_name)%4, 12+len_name+(0-len_name)%4+len_descriptor] | |
"@data"[12+len_name+(0-len_name)%4+len_descriptor, 12+len_name+(0-len_name)%4+len_descriptor+(0-len_descriptor)%4] | |
; | |
Name -> "@data"[0,EOI-1] "\x00"[EOI-1,EOI] | |
; | |
Descriptor -> "@data"[0,EOI] | |
; | |
RelAddEndSec -> for i = 0 to EOI/24 in (RelAddEndSecEntry[24 * i, 24 * (i+1)]) | |
; | |
RelAddEndSecEntry -> { offset = btoi[0,8] } | |
{ info = btoi[8,16] } | |
{ addend = btoi[16,24] } | |
; | |
RelSec -> for i = 0 to EOI/16 in (RelSecEntry[16 * i, 16 * (i+1)]) | |
; | |
RelSecEntry -> { offset = btoi[0,8] } | |
{ info = btoi[8,16] } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ELF -> H[0,128] | |
for i = 1 to H.e_shnum in (switch(SH(i).sh_type = 11 -> DynSymSec[SH(i).sh_offset, SH(i).sh_offset+SH(i).sh_size] / "@data"[0, 1])) | |
for i = 0 to H.e_shnum in (SH[H.e_shoff+i*H.e_shentsize, H.e_shoff+(i+1)*H.e_shentsize]) | |
; | |
H -> "ELF"[1, 4] | |
{ ei_class = btoi[4, 5] } | |
{ ei_data = btoi[5, 6] } | |
{ ei_version = btoi[6, 7] } | |
{ abi = btoi[7, 8] } | |
{ abi_version = btoi[8, 9] } | |
{ e_type = btoi[16,18]} | |
{ e_machine = btoi[18,20]} | |
{ e_version = btoi[20,24]} | |
{ e_entry = btoi[24,32]} | |
{ e_phoff = btoi[32,40]} | |
{ e_shoff = btoi[40,48]} | |
{ e_flags = btoi[48,52]} | |
{ e_ehsize = btoi[52,54]} | |
{ e_phentsize = btoi[54,56]} | |
{ e_phnum = btoi[56,58]} | |
{ e_shentsize = btoi[58,60]} | |
{ e_shnum = btoi[60,62]} | |
{ e_shstrndx = btoi[62,64]} | |
; | |
SH -> { sh_name = btoi[0,4], | |
sh_type = btoi[4,8], | |
sh_flags = btoi[8,16], | |
sh_addr = btoi[16,24], | |
sh_offset = btoi[24,32], | |
sh_size = btoi[32,40], | |
sh_link = btoi[40,44], | |
sh_info = btoi[44,48], | |
sh_addralign = btoi[48,56], | |
sh_entsize = btoi[56, 64] } | |
; | |
DynSymSec -> for i = 0 to EOI/24 in (DynSymSecEntry[24 * i, 24 * (i+1)]) | |
; | |
DynSymSecEntry -> { sh_name = btoi[0,4], | |
st_info = btoi[4,5], | |
st_other = btoi[5,6], | |
st_shndx = btoi[6,8], | |
st_value = btoi[8,16], | |
st_size = btoi[16,24] } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
GIF -> "GIF"[0, 3] "@data"[3, 6] LSD[6, EOI] Blocks[LSD.end, EOI] | |
; | |
LSD -> { logical_width = btoi[0,2] } | |
{ logical_height = btoi[2,4] } | |
{ flag = btoi[4,5] } | |
{ background_color = btoi[5,6] } | |
{ pixel_aspect_ratio = btoi[6,7], | |
has_color_table = flag >> 7, | |
color_table_size = 3*(2 << (flag & 7)) } | |
switch ( has_color_table=1 -> ColorTable[7, 7+color_table_size] | |
/ ""[0,0] ) | |
; | |
Blocks -> Block Blocks / Trailer | |
; | |
Block -> GraphicControlExtension | |
/ ImageDescriptor | |
/ ApplicationExtension | |
/ CommentExtension | |
; | |
Trailer -> "\x3B" | |
; | |
GraphicControlExtension -> "\x21\xF9"[0,2] | |
{ size = btoi[2,3] } | |
{ packed_field = btoi[3,4] } | |
{ delay_time = btoi[4,6] } | |
{ transparent_color_index = btoi[6,7] } | |
"\x00"[7, 8] | |
; | |
ImageDescriptor -> "\x2c"[0,1] | |
{ image_left = btoi[1,3] } | |
{ image_top = btoi[3,5] } | |
{ image_width = btoi[5,7] } | |
{ image_height = btoi[7,9] } | |
{ packed_field = btoi[9,10], | |
lct_flag = packed_field >> 7, | |
lct_size = lct_flag*(3*(2 << (packed_field & 7))) } | |
switch (lct_flag=1 -> ColorTable[10, 10+lct_size] / ""[0, 0]) | |
"@data"[10+lct_size, 10+lct_size+1] | |
ImageData[10+lct_size+1, EOI] | |
; | |
ApplicationExtension -> "\x21\xFF"[0,2] | |
{ size = btoi[2,3] } | |
"@data"[3,3+size] | |
ImageData[3+size, EOI] | |
; | |
ImageData -> "\x00"[0, 1] | |
/ { size = btoi[0,1] } | |
"@data"[1, 1+size] ImageData[1+size, EOI] | |
; | |
CommentExtension -> "\x21\xFE"[0,2] | |
{ size = btoi[2,3] } | |
"@data"[3,3+size] | |
"\x00"[3+size, 4+size] | |
; | |
ColorTable -> RGB[0,3] ColorTable[3,EOI] / RGB[0,3] | |
; | |
RGB -> { R = btoi[0,1] } | |
{ G = btoi[1,2] } | |
{ B = btoi[2,3] } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Ipfour -> { vi = btoi[0, 1], | |
version = vi >> 4, | |
ihl = vi & 0x15 } | |
{ de = btoi[1, 2], | |
dscp = de >> 2, | |
ecn = de & 0x3 } | |
{ totallength = btoi[2, 4] } | |
{ ident = btoi[4, 6] } | |
{ zdmf = btoi[6, 8], | |
zero = zdmf >> 15, | |
df = (zdmf >> 14) & 0x1, | |
mf = (zdmf >> 13) & 0x1, | |
fragmentoff = zdmf & 0x1FFF } | |
{ ttl = btoi[8, 9] } | |
{ protocol = btoi[9, 10] } | |
{ hdrchecksum = btoi[10, 12] } | |
{ source = btoi[12, 16] } | |
{ dest = btoi[16, 20] } | |
Udp[20, EOI]; | |
Udp -> { src = btoi[0, 2] } | |
{ dest = btoi[2, 4] } | |
{ len = btoi[4, 6] } | |
{ checksum = btoi[6, 8] } | |
for i = 0 to (len-8) in ("@data"[8+i, 8+i+1]); | |
Int -> { v = btoi[0,1] } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pe -> "MZ"[0,2] "@data"[2,60] { ofs_pe=btoi[60,64] } | |
"PE\x00\x00"[ofs_pe,ofs_pe+4] CoffHdr[ofs_pe+4,ofs_pe+24] { hdr_end = 24+CoffHdr.SizeOfOptionalHeader } | |
OptionalHdr[ofs_pe+24,ofs_pe+hdr_end] | |
for i = 0 to CoffHdr.NumSections in (section[ofs_pe+hdr_end+40*i,ofs_pe+hdr_end+40*(i+1)]) | |
for i = 0 to CoffHdr.NumSections in ("@data"[ofs_pe+section(i).data_ofs,ofs_pe+section(i).data_ofs + section(i).data_size]) | |
switch ( OptionalHdr.CertificateTableVa = 0 -> ""[0, 0] | |
/ certificate_table[OptionalHdr.CertificateTableVa, OptionalHdr.CertificateTableVa+OptionalHdr.certificate_table_size]) | |
; | |
CoffHdr -> { machine = btoi[0,2], | |
NumSections = btoi[2,4], | |
TimeDateStamp = btoi[4,8], | |
PointerToSymbolTable = btoi[8,12], | |
NumSymbols = btoi[12,16], | |
SizeOfOptionalHeader = btoi[16,18], | |
characteristics = btoi[18,20] } | |
for i = 0 to NumSymbols in (CoffSymbol[PointerToSymbolTable+18*i,PointerToSymbolTable+18*(i+1)]) | |
; | |
CoffSymbol -> { name_zeroes = btoi[0,4], | |
name_offset = btoi[4,8], | |
value = btoi[8,12], | |
section_number = btoi[12,14], | |
type = btoi[14,16], | |
storage_class = btoi[16,17], | |
number_of_aux_symbols = btoi[17,18] } | |
; | |
OptionalHdr -> OptionalHeaderStd[0,24] OptionalHeaderWindows[24,112] OptionalHeaderDataDirs[112,232] | |
{ CertificateTableVa = OptionalHeaderDataDirs.CertificateTableVa, | |
certificate_table_size = OptionalHeaderDataDirs.certificate_table_size } | |
; | |
OptionalHeaderStd -> { format = btoi[0,2], | |
major_linker_version = btoi[2,3], | |
minor_linker_version = btoi[3,4], | |
size_of_code = btoi[4,8], | |
size_of_initialized_data = btoi[8,12], | |
size_of_uninitialized_data = btoi[12,16], | |
address_of_entry_point = btoi[16,20], | |
base_of_code = btoi[20,24] } | |
; | |
OptionalHeaderWindows -> { image_base_64 = btoi[0,8], | |
section_alignment = btoi[8,12], | |
file_alignment = btoi[12,16], | |
major_operating_system_version = btoi[16,18], | |
minor_operating_system_version = btoi[18,20], | |
major_image_version = btoi[20,22], | |
minor_image_version = btoi[22,24], | |
major_subsystem_version = btoi[24,26], | |
minor_subsystem_version = btoi[26,28], | |
win32_version_value = btoi[28,32], | |
size_of_image = btoi[32,36], | |
size_of_headers = btoi[36,40], | |
check_sum = btoi[40,44], | |
subsystem = btoi[44,46], | |
dll_characteristics = btoi[46,48], | |
size_of_stack_reserve_64 = btoi[48,56], | |
size_of_stack_commit_64 = btoi[56,64], | |
size_of_heap_reserve_64 = btoi[64,72], | |
size_of_heap_commit_64 = btoi[72,80], | |
loader_flags = btoi[80,84], | |
number_of_rva_and_sizes = btoi[84,88] } | |
; | |
OptionalHeaderDataDirs -> DataDir[0,8] | |
DataDir[8,16] | |
DataDir[16,24] | |
DataDir[24,32] | |
DataDir[32,40] | |
{ CertificateTableVa = DataDir.VirtualAddress, | |
certificate_table_size = DataDir.size } | |
DataDir[40,48] | |
DataDir[48,56] | |
DataDir[56,64] | |
DataDir[64,72] | |
DataDir[72,80] | |
DataDir[80,88] | |
DataDir[88,96] | |
DataDir[96,104] | |
DataDir[104,112] | |
DataDir[112,120] | |
; | |
DataDir -> { VirtualAddress = btoi[0,4], size = btoi[4,8] } | |
; | |
section -> "@data"[0,8] | |
{ virtual_size = btoi[8,12], | |
VirtualAddress = btoi[12,16], | |
data_size = btoi[16,20], | |
data_ofs = btoi[20,24], | |
pointer_to_relocations = btoi[24,28], | |
pointer_to_linenumbers = btoi[28,32], | |
number_of_relocations = btoi[32,34], | |
number_of_linenumbers = btoi[34,36], | |
characteristics = btoi[36,40] } | |
; | |
certificate_table -> CertificateEntry[0,EOI] certificate_table[CertificateEntry.end,EOI] | |
/ CertificateEntry[0,EOI] | |
; | |
CertificateEntry -> { length = btoi[0,4], | |
revision = btoi[4,6], | |
certificate_type = btoi[6,8] } | |
"@data"[8,length] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
include: "decompress.h" | |
extern: decompress:output_t | |
zip -> sections | |
; | |
sections -> section sections / section | |
; | |
section -> "PK"[0,2] { type = btoi[2,4] } | |
switch( type = 513 -> CentralDirEty[4,EOI] | |
/ type = 1027 -> LocalFile[4,EOI] | |
/ type = 1541 -> EndOfCentralDir[4,EOI] | |
/ type = 2055 -> DataDescriptor[4,EOI] | |
/ "err"[1,0]) | |
; | |
DataDescriptor -> { crc32 = btoi[0,4], | |
len_body_compressed = btoi[4,8], | |
len_body_uncompressed = btoi[8,12] } | |
; | |
LocalFileHeader -> { version0 = btoi[0,1], | |
version1 = btoi[1,2], | |
gp_flags = btoi[2,4], | |
compression_method = btoi[4,6], | |
last_mod_dos_datetime = btoi[6, 10], | |
crc32 = btoi[10,14], | |
len_body_compressed = btoi[14,18], | |
len_body_uncompressed = btoi[18,22], | |
len_file_name = btoi[22,24], | |
len_extra = btoi[24,26] } | |
"@data"[26,26 + len_file_name] | |
"@data"[26 + len_file_name,26 + len_file_name + len_extra] | |
; | |
LocalFile -> LocalFileHeader[0,EOI] decompress[LocalFileHeader.end, LocalFileHeader.end + LocalFileHeader.len_body_compressed] | |
; | |
CentralDirEty -> { version_made_by0 = btoi[0,1] | |
, version_made_by1 = btoi[1,2] | |
, version_needed_to_extract0 = btoi[2,3] | |
, version_needed_to_extract1 = btoi[3,4] | |
, flags = btoi[4,6] | |
, compression_method = btoi[6,8] | |
, last_mod_dos_datetime = btoi[6, 10] | |
, crc32 = btoi[12,16] | |
, len_body_compressed = btoi[16,20] | |
, len_body_uncompressed = btoi[20,24] | |
, len_file_name = btoi[24,26] | |
, len_extra = btoi[26,28] | |
, len_comment = btoi[28,30] | |
, disk_number_start = btoi[30,32] | |
, int_file_attr = btoi[32,34] | |
, ext_file_attr = btoi[34,38] | |
, ofs_local_header = btoi[38,42] } | |
"@data"[42,42 + len_file_name] | |
"@data"[42 + len_file_name,42 + len_file_name + len_extra] | |
"@data"[42 + len_file_name + len_extra,42 + len_file_name + len_extra + len_comment] | |
; | |
EndOfCentralDir -> { disk_of_end_of_central_dir = btoi[0,2] | |
, disk_of_central_dir = btoi[2,4] | |
, num_central_dir_entries_on_disk = btoi[4,6] | |
, num_central_dir_entries_total = btoi[6,8] | |
, len_central_dir = btoi[8,12] | |
, ofs_central_dir = btoi[12,16] | |
, len_comment = btoi[16,18] } | |
"@data"[18,18 + len_comment] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
zip -> sections | |
; | |
sections -> section sections | |
/ section | |
; | |
section -> "PK"[0,2] { type = btoi[2,4] } | |
switch( type = 513 -> CentralDirEty[4,EOI] | |
/ type = 1027 -> LocalFile[4,EOI] | |
/ type = 1541 -> EndOfCentralDir[4,EOI] | |
/ type = 2055 -> DataDescriptor[4,EOI] | |
/ err[1,0]) | |
; | |
DataDescriptor -> { crc32 = btoi[0,4], | |
len_body_compressed = btoi[4,8], | |
len_body_uncompressed = btoi[8,12] } | |
; | |
LocalFileHeader -> { version0 = btoi[0,1], | |
version1 = btoi[1,2], | |
gp_flags = btoi[2,4], | |
compression_method = btoi[4,6], | |
last_mod_dos_datetime = btoi[6, 10], | |
crc32 = btoi[10,14], | |
len_body_compressed = btoi[14,18], | |
len_body_uncompressed = btoi[18,22], | |
len_file_name = btoi[22,24], | |
len_extra = btoi[24,26] } | |
FileName[26,26 + len_file_name] | |
extras[26 + len_file_name,26 + len_file_name + len_extra] | |
; | |
LocalFile -> LocalFileHeader "@data"[LocalFileHeader.end, LocalFileHeader.end + LocalFileHeader.len_body_compressed] | |
; | |
CentralDirEty -> { version_made_by0 = btoi[0,1] | |
, version_made_by1 = btoi[1,2] | |
, version_needed_to_extract0 = btoi[2,3] | |
, version_needed_to_extract1 = btoi[3,4] | |
, flags = btoi[4,6] | |
, compression_method = btoi[6,8] | |
, last_mod_dos_datetime = btoi[6, 10] | |
, crc32 = btoi[12,16] | |
, len_body_compressed = btoi[16,20] | |
, len_body_uncompressed = btoi[20,24] | |
, len_file_name = btoi[24,26] | |
, len_extra = btoi[26,28] | |
, len_comment = btoi[28,30] | |
, disk_number_start = btoi[30,32] | |
, int_file_attr = btoi[32,34] | |
, ext_file_attr = btoi[34,38] | |
, ofs_local_header = btoi[38,42] } | |
FileName[42,42 + len_file_name] | |
extras[42 + len_file_name,42 + len_file_name + len_extra] | |
"@data"[42 + len_file_name + len_extra,42 + len_file_name + len_extra + len_comment] | |
; | |
EndOfCentralDir -> { disk_of_end_of_central_dir = btoi[0,2] | |
, disk_of_central_dir = btoi[2,4] | |
, num_central_dir_entries_on_disk = btoi[4,6] | |
, num_central_dir_entries_total = btoi[6,8] | |
, len_central_dir = btoi[8,12] | |
, ofs_central_dir = btoi[12,16] | |
, len_comment = btoi[16,18] } | |
"@data"[18,18 + len_comment] | |
; | |
extras -> ExtraEntry extras | |
/ ExtraEntry | |
/ ""[0,0] | |
; | |
ExtraEntry -> { code = btoi[0,2], len_body = btoi[2,4] } | |
switch( code = 10 -> ntfs[4,4 + len_body] | |
/ code = 21589 -> ExtendedTimestamp[4,4 + len_body] | |
/ code = 30837 -> InfozipUnixVarSize[4,4 + len_body] | |
/ err[1,0] ) | |
; | |
ntfs -> { reserved = btoi[0,4] } attributes[4,EOI] | |
; | |
attributes -> attribute attributes / attribute | |
; | |
attribute -> { tag = btoi[0,2], len_body = btoi[2,4] } | |
switch( tag = 1 -> attribute_1[4,4 + len_body] / err[1,0] ) | |
; | |
attribute_1 -> { last_mod_time = btoi[0,8] | |
, last_access_time = btoi[8,16] | |
, creation_time = btoi[16,24] } | |
; | |
ExtendedTimestamp -> TODO[0,EOI] | |
; | |
InfozipUnixVarSize -> { version = btoi[0,1] | |
, len_uid = btoi[1,2] } | |
"@data"[2,2 + len_uid] | |
{ len_gid = btoi[2 + len_uid, 2 + len_uid + 1] } | |
"@data"[2 + len_uid + 1, 2 + len_uid + 1 + len_gid] | |
; | |
FileName -> "@data"[0,EOI] | |
; | |
comment -> "@data"[0,EOI] | |
; | |
err -> "@data"[0,EOI] | |
; | |
TODO -> "@data"[0,EOI] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Dns -> { id = btoi[0, 2], | |
flag = btoi[2, 4], | |
qr = flag >> 15, | |
opcode = (flag >> 11) & 0xF, | |
aa = (flag >> 10) & 0x1, | |
tc = (flag >> 9) & 0x1, | |
rd = (flag >> 8) & 0x1, | |
ra = (flag >> 7) & 0x1, | |
z = (flag >> 6) & 0x1, | |
ad = (flag >> 5) & 0x1, | |
cd = (flag >> 4) & 0x1, | |
rcode = flag & 0xF } | |
assert(opcode = 0 || opcode = 1 || opcode = 2) | |
{ questioncount = btoi[4,6], | |
answercount = btoi[6,8], | |
authoritycount = btoi[8,10], | |
additionalcount = btoi[10,12] } | |
for i = 0 to questioncount in (Question[if i=0 then 12 else Question_0(i-1).end, EOI]) | |
for i = 0 to answercount in (Answer[if i=0 then (if questioncount=0 then 12 else Question(questioncount-1).end) else Answer_0(i-1).end, EOI]) | |
for i = 0 to authoritycount in (Answer[if i=0 then (if answercount=0 then (if questioncount=0 then 12 else Question(questioncount-1).end) else Answer_0(answercount-1).end) else Answer_1(i-1).end, EOI]) | |
for i = 0 to additionalcount in (Answer[if i=0 then (if authoritycount=0 then (if answercount=0 then (if questioncount=0 then 12 else Question(questioncount-1).end) else Answer_0(answercount-1).end) else Answer_1(authoritycount-1).end) else Answer_2(i-1).end, EOI]); | |
Question -> Labels | |
{ qtype = btoi[Labels.end, Labels.end+2] | |
, qclass = btoi[Labels.end+2, Labels.end+4] } | |
"@data"[Labels.end, Labels.end+4] | |
assert(qclass = 1 || qclass = 2 || qclass = 3 || qclass = 4); | |
Answer -> Labels | |
{ rtype = btoi[Labels.end, Labels.end+2] } | |
{ rclass = btoi[Labels.end+2, Labels.end+4] } | |
assert(rclass = 1 || rclass = 2 || rclass = 3 || rclass = 4) | |
{ ttl = btoi[Labels.end+4, Labels.end+8] } | |
{ rlen = btoi[Labels.end+8, Labels.end+10] } | |
for i = 0 to rlen in (Int[Labels.end+10+i, Labels.end+11+i]); | |
Labels -> { flag = btoi[0, 1] } "@data"[0,1] assert(flag = 0) | |
/ { flag = btoi[0, 1] } "@data"[0,2] assert((flag >> 6) = 3) { value = btoi[1, 2] } | |
/ { flag = btoi[0, 1] } "@data"[1, 1+flag] Labels[1+flag, EOI]; | |
Int -> { v = btoi[0, EOI] } "@data"[0, EOI] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment