diff --git a/src/main/scala/analysis/data_structure_analysis/DataStructureAnalysis.scala b/src/main/scala/analysis/data_structure_analysis/DataStructureAnalysis.scala index 8f46c4173..286f8fceb 100644 --- a/src/main/scala/analysis/data_structure_analysis/DataStructureAnalysis.scala +++ b/src/main/scala/analysis/data_structure_analysis/DataStructureAnalysis.scala @@ -124,17 +124,30 @@ class DataStructureAnalysis(program: Program, calleeGraph.globalMapping.foreach { case (range: AddressRange, Field(node: Node, offset: BigInt)) => val field = calleeGraph.find(node) - buGraph.mergeCells( + val res = buGraph.mergeCells( buGraph.globalMapping(range).node.getCell(buGraph.globalMapping(range).offset), field.node.getCell(field.offset + offset) ) + + val size = res.node.get.getSize - res.offset + buGraph.getStackOffsets(res).foldLeft(res) { + (cell, offset) => + buGraph.mergeCells(cell, buGraph.getStack(offset, size.toInt)) + } } if (buGraph.varToCell.contains(callee)) { buGraph.varToCell(callee).keys.foreach { variable => if (!ignoreRegisters.contains(variable)) { val formal = buGraph.varToCell(callee)(variable) - buGraph.mergeCells(buGraph.adjust(formal), buGraph.adjust(callSite.paramCells(variable))) + val res = buGraph.mergeCells(buGraph.adjust(formal), buGraph.adjust(callSite.paramCells(variable))) + + val size = res.node.get.getSize - res.offset + buGraph.getStackOffsets(res).foldLeft(res) { + (cell, offset) => + buGraph.mergeCells(cell, buGraph.getStack(offset, size.toInt)) + } + } } } @@ -142,9 +155,15 @@ class DataStructureAnalysis(program: Program, writesTo(callee).foreach { reg => val returnCells = buGraph.getCells(IRWalk.lastInProc(callee).get, reg) // assert(returnCells.nonEmpty) - returnCells.foldLeft(buGraph.adjust(callSite.returnCells(reg))) { (c, ret) => + val res = returnCells.foldLeft(buGraph.adjust(callSite.returnCells(reg))) { (c, ret) => buGraph.mergeCells(c, buGraph.adjust(ret)) } + + val size = res.node.get.getSize - res.offset + buGraph.getStackOffsets(res).foldLeft(res) { + (cell, offset) => + buGraph.mergeCells(cell, buGraph.getStack(offset, size.toInt)) + } } } buGraph.collectNodes() @@ -187,26 +206,45 @@ class DataStructureAnalysis(program: Program, callersGraph.globalMapping.foreach { case (range: AddressRange, Field(oldNode, internal)) => // val node = callersGraph val field = callersGraph.find(oldNode) - calleesGraph.mergeCells( + val res = calleesGraph.mergeCells( calleesGraph.globalMapping(range).node.getCell(calleesGraph.globalMapping(range).offset), field.node.getCell(field.offset + internal) ) + + val size = res.node.get.getSize - res.offset + calleesGraph.getStackOffsets(res).foldLeft(res) { + (cell, offset) => + calleesGraph.mergeCells(cell, calleesGraph.getStack(offset, size.toInt)) + } } callSite.paramCells.keySet.foreach { variable => val paramCells = calleesGraph.getCells(callSite.call, variable) // wrong param offset - paramCells.foldLeft(calleesGraph.adjust(calleesGraph.formals(variable))) { + val res = paramCells.foldLeft(calleesGraph.adjust(calleesGraph.formals(variable))) { (cell, slice) => calleesGraph.mergeCells(calleesGraph.adjust(slice), cell) } + + val size = res.node.get.getSize - res.offset + calleesGraph.getStackOffsets(res).foldLeft(res) { + (cell, offset) => + calleesGraph.mergeCells(cell, calleesGraph.getStack(offset, size.toInt)) + } + } if (calleesGraph.varToCell.contains(callSite.call)) { calleesGraph.varToCell(callSite.call).foreach { (variable, oldSlice) => val slice = callersGraph.find(oldSlice) val returnCells = calleesGraph.getCells(IRWalk.lastInProc(callee).get, variable) - returnCells.foldLeft(calleesGraph.adjust(slice)) { + val res = returnCells.foldLeft(calleesGraph.adjust(slice)) { (c, retCell) => calleesGraph.mergeCells(c, calleesGraph.adjust(retCell)) } + + val size = res.node.get.getSize - res.offset + calleesGraph.getStackOffsets(res).foldLeft(res) { + (cell, offset) => + calleesGraph.mergeCells(cell, calleesGraph.getStack(offset, size.toInt)) + } } } } diff --git a/src/main/scala/analysis/data_structure_analysis/Graph.scala b/src/main/scala/analysis/data_structure_analysis/Graph.scala index 7b0fcbbb9..73e7e4fda 100644 --- a/src/main/scala/analysis/data_structure_analysis/Graph.scala +++ b/src/main/scala/analysis/data_structure_analysis/Graph.scala @@ -125,6 +125,68 @@ class Graph(val proc: Procedure, nextValidOffset = offset + byteSize } + + /** + * Takes a cell and returns all corresponding stack offsets to it if any + */ + def getStackOffsets(cell: Cell): Set[BigInt] = { + stackMapping.foldLeft(Set[BigInt]()) { + (s, f) => + f match + case (offset: BigInt, node: Node) => + s ++ node.cells.foldLeft(Set[BigInt]()) { + (se, g) => + g match + case (internal: BigInt, stackCell: Cell) => + if cell == find(stackCell) then + se + (offset + internal) + else + se + } + } + } + + def getStack(offset: BigInt, size: Int): Cell = { + var last: BigInt = 0 + var headNodeOffset: BigInt = -1 + + val head: Cell = + if stackMapping.contains(offset) then + headNodeOffset = 0 + stackMapping(offset).cells(0) + else + breakable { + stackMapping.keys.toSeq.sorted.foreach( + elementOffset => + if offset < elementOffset then + break + else + last = elementOffset + ) + } + val diff = offset - last + headNodeOffset = offset + assert(stackMapping.contains(last)) + stackMapping(last).getCell(diff) + + // DSA grows cell size with size + // selfCollapse at the end to merge all the overlapping accessed size + // However, the above approach prevents distinct multi loads + // find(head).growSize(size) + val headOffset = last + head.offset + stackMapping.keys.toSeq.filter(off => off > headOffset && off < headOffset + size).sorted.foreach { + off => + val stackDiff = off - headOffset + val updatedHead = find(head) + val newHeadOffset = updatedHead.offset + val headNode = updatedHead.node.get + mergeCells(headNode.addCell(newHeadOffset + stackDiff, 0), find(stackMapping(off).cells(0))) + } + // selfCollapse(head.node.get) + head + } + + private val swappedOffsets = globalOffsets.map(_.swap) // creates the globals from the symbol tables diff --git a/src/main/scala/analysis/data_structure_analysis/LocalPhase.scala b/src/main/scala/analysis/data_structure_analysis/LocalPhase.scala index e6d034fcb..65eae1770 100644 --- a/src/main/scala/analysis/data_structure_analysis/LocalPhase.scala +++ b/src/main/scala/analysis/data_structure_analysis/LocalPhase.scala @@ -50,46 +50,7 @@ class LocalPhase(proc: Procedure, } - private def getStack(offset: BigInt, size: Int): Cell = { - var last: BigInt = 0 - var headNodeOffset: BigInt = -1 - - val head: Cell = - if graph.stackMapping.contains(offset) then - headNodeOffset = 0 - graph.stackMapping(offset).cells(0) - else - breakable { - graph.stackMapping.keys.toSeq.sorted.foreach( - elementOffset => - if offset < elementOffset then - break - else - last = elementOffset - ) - } - val diff = offset - last - headNodeOffset = offset - assert(graph.stackMapping.contains(last)) - graph.stackMapping(last).getCell(diff) - - // DSA grows cell size with size - // selfCollapse at the end to merge all the overlapping accessed size - // However, the above approach prevents distinct multi loads - // graph.find(head).growSize(size) - val headOffset = last + head.offset - graph.stackMapping.keys.toSeq.filter(off => off > headOffset && off < headOffset + size).sorted.foreach { - off => - val stackDiff = off - headOffset - val updatedHead = graph.find(head) - val newHeadOffset = updatedHead.offset - val headNode = updatedHead.node.get - graph.mergeCells(headNode.addCell(newHeadOffset + stackDiff, 0), graph.find(graph.stackMapping(off).cells(0))) - } - // graph.selfCollapse(head.node.get) - head - } - + /** * if an expr is the address of a stack location return its corresponding cell @@ -102,18 +63,18 @@ class LocalPhase(proc: Procedure, evaluateExpression(arg2, constProp(pos)) match case Some(v) => val stackRegions = varToSym(pos)(arg1).filter(s => s.symbolicBase.isInstanceOf[StackLocation]) - val res = stackRegions.tail.foldLeft(getStack(v.value + stackRegions.head.offset, size)) { + val res = stackRegions.tail.foldLeft(graph.getStack(v.value + stackRegions.head.offset, size)) { (res, sym) => - graph.mergeCells(res, getStack(v.value + sym.offset, size)) + graph.mergeCells(res, graph.getStack(v.value + sym.offset, size)) } Some(res) case None => None case arg: Variable if varToSym.contains(pos) && varToSym(pos).contains(arg) && varToSym(pos)(arg).exists(s => s.symbolicBase.isInstanceOf[StackLocation]) => val stackRegions = varToSym(pos)(arg).filter(s => s.symbolicBase.isInstanceOf[StackLocation]) - val res = stackRegions.tail.foldLeft(getStack(stackRegions.head.offset, size)) { + val res = stackRegions.tail.foldLeft(graph.getStack(stackRegions.head.offset, size)) { (res, sym) => - graph.mergeCells(res, getStack(sym.offset, size)) + graph.mergeCells(res, graph.getStack(sym.offset, size)) } Some(res) case _ => None diff --git a/src/main/scala/analysis/data_structure_analysis/Utility.scala b/src/main/scala/analysis/data_structure_analysis/Utility.scala index 6d89db0d7..15ffc657b 100644 --- a/src/main/scala/analysis/data_structure_analysis/Utility.scala +++ b/src/main/scala/analysis/data_structure_analysis/Utility.scala @@ -58,11 +58,17 @@ class Node(val graph: Option[Graph], var size: BigInt = 0, val id: Int = NodeCou val cells: mutable.Map[BigInt, Cell] = mutable.Map() this.addCell(0, 0) - private def updateSize(newSize: BigInt): Unit = { - if newSize > size then - size = newSize + def getSize: BigInt = { + val (offset, cell) = cells.toSeq.maxBy((offset, cell) => offset) + size = offset + cell.largestAccessedSize + size } +// private def updateSize(newSize: BigInt): Unit = { +// if newSize > size then +// size = newSize +// } + def getCell(offset: BigInt): Cell = { if (collapsed) { cells(0) @@ -86,7 +92,7 @@ class Node(val graph: Option[Graph], var size: BigInt = 0, val id: Int = NodeCou def addCell(offset: BigInt, size: Int): Cell = { - this.updateSize(offset + size) +// this.updateSize(offset + size) if collapsed then cells(0) else if !cells.contains(offset) then diff --git a/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.adt b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.adt new file mode 100644 index 000000000..c05cb6dce --- /dev/null +++ b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.adt @@ -0,0 +1,641 @@ +Project(Attrs([Attr("filename","\"stack_interproc_overlapping.out\""), +Attr("image-specification","(declare abi (name str))\n(declare arch (name str))\n(declare base-address (addr int))\n(declare bias (off int))\n(declare bits (size int))\n(declare code-region (addr int) (size int) (off int))\n(declare code-start (addr int))\n(declare entry-point (addr int))\n(declare external-reference (addr int) (name str))\n(declare format (name str))\n(declare is-executable (flag bool))\n(declare is-little-endian (flag bool))\n(declare llvm:base-address (addr int))\n(declare llvm:code-entry (name str) (off int) (size int))\n(declare llvm:coff-import-library (name str))\n(declare llvm:coff-virtual-section-header (name str) (addr int) (size int))\n(declare llvm:elf-program-header (name str) (off int) (size int))\n(declare llvm:elf-program-header-flags (name str) (ld bool) (r bool) \n (w bool) (x bool))\n(declare llvm:elf-virtual-program-header (name str) (addr int) (size int))\n(declare llvm:entry-point (addr int))\n(declare llvm:macho-symbol (name str) (value int))\n(declare llvm:name-reference (at int) (name str))\n(declare llvm:relocation (at int) (addr int))\n(declare llvm:section-entry (name str) (addr int) (size int) (off int))\n(declare llvm:section-flags (name str) (r bool) (w bool) (x bool))\n(declare llvm:segment-command (name str) (off int) (size int))\n(declare llvm:segment-command-flags (name str) (r bool) (w bool) (x bool))\n(declare llvm:symbol-entry (name str) (addr int) (size int) (off int)\n (value int))\n(declare llvm:virtual-segment-command (name str) (addr int) (size int))\n(declare mapped (addr int) (size int) (off int))\n(declare named-region (addr int) (size int) (name str))\n(declare named-symbol (addr int) (name str))\n(declare require (name str))\n(declare section (addr int) (size int))\n(declare segment (addr int) (size int) (r bool) (w bool) (x bool))\n(declare subarch (name str))\n(declare symbol-chunk (addr int) (size int) (root int))\n(declare symbol-value (addr int) (value int))\n(declare system (name str))\n(declare vendor (name str))\n\n(abi unknown)\n(arch aarch64)\n(base-address 0)\n(bias 0)\n(bits 64)\n(code-region 2224 20 2224)\n(code-region 1792 432 1792)\n(code-region 1632 112 1632)\n(code-region 1600 24 1600)\n(code-start 1844)\n(code-start 1792)\n(code-start 2068)\n(code-start 2112)\n(entry-point 1792)\n(external-reference 131024 _ITM_deregisterTMCloneTable)\n(external-reference 131032 __cxa_finalize)\n(external-reference 131040 __gmon_start__)\n(external-reference 131064 _ITM_registerTMCloneTable)\n(external-reference 130976 __libc_start_main)\n(external-reference 130984 __cxa_finalize)\n(external-reference 130992 __stack_chk_fail)\n(external-reference 131000 __gmon_start__)\n(external-reference 131008 abort)\n(format elf)\n(is-executable true)\n(is-little-endian true)\n(llvm:base-address 0)\n(llvm:code-entry abort 0 0)\n(llvm:code-entry __stack_chk_fail 0 0)\n(llvm:code-entry __cxa_finalize 0 0)\n(llvm:code-entry __libc_start_main 0 0)\n(llvm:code-entry _init 1600 0)\n(llvm:code-entry main 2112 112)\n(llvm:code-entry set_fields 2068 44)\n(llvm:code-entry _start 1792 52)\n(llvm:code-entry abort@GLIBC_2.17 0 0)\n(llvm:code-entry __stack_chk_fail@GLIBC_2.17 0 0)\n(llvm:code-entry _fini 2224 0)\n(llvm:code-entry __cxa_finalize@GLIBC_2.17 0 0)\n(llvm:code-entry __libc_start_main@GLIBC_2.34 0 0)\n(llvm:code-entry frame_dummy 2064 0)\n(llvm:code-entry __do_global_dtors_aux 1984 0)\n(llvm:code-entry register_tm_clones 1920 0)\n(llvm:code-entry deregister_tm_clones 1872 0)\n(llvm:code-entry call_weak_fn 1844 20)\n(llvm:code-entry .fini 2224 20)\n(llvm:code-entry .text 1792 432)\n(llvm:code-entry .plt 1632 112)\n(llvm:code-entry .init 1600 24)\n(llvm:elf-program-header 08 64888 648)\n(llvm:elf-program-header 07 0 0)\n(llvm:elf-program-header 06 2248 68)\n(llvm:elf-program-header 05 596 68)\n(llvm:elf-program-header 04 64904 512)\n(llvm:elf-program-header 03 64888 664)\n(llvm:elf-program-header 02 0 2516)\n(llvm:elf-program-header 01 568 27)\n(llvm:elf-program-header 00 64 504)\n(llvm:elf-program-header-flags 08 false true false false)\n(llvm:elf-program-header-flags 07 false true true false)\n(llvm:elf-program-header-flags 06 false true false false)\n(llvm:elf-program-header-flags 05 false true false false)\n(llvm:elf-program-header-flags 04 false true true false)\n(llvm:elf-program-header-flags 03 true true true false)\n(llvm:elf-program-header-flags 02 true true false true)\n(llvm:elf-program-header-flags 01 false true false false)\n(llvm:elf-program-header-flags 00 false true false false)\n(llvm:elf-virtual-program-header 08 130424 648)\n(llvm:elf-virtual-program-header 07 0 0)\n(llvm:elf-virtual-program-header 06 2248 68)\n(llvm:elf-virtual-program-header 05 596 68)\n(llvm:elf-virtual-program-header 04 130440 512)\n(llvm:elf-virtual-program-header 03 130424 672)\n(llvm:elf-virtual-program-header 02 0 2516)\n(llvm:elf-virtual-program-header 01 568 27)\n(llvm:elf-virtual-program-header 00 64 504)\n(llvm:entry-point 1792)\n(llvm:name-reference 131008 abort)\n(llvm:name-reference 131000 __gmon_start__)\n(llvm:name-reference 130992 __stack_chk_fail)\n(llvm:name-reference 130984 __cxa_finalize)\n(llvm:name-reference 130976 __libc_start_main)\n(llvm:name-reference 131064 _ITM_registerTMCloneTable)\n(llvm:name-reference 131040 __gmon_start__)\n(llvm:name-reference 131032 __cxa_finalize)\n(llvm:name-reference 131024 _ITM_deregisterTMCloneTable)\n(llvm:section-entry .shstrtab 0 250 68359)\n(llvm:section-entry .strtab 0 631 67728)\n(llvm:section-entry .symtab 0 2136 65592)\n(llvm:section-entry .comment 0 38 65552)\n(llvm:section-entry .bss 131088 8 65552)\n(llvm:section-entry .data 131072 16 65536)\n(llvm:section-entry .got 130952 120 65416)\n(llvm:section-entry .dynamic 130440 512 64904)\n(llvm:section-entry .fini_array 130432 8 64896)\n(llvm:section-entry .init_array 130424 8 64888)\n(llvm:section-entry .eh_frame 2320 196 2320)\n(llvm:section-entry .eh_frame_hdr 2248 68 2248)\n(llvm:section-entry .rodata 2244 4 2244)\n(llvm:section-entry .fini 2224 20 2224)\n(llvm:section-entry .text 1792 432 1792)\n(llvm:section-entry .plt 1632 112 1632)\n(llvm:section-entry .init 1600 24 1600)\n(llvm:section-entry .rela.plt 1480 120 1480)\n(llvm:section-entry .rela.dyn 1264 216 1264)\n(llvm:section-entry .gnu.version_r 1184 80 1184)\n(llvm:section-entry .gnu.version 1158 22 1158)\n(llvm:section-entry .dynstr 960 198 960)\n(llvm:section-entry .dynsym 696 264 696)\n(llvm:section-entry .gnu.hash 664 28 664)\n(llvm:section-entry .note.ABI-tag 632 32 632)\n(llvm:section-entry .note.gnu.build-id 596 36 596)\n(llvm:section-entry .interp 568 27 568)\n(llvm:section-flags .shstrtab true false false)\n(llvm:section-flags .strtab true false false)\n(llvm:section-flags .symtab true false false)\n(llvm:section-flags .comment true false false)\n(llvm:section-flags .bss true true false)\n(llvm:section-flags .data true true false)\n(llvm:section-flags .got true true false)\n(llvm:section-flags .dynamic true true false)\n(llvm:section-flags .fini_array true true false)\n(llvm:section-flags .init_array true true false)\n(llvm:section-flags .eh_frame true false false)\n(llvm:section-flags .eh_frame_hdr true false false)\n(llvm:section-flags .rodata true false false)\n(llvm:section-flags .fini true false true)\n(llvm:section-flags .text true false true)\n(llvm:section-flags .plt true false true)\n(llvm:section-flags .init true false true)\n(llvm:section-flags .rela.plt true false false)\n(llvm:section-flags .rela.dyn true false false)\n(llvm:section-flags .gnu.version_r true false false)\n(llvm:section-flags .gnu.version true false false)\n(llvm:section-flags .dynstr true false false)\n(llvm:section-flags .dynsym true false false)\n(llvm:section-flags .gnu.hash true false false)\n(llvm:section-flags .note.ABI-tag true false false)\n(llvm:section-flags .note.gnu.build-id true false false)\n(llvm:section-flags .interp true false false)\n(llvm:symbol-entry abort 0 0 0 0)\n(llvm:symbol-entry __stack_chk_fail 0 0 0 0)\n(llvm:symbol-entry __cxa_finalize 0 0 0 0)\n(llvm:symbol-entry __libc_start_main 0 0 0 0)\n(llvm:symbol-entry _init 1600 0 1600 1600)\n(llvm:symbol-entry main 2112 112 2112 2112)\n(llvm:symbol-entry set_fields 2068 44 2068 2068)\n(llvm:symbol-entry _start 1792 52 1792 1792)\n(llvm:symbol-entry abort@GLIBC_2.17 0 0 0 0)\n(llvm:symbol-entry __stack_chk_fail@GLIBC_2.17 0 0 0 0)\n(llvm:symbol-entry _fini 2224 0 2224 2224)\n(llvm:symbol-entry __cxa_finalize@GLIBC_2.17 0 0 0 0)\n(llvm:symbol-entry __libc_start_main@GLIBC_2.34 0 0 0 0)\n(llvm:symbol-entry frame_dummy 2064 0 2064 2064)\n(llvm:symbol-entry __do_global_dtors_aux 1984 0 1984 1984)\n(llvm:symbol-entry register_tm_clones 1920 0 1920 1920)\n(llvm:symbol-entry deregister_tm_clones 1872 0 1872 1872)\n(llvm:symbol-entry call_weak_fn 1844 20 1844 1844)\n(mapped 0 2516 0)\n(mapped 130424 664 64888)\n(named-region 0 2516 02)\n(named-region 130424 672 03)\n(named-region 568 27 .interp)\n(named-region 596 36 .note.gnu.build-id)\n(named-region 632 32 .note.ABI-tag)\n(named-region 664 28 .gnu.hash)\n(named-region 696 264 .dynsym)\n(named-region 960 198 .dynstr)\n(named-region 1158 22 .gnu.version)\n(named-region 1184 80 .gnu.version_r)\n(named-region 1264 216 .rela.dyn)\n(named-region 1480 120 .rela.plt)\n(named-region 1600 24 .init)\n(named-region 1632 112 .plt)\n(named-region 1792 432 .text)\n(named-region 2224 20 .fini)\n(named-region 2244 4 .rodata)\n(named-region 2248 68 .eh_frame_hdr)\n(named-region 2320 196 .eh_frame)\n(named-region 130424 8 .init_array)\n(named-region 130432 8 .fini_array)\n(named-region 130440 512 .dynamic)\n(named-region 130952 120 .got)\n(named-region 131072 16 .data)\n(named-region 131088 8 .bss)\n(named-region 0 38 .comment)\n(named-region 0 2136 .symtab)\n(named-region 0 631 .strtab)\n(named-region 0 250 .shstrtab)\n(named-symbol 1844 call_weak_fn)\n(named-symbol 1872 deregister_tm_clones)\n(named-symbol 1920 register_tm_clones)\n(named-symbol 1984 __do_global_dtors_aux)\n(named-symbol 2064 frame_dummy)\n(named-symbol 0 __libc_start_main@GLIBC_2.34)\n(named-symbol 0 __cxa_finalize@GLIBC_2.17)\n(named-symbol 2224 _fini)\n(named-symbol 0 __stack_chk_fail@GLIBC_2.17)\n(named-symbol 0 abort@GLIBC_2.17)\n(named-symbol 1792 _start)\n(named-symbol 2068 set_fields)\n(named-symbol 2112 main)\n(named-symbol 1600 _init)\n(named-symbol 0 __libc_start_main)\n(named-symbol 0 __cxa_finalize)\n(named-symbol 0 __stack_chk_fail)\n(named-symbol 0 abort)\n(require ld-linux-aarch64.so.1)\n(require libc.so.6)\n(section 568 27)\n(section 596 36)\n(section 632 32)\n(section 664 28)\n(section 696 264)\n(section 960 198)\n(section 1158 22)\n(section 1184 80)\n(section 1264 216)\n(section 1480 120)\n(section 1600 24)\n(section 1632 112)\n(section 1792 432)\n(section 2224 20)\n(section 2244 4)\n(section 2248 68)\n(section 2320 196)\n(section 130424 8)\n(section 130432 8)\n(section 130440 512)\n(section 130952 120)\n(section 131072 16)\n(section 131088 8)\n(section 0 38)\n(section 0 2136)\n(section 0 631)\n(section 0 250)\n(segment 0 2516 true false true)\n(segment 130424 672 true true false)\n(subarch v8)\n(symbol-chunk 1844 20 1844)\n(symbol-chunk 1792 52 1792)\n(symbol-chunk 2068 44 2068)\n(symbol-chunk 2112 112 2112)\n(symbol-value 1844 1844)\n(symbol-value 1872 1872)\n(symbol-value 1920 1920)\n(symbol-value 1984 1984)\n(symbol-value 2064 2064)\n(symbol-value 2224 2224)\n(symbol-value 1792 1792)\n(symbol-value 2068 2068)\n(symbol-value 2112 2112)\n(symbol-value 1600 1600)\n(symbol-value 0 0)\n(system \"\")\n(vendor \"\")\n"), +Attr("abi-name","\"aarch64-linux-gnu-elf\"")]), +Sections([Section(".shstrtab", 0x0, "\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xb7\x00\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x08\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x38\x00\x09\x00\x40\x00\x1c\x00\x1b\x00\x06\x00\x00\x00\x04\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x09\x00\x00\x00\x00\x00\x00\xd4\x09\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x78\xfd\x00\x00\x00\x00\x00\x00\x78\xfd"), +Section(".strtab", 0x0, "\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xb7\x00\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x08\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x38\x00\x09\x00\x40\x00\x1c\x00\x1b\x00\x06\x00\x00\x00\x04\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x09\x00\x00\x00\x00\x00\x00\xd4\x09\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x78\xfd\x00\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x98\x02\x00\x00\x00\x00\x00\x00\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x88\xfd\x00\x00\x00\x00\x00\x00\x88\xfd\x01\x00\x00\x00\x00\x00\x88\xfd\x01\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x54\x02\x00\x00\x00\x00\x00\x00\x54\x02\x00\x00\x00\x00\x00\x00\x54\x02\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x50\xe5\x74\x64\x04\x00\x00\x00\xc8\x08\x00\x00\x00\x00\x00\x00\xc8\x08\x00\x00\x00\x00\x00\x00\xc8\x08\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x51\xe5\x74\x64\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x52\xe5\x74\x64\x04\x00\x00\x00\x78\xfd\x00\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x88\x02\x00\x00\x00\x00\x00\x00\x88\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x2f\x6c\x69\x62\x2f\x6c\x64\x2d\x6c\x69\x6e\x75\x78\x2d\x61\x61\x72\x63\x68\x36\x34\x2e\x73\x6f\x2e\x31\x00\x00\x04\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x47\x4e\x55\x00\xbf\x79\xa3\xf8\x2d\x1c\xb7\x49\x06\x36\x28\xdf\x4a\xa3\x93\xa0\xfb\x06\x11"), +Section(".symtab", 0x0, "\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xb7\x00\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x08\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x38\x00\x09\x00\x40\x00\x1c\x00\x1b\x00\x06\x00\x00\x00\x04\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x38\x02\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x09\x00\x00\x00\x00\x00\x00\xd4\x09\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x78\xfd\x00\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x98\x02\x00\x00\x00\x00\x00\x00\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x88\xfd\x00\x00\x00\x00\x00\x00\x88\xfd\x01\x00\x00\x00\x00\x00\x88\xfd\x01\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x54\x02\x00\x00\x00\x00\x00\x00\x54\x02\x00\x00\x00\x00\x00\x00\x54\x02\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x50\xe5\x74\x64\x04\x00\x00\x00\xc8\x08\x00\x00\x00\x00\x00\x00\xc8\x08\x00\x00\x00\x00\x00\x00\xc8\x08\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x51\xe5\x74\x64\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x52\xe5\x74\x64\x04\x00\x00\x00\x78\xfd\x00\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x88\x02\x00\x00\x00\x00\x00\x00\x88\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x2f\x6c\x69\x62\x2f\x6c\x64\x2d\x6c\x69\x6e\x75\x78\x2d\x61\x61\x72\x63\x68\x36\x34\x2e\x73\x6f\x2e\x31\x00\x00\x04\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x47\x4e\x55\x00\xbf\x79\xa3\xf8\x2d\x1c\xb7\x49\x06\x36\x28\xdf\x4a\xa3\x93\xa0\xfb\x06\x11\x0d\x04\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x47\x4e\x55\x00\x00\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x0b\x00\x40\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x16\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x5f\x73\x74\x61\x63\x6b\x5f\x63\x68\x6b\x5f\x66\x61\x69\x6c\x00\x5f\x5f\x6c\x69\x62\x63\x5f\x73\x74\x61\x72\x74\x5f\x6d\x61\x69\x6e\x00\x5f\x5f\x63\x78\x61\x5f\x66\x69\x6e\x61\x6c\x69\x7a\x65\x00\x61\x62\x6f\x72\x74\x00\x5f\x5f\x73\x74\x61\x63\x6b\x5f\x63\x68\x6b\x5f\x67\x75\x61\x72\x64\x00\x6c\x69\x62\x63\x2e\x73\x6f\x2e\x36\x00\x6c\x64\x2d\x6c\x69\x6e\x75\x78\x2d\x61\x61\x72\x63\x68\x36\x34\x2e\x73\x6f\x2e\x31\x00\x47\x4c\x49\x42\x43\x5f\x32\x2e\x31\x37\x00\x47\x4c\x49\x42\x43\x5f\x32\x2e\x33\x34\x00\x5f\x49\x54\x4d\x5f\x64\x65\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4d\x43\x6c\x6f\x6e\x65\x54\x61\x62\x6c\x65\x00\x5f\x5f\x67\x6d\x6f\x6e\x5f\x73\x74\x61\x72\x74\x5f\x5f\x00\x5f\x49\x54\x4d\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4d\x43\x6c\x6f\x6e\x65\x54\x61\x62\x6c\x65\x00\x00\x00\x00\x00\x00\x00\x02\x00\x01\x00\x03\x00\x03\x00\x01\x00\x04\x00\x03\x00\x01\x00\x00\x00\x00\x00\x01\x00\x01\x00\x55\x00\x00\x00\x10\x00\x00\x00\x20\x00\x00\x00\x97\x91\x96\x06\x00\x00\x04\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x4b\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x97\x91\x96\x06\x00\x00\x03\x00\x6b\x00\x00\x00\x10\x00\x00\x00\xb4\x91\x96\x06\x00\x00\x02\x00\x76\x00\x00\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x80\xfd\x01\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\xf0\xff\x01\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\x40\x08\x00\x00\x00\x00\x00\x00\x08\x00\x02\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\x08\x00\x02\x00\x00\x00\x00\x00\xd0\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x20\x03\xd5\xfd\x7b\xbf\xa9\xfd\x03\x00\x91\x3a\x00\x00\x94\xfd\x7b\xc1\xa8\xc0\x03\x5f\xd6\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x7b\xbf\xa9\xf0\x00\x00\xf0\x11\xce\x47\xf9\x10\x62\x3e\x91\x20\x02\x1f\xd6\x1f\x20\x03\xd5\x1f\x20\x03\xd5\x1f\x20\x03\xd5\xf0\x00\x00\xf0\x11\xd2\x47\xf9\x10\x82\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xd6\x47\xf9\x10\xa2\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xda\x47\xf9\x10\xc2\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xde\x47\xf9\x10\xe2\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xe2\x47\xf9\x10\x02\x3f\x91\x20\x02\x1f\xd6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x20\x03\xd5\x1d\x00\x80\xd2\x1e\x00\x80\xd2\xe5\x03\x00\xaa\xe1\x03\x40\xf9\xe2\x23\x00\x91\xe6\x03\x00\x91\xe0\x00\x00\xf0\x00\xf8\x47\xf9\x03\x00\x80\xd2\x04\x00\x80\xd2\xd5\xff\xff\x97\xe4\xff\xff\x97\xe0\x00\x00\xf0\x00\xf0\x47\xf9\x40\x00\x00\xb4\xdc\xff\xff\x17\xc0\x03\x5f\xd6\x1f\x20\x03\xd5\x1f\x20\x03\xd5\x00\x01\x00\x90\x00\x40\x00\x91\x01\x01\x00\x90\x21\x40\x00\x91\x3f\x00\x00\xeb\xc0\x00\x00\x54\xe1\x00\x00\xf0\x21\xe8\x47\xf9\x61\x00\x00\xb4\xf0\x03\x01\xaa\x00\x02\x1f\xd6\xc0\x03\x5f\xd6\x00\x01\x00\x90\x00\x40\x00\x91\x01\x01\x00\x90\x21\x40\x00\x91\x21\x00\x00\xcb\x22\xfc\x7f\xd3\x41\x0c\x81\x8b\x21\xfc\x41\x93\xc1\x00\x00\xb4\xe2\x00\x00\xf0\x42\xfc\x47\xf9\x62\x00\x00\xb4\xf0\x03\x02\xaa\x00\x02\x1f\xd6\xc0\x03\x5f\xd6\x1f\x20\x03\xd5\xfd\x7b\xbe\xa9\xfd\x03\x00\x91\xf3\x0b\x00\xf9\x13\x01\x00\x90\x60\x42\x40\x39\x40\x01\x00\x37\xe0\x00\x00\xf0\x00\xec\x47\xf9\x80\x00\x00\xb4\x00\x01\x00\x90\x00\x04\x40\xf9\xa9\xff\xff\x97\xd8\xff\xff\x97\x20\x00\x80\x52\x60\x42\x00\x39\xf3\x0b\x40\xf9\xfd\x7b\xc2\xa8\xc0\x03\x5f\xd6\x1f\x20\x03\xd5\x1f\x20\x03\xd5\xdc\xff\xff\x17\xff\x43\x00\xd1\xe0\x07\x00\xf9\xe0\x07\x40\xf9\x21\x00\x80\xd2\x01\x00\x00\xf9\xe0\x07\x40\xf9\x41\x00\x80\xd2\x01\x08\x00\xf9\x1f\x20\x03\xd5\xff\x43\x00\x91\xc0\x03\x5f\xd6\xff\xc3\x00\xd1\xfd\x7b\x02\xa9\xfd\x83\x00\x91\xe0\x00\x00\xf0\x00\xf4\x47\xf9\x01\x00\x40\xf9"), +Section(".comment", 0x0, "\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xb7\x00\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00"), +Section(".interp", 0x238, "\x2f\x6c\x69\x62\x2f\x6c\x64\x2d\x6c\x69\x6e\x75\x78\x2d\x61\x61\x72\x63\x68\x36\x34\x2e\x73\x6f\x2e\x31\x00"), +Section(".note.gnu.build-id", 0x254, "\x04\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x47\x4e\x55\x00\xbf\x79\xa3\xf8\x2d\x1c\xb7\x49\x06\x36\x28\xdf\x4a\xa3\x93\xa0\xfb\x06\x11\x0d"), +Section(".note.ABI-tag", 0x278, "\x04\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x47\x4e\x55\x00\x00\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00"), +Section(".gnu.hash", 0x298, "\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), +Section(".dynsym", 0x2B8, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x0b\x00\x40\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x16\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), +Section(".dynstr", 0x3C0, "\x00\x5f\x5f\x73\x74\x61\x63\x6b\x5f\x63\x68\x6b\x5f\x66\x61\x69\x6c\x00\x5f\x5f\x6c\x69\x62\x63\x5f\x73\x74\x61\x72\x74\x5f\x6d\x61\x69\x6e\x00\x5f\x5f\x63\x78\x61\x5f\x66\x69\x6e\x61\x6c\x69\x7a\x65\x00\x61\x62\x6f\x72\x74\x00\x5f\x5f\x73\x74\x61\x63\x6b\x5f\x63\x68\x6b\x5f\x67\x75\x61\x72\x64\x00\x6c\x69\x62\x63\x2e\x73\x6f\x2e\x36\x00\x6c\x64\x2d\x6c\x69\x6e\x75\x78\x2d\x61\x61\x72\x63\x68\x36\x34\x2e\x73\x6f\x2e\x31\x00\x47\x4c\x49\x42\x43\x5f\x32\x2e\x31\x37\x00\x47\x4c\x49\x42\x43\x5f\x32\x2e\x33\x34\x00\x5f\x49\x54\x4d\x5f\x64\x65\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4d\x43\x6c\x6f\x6e\x65\x54\x61\x62\x6c\x65\x00\x5f\x5f\x67\x6d\x6f\x6e\x5f\x73\x74\x61\x72\x74\x5f\x5f\x00\x5f\x49\x54\x4d\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4d\x43\x6c\x6f\x6e\x65\x54\x61\x62\x6c\x65\x00"), +Section(".gnu.version", 0x486, "\x00\x00\x00\x00\x00\x00\x02\x00\x01\x00\x03\x00\x03\x00\x01\x00\x04\x00\x03\x00\x01\x00"), +Section(".gnu.version_r", 0x4A0, "\x01\x00\x01\x00\x55\x00\x00\x00\x10\x00\x00\x00\x20\x00\x00\x00\x97\x91\x96\x06\x00\x00\x04\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x4b\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x97\x91\x96\x06\x00\x00\x03\x00\x6b\x00\x00\x00\x10\x00\x00\x00\xb4\x91\x96\x06\x00\x00\x02\x00\x76\x00\x00\x00\x00\x00\x00\x00"), +Section(".rela.dyn", 0x4F0, "\x78\xfd\x01\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x80\xfd\x01\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\xf0\xff\x01\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\x40\x08\x00\x00\x00\x00\x00\x00\x08\x00\x02\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\x08\x00\x02\x00\x00\x00\x00\x00\xd0\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff\x01\x00\x00\x00\x00\x00\x01\x04\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), +Section(".rela.plt", 0x5C8, "\xa0\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xff\x01\x00\x00\x00\x00\x00\x02\x04\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), +Section(".init", 0x640, "\x1f\x20\x03\xd5\xfd\x7b\xbf\xa9\xfd\x03\x00\x91\x3a\x00\x00\x94\xfd\x7b\xc1\xa8\xc0\x03\x5f\xd6"), +Section(".plt", 0x660, "\xf0\x7b\xbf\xa9\xf0\x00\x00\xf0\x11\xce\x47\xf9\x10\x62\x3e\x91\x20\x02\x1f\xd6\x1f\x20\x03\xd5\x1f\x20\x03\xd5\x1f\x20\x03\xd5\xf0\x00\x00\xf0\x11\xd2\x47\xf9\x10\x82\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xd6\x47\xf9\x10\xa2\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xda\x47\xf9\x10\xc2\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xde\x47\xf9\x10\xe2\x3e\x91\x20\x02\x1f\xd6\xf0\x00\x00\xf0\x11\xe2\x47\xf9\x10\x02\x3f\x91\x20\x02\x1f\xd6"), +Section(".fini", 0x8B0, "\x1f\x20\x03\xd5\xfd\x7b\xbf\xa9\xfd\x03\x00\x91\xfd\x7b\xc1\xa8\xc0\x03\x5f\xd6"), +Section(".rodata", 0x8C4, "\x01\x00\x02\x00"), +Section(".eh_frame_hdr", 0x8C8, "\x01\x1b\x03\x3b\x44\x00\x00\x00\x07\x00\x00\x00\x38\xfe\xff\xff\x5c\x00\x00\x00\x88\xfe\xff\xff\x70\x00\x00\x00\xb8\xfe\xff\xff\x84\x00\x00\x00\xf8\xfe\xff\xff\x98\x00\x00\x00\x48\xff\xff\xff\xbc\x00\x00\x00\x4c\xff\xff\xff\xd0\x00\x00\x00\x78\xff\xff\xff\xe8\x00\x00\x00"), +Section(".eh_frame", 0x910, "\x10\x00\x00\x00\x00\x00\x00\x00\x01\x7a\x52\x00\x04\x78\x1e\x01\x1b\x0c\x1f\x00\x10\x00\x00\x00\x18\x00\x00\x00\xd4\xfd\xff\xff\x34\x00\x00\x00\x00\x41\x07\x1e\x10\x00\x00\x00\x2c\x00\x00\x00\x10\xfe\xff\xff\x30\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x40\x00\x00\x00\x2c\xfe\xff\xff\x3c\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x54\x00\x00\x00\x58\xfe\xff\xff\x48\x00\x00\x00\x00\x41\x0e\x20\x9d\x04\x9e\x03\x42\x93\x02\x4e\xde\xdd\xd3\x0e\x00\x00\x00\x00\x10\x00\x00\x00\x78\x00\x00\x00\x84\xfe\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x8c\x00\x00\x00\x74\xfe\xff\xff\x2c\x00\x00\x00\x00\x41\x0e\x10\x49\x0e\x00\x00\x1c\x00\x00\x00\xa4\x00\x00\x00\x88\xfe\xff\xff\x70\x00\x00\x00\x00\x41\x0e\x30\x41\x9d\x02\x9e\x01\x59\xdd\xde\x0e\x00\x00\x00\x00\x00\x00\x00"), +Section(".fini_array", 0x1FD80, "\xc0\x07\x00\x00\x00\x00\x00\x00"), +Section(".dynamic", 0x1FD88, "\x01\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x40\x06\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\xb0\x08\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x78\xfd\x01\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x80\xfd\x01\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xf5\xfe\xff\x6f\x00\x00\x00\x00\x98\x02\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\xb8\x02\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x88\xff\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\xc8\x05\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\xf0\x04\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xff\x6f\x00\x00\x00\x00\x01\x00\x00\x08\x00\x00\x00\x00\xfe\xff\xff\x6f\x00\x00\x00\x00\xa0\x04\x00\x00\x00\x00\x00\x00\xff\xff\xff\x6f\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\x6f\x00\x00\x00\x00\x86\x04\x00\x00\x00\x00\x00\x00\xf9\xff\xff\x6f\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), +Section(".got", 0x1FF88, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x06\x00\x00\x00\x00\x00\x00\x60\x06\x00\x00\x00\x00\x00\x00\x60\x06\x00\x00\x00\x00\x00\x00\x60\x06\x00\x00\x00\x00\x00\x00\x60\x06\x00\x00\x00\x00\x00\x00\x88\xfd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), +Section(".data", 0x20000, "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x02\x00\x00\x00\x00\x00"), +Section(".init_array", 0x1FD78, "\x10\x08\x00\x00\x00\x00\x00\x00"), +Section(".text", 0x700, "\x1f\x20\x03\xd5\x1d\x00\x80\xd2\x1e\x00\x80\xd2\xe5\x03\x00\xaa\xe1\x03\x40\xf9\xe2\x23\x00\x91\xe6\x03\x00\x91\xe0\x00\x00\xf0\x00\xf8\x47\xf9\x03\x00\x80\xd2\x04\x00\x80\xd2\xd5\xff\xff\x97\xe4\xff\xff\x97\xe0\x00\x00\xf0\x00\xf0\x47\xf9\x40\x00\x00\xb4\xdc\xff\xff\x17\xc0\x03\x5f\xd6\x1f\x20\x03\xd5\x1f\x20\x03\xd5\x00\x01\x00\x90\x00\x40\x00\x91\x01\x01\x00\x90\x21\x40\x00\x91\x3f\x00\x00\xeb\xc0\x00\x00\x54\xe1\x00\x00\xf0\x21\xe8\x47\xf9\x61\x00\x00\xb4\xf0\x03\x01\xaa\x00\x02\x1f\xd6\xc0\x03\x5f\xd6\x00\x01\x00\x90\x00\x40\x00\x91\x01\x01\x00\x90\x21\x40\x00\x91\x21\x00\x00\xcb\x22\xfc\x7f\xd3\x41\x0c\x81\x8b\x21\xfc\x41\x93\xc1\x00\x00\xb4\xe2\x00\x00\xf0\x42\xfc\x47\xf9\x62\x00\x00\xb4\xf0\x03\x02\xaa\x00\x02\x1f\xd6\xc0\x03\x5f\xd6\x1f\x20\x03\xd5\xfd\x7b\xbe\xa9\xfd\x03\x00\x91\xf3\x0b\x00\xf9\x13\x01\x00\x90\x60\x42\x40\x39\x40\x01\x00\x37\xe0\x00\x00\xf0\x00\xec\x47\xf9\x80\x00\x00\xb4\x00\x01\x00\x90\x00\x04\x40\xf9\xa9\xff\xff\x97\xd8\xff\xff\x97\x20\x00\x80\x52\x60\x42\x00\x39\xf3\x0b\x40\xf9\xfd\x7b\xc2\xa8\xc0\x03\x5f\xd6\x1f\x20\x03\xd5\x1f\x20\x03\xd5\xdc\xff\xff\x17\xff\x43\x00\xd1\xe0\x07\x00\xf9\xe0\x07\x40\xf9\x21\x00\x80\xd2\x01\x00\x00\xf9\xe0\x07\x40\xf9\x41\x00\x80\xd2\x01\x08\x00\xf9\x1f\x20\x03\xd5\xff\x43\x00\x91\xc0\x03\x5f\xd6\xff\xc3\x00\xd1\xfd\x7b\x02\xa9\xfd\x83\x00\x91\xe0\x00\x00\xf0\x00\xf4\x47\xf9\x01\x00\x40\xf9\xe1\x0f\x00\xf9\x01\x00\x80\xd2\x60\x00\x80\xd2\xe0\x03\x00\xf9\x40\x01\x80\xd2\xe0\x0b\x00\xf9\xe0\x03\x00\x91\xe8\xff\xff\x97\x00\x00\x80\x52\xe1\x03\x00\x2a\xe0\x00\x00\xf0\x00\xf4\x47\xf9\xe3\x0f\x40\xf9\x02\x00\x40\xf9\x63\x00\x02\xeb\x02\x00\x80\xd2\x40\x00\x00\x54\x81\xff\xff\x97\xe0\x03\x01\x2a\xfd\x7b\x42\xa9\xff\xc3\x00\x91\xc0\x03\x5f\xd6")]), +Memmap([Annotation(Region(0x0,0x9D3), Attr("segment","02 0 2516")), +Annotation(Region(0x700,0x733), Attr("symbol","\"_start\"")), +Annotation(Region(0x0,0xF9), Attr("section","\".shstrtab\"")), +Annotation(Region(0x0,0x276), Attr("section","\".strtab\"")), +Annotation(Region(0x0,0x857), Attr("section","\".symtab\"")), +Annotation(Region(0x0,0x25), Attr("section","\".comment\"")), +Annotation(Region(0x238,0x252), Attr("section","\".interp\"")), +Annotation(Region(0x254,0x277), Attr("section","\".note.gnu.build-id\"")), +Annotation(Region(0x278,0x297), Attr("section","\".note.ABI-tag\"")), +Annotation(Region(0x298,0x2B3), Attr("section","\".gnu.hash\"")), +Annotation(Region(0x2B8,0x3BF), Attr("section","\".dynsym\"")), +Annotation(Region(0x3C0,0x485), Attr("section","\".dynstr\"")), +Annotation(Region(0x486,0x49B), Attr("section","\".gnu.version\"")), +Annotation(Region(0x4A0,0x4EF), Attr("section","\".gnu.version_r\"")), +Annotation(Region(0x4F0,0x5C7), Attr("section","\".rela.dyn\"")), +Annotation(Region(0x5C8,0x63F), Attr("section","\".rela.plt\"")), +Annotation(Region(0x640,0x657), Attr("section","\".init\"")), +Annotation(Region(0x660,0x6CF), Attr("section","\".plt\"")), +Annotation(Region(0x640,0x657), Attr("code-region","()")), +Annotation(Region(0x660,0x6CF), Attr("code-region","()")), +Annotation(Region(0x700,0x733), Attr("symbol-info","_start 0x700 52")), +Annotation(Region(0x734,0x747), Attr("symbol","\"call_weak_fn\"")), +Annotation(Region(0x734,0x747), Attr("symbol-info","call_weak_fn 0x734 20")), +Annotation(Region(0x814,0x83F), Attr("symbol","\"set_fields\"")), +Annotation(Region(0x700,0x8AF), Attr("code-region","()")), +Annotation(Region(0x814,0x83F), Attr("symbol-info","set_fields 0x814 44")), +Annotation(Region(0x840,0x8AF), Attr("symbol","\"main\"")), +Annotation(Region(0x840,0x8AF), Attr("symbol-info","main 0x840 112")), +Annotation(Region(0x8B0,0x8C3), Attr("section","\".fini\"")), +Annotation(Region(0x8C4,0x8C7), Attr("section","\".rodata\"")), +Annotation(Region(0x8C8,0x90B), Attr("section","\".eh_frame_hdr\"")), +Annotation(Region(0x910,0x9D3), Attr("section","\".eh_frame\"")), +Annotation(Region(0x1FD78,0x2000F), Attr("segment","03 0x1FD78 672")), +Annotation(Region(0x1FD80,0x1FD87), Attr("section","\".fini_array\"")), +Annotation(Region(0x1FD88,0x1FF87), Attr("section","\".dynamic\"")), +Annotation(Region(0x1FF88,0x1FFFF), Attr("section","\".got\"")), +Annotation(Region(0x20000,0x2000F), Attr("section","\".data\"")), +Annotation(Region(0x1FD78,0x1FD7F), Attr("section","\".init_array\"")), +Annotation(Region(0x700,0x8AF), Attr("section","\".text\"")), +Annotation(Region(0x8B0,0x8C3), Attr("code-region","()"))]), +Program(Tid(1_790, "%000006fe"), Attrs([]), + Subs([Sub(Tid(1_734, "@__cxa_finalize"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x690"), +Attr("stub","()")]), "__cxa_finalize", Args([Arg(Tid(1_791, "%000006ff"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("__cxa_finalize_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(1_186, "@__cxa_finalize"), + Attrs([Attr("address","0x690")]), Phis([]), +Defs([Def(Tid(1_450, "%000005aa"), Attrs([Attr("address","0x690"), +Attr("insn","adrp x16, #126976")]), Var("R16",Imm(64)), Int(126976,64)), +Def(Tid(1_457, "%000005b1"), Attrs([Attr("address","0x694"), +Attr("insn","ldr x17, [x16, #0xfa8]")]), Var("R17",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R16",Imm(64)),Int(4008,64)),LittleEndian(),64)), +Def(Tid(1_463, "%000005b7"), Attrs([Attr("address","0x698"), +Attr("insn","add x16, x16, #0xfa8")]), Var("R16",Imm(64)), +PLUS(Var("R16",Imm(64)),Int(4008,64)))]), Jmps([Call(Tid(1_468, "%000005bc"), + Attrs([Attr("address","0x69C"), Attr("insn","br x17")]), Int(1,1), +(Indirect(Var("R17",Imm(64))),))]))])), +Sub(Tid(1_735, "@__do_global_dtors_aux"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x7C0")]), + "__do_global_dtors_aux", Args([Arg(Tid(1_792, "%00000700"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("__do_global_dtors_aux_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), +Blks([Blk(Tid(747, "@__do_global_dtors_aux"), + Attrs([Attr("address","0x7C0")]), Phis([]), Defs([Def(Tid(751, "%000002ef"), + Attrs([Attr("address","0x7C0"), +Attr("insn","stp x29, x30, [sp, #-0x20]!")]), Var("#3",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(18446744073709551584,64))), +Def(Tid(757, "%000002f5"), Attrs([Attr("address","0x7C0"), +Attr("insn","stp x29, x30, [sp, #-0x20]!")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),Var("#3",Imm(64)),Var("R29",Imm(64)),LittleEndian(),64)), +Def(Tid(763, "%000002fb"), Attrs([Attr("address","0x7C0"), +Attr("insn","stp x29, x30, [sp, #-0x20]!")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("#3",Imm(64)),Int(8,64)),Var("R30",Imm(64)),LittleEndian(),64)), +Def(Tid(767, "%000002ff"), Attrs([Attr("address","0x7C0"), +Attr("insn","stp x29, x30, [sp, #-0x20]!")]), Var("R31",Imm(64)), +Var("#3",Imm(64))), Def(Tid(773, "%00000305"), + Attrs([Attr("address","0x7C4"), Attr("insn","mov x29, sp")]), + Var("R29",Imm(64)), Var("R31",Imm(64))), Def(Tid(781, "%0000030d"), + Attrs([Attr("address","0x7C8"), Attr("insn","str x19, [sp, #0x10]")]), + Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(16,64)),Var("R19",Imm(64)),LittleEndian(),64)), +Def(Tid(786, "%00000312"), Attrs([Attr("address","0x7CC"), +Attr("insn","adrp x19, #131072")]), Var("R19",Imm(64)), Int(131072,64)), +Def(Tid(793, "%00000319"), Attrs([Attr("address","0x7D0"), +Attr("insn","ldrb w0, [x19, #0x10]")]), Var("R0",Imm(64)), +UNSIGNED(64,Load(Var("mem",Mem(64,8)),PLUS(Var("R19",Imm(64)),Int(16,64)),LittleEndian(),8)))]), +Jmps([Goto(Tid(799, "%0000031f"), Attrs([Attr("address","0x7D4"), +Attr("insn","tbnz w0, #0x0, #0x28")]), + EQ(Extract(0,0,Var("R0",Imm(64))),Int(1,1)), Direct(Tid(797, "%0000031d"))), +Goto(Tid(1_779, "%000006f3"), Attrs([]), Int(1,1), +Direct(Tid(1_131, "%0000046b")))])), Blk(Tid(1_131, "%0000046b"), + Attrs([Attr("address","0x7D8")]), Phis([]), +Defs([Def(Tid(1_134, "%0000046e"), Attrs([Attr("address","0x7D8"), +Attr("insn","adrp x0, #126976")]), Var("R0",Imm(64)), Int(126976,64)), +Def(Tid(1_141, "%00000475"), Attrs([Attr("address","0x7DC"), +Attr("insn","ldr x0, [x0, #0xfd8]")]), Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R0",Imm(64)),Int(4056,64)),LittleEndian(),64))]), +Jmps([Goto(Tid(1_147, "%0000047b"), Attrs([Attr("address","0x7E0"), +Attr("insn","cbz x0, #0x10")]), EQ(Var("R0",Imm(64)),Int(0,64)), +Direct(Tid(1_145, "%00000479"))), Goto(Tid(1_780, "%000006f4"), Attrs([]), + Int(1,1), Direct(Tid(1_170, "%00000492")))])), Blk(Tid(1_170, "%00000492"), + Attrs([Attr("address","0x7E4")]), Phis([]), +Defs([Def(Tid(1_173, "%00000495"), Attrs([Attr("address","0x7E4"), +Attr("insn","adrp x0, #131072")]), Var("R0",Imm(64)), Int(131072,64)), +Def(Tid(1_180, "%0000049c"), Attrs([Attr("address","0x7E8"), +Attr("insn","ldr x0, [x0, #0x8]")]), Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R0",Imm(64)),Int(8,64)),LittleEndian(),64)), +Def(Tid(1_185, "%000004a1"), Attrs([Attr("address","0x7EC"), +Attr("insn","bl #-0x15c")]), Var("R30",Imm(64)), Int(2032,64))]), +Jmps([Call(Tid(1_188, "%000004a4"), Attrs([Attr("address","0x7EC"), +Attr("insn","bl #-0x15c")]), Int(1,1), +(Direct(Tid(1_734, "@__cxa_finalize")),Direct(Tid(1_145, "%00000479"))))])), +Blk(Tid(1_145, "%00000479"), Attrs([Attr("address","0x7F0")]), Phis([]), +Defs([Def(Tid(1_153, "%00000481"), Attrs([Attr("address","0x7F0"), +Attr("insn","bl #-0xa0")]), Var("R30",Imm(64)), Int(2036,64))]), +Jmps([Call(Tid(1_155, "%00000483"), Attrs([Attr("address","0x7F0"), +Attr("insn","bl #-0xa0")]), Int(1,1), +(Direct(Tid(1_749, "@deregister_tm_clones")),Direct(Tid(1_157, "%00000485"))))])), +Blk(Tid(1_157, "%00000485"), Attrs([Attr("address","0x7F4")]), Phis([]), +Defs([Def(Tid(1_160, "%00000488"), Attrs([Attr("address","0x7F4"), +Attr("insn","mov w0, #0x1")]), Var("R0",Imm(64)), Int(1,64)), +Def(Tid(1_168, "%00000490"), Attrs([Attr("address","0x7F8"), +Attr("insn","strb w0, [x19, #0x10]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("R19",Imm(64)),Int(16,64)),Extract(7,0,Var("R0",Imm(64))),LittleEndian(),8))]), +Jmps([Goto(Tid(1_781, "%000006f5"), Attrs([]), Int(1,1), +Direct(Tid(797, "%0000031d")))])), Blk(Tid(797, "%0000031d"), + Attrs([Attr("address","0x7FC")]), Phis([]), Defs([Def(Tid(807, "%00000327"), + Attrs([Attr("address","0x7FC"), Attr("insn","ldr x19, [sp, #0x10]")]), + Var("R19",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(16,64)),LittleEndian(),64)), +Def(Tid(814, "%0000032e"), Attrs([Attr("address","0x800"), +Attr("insn","ldp x29, x30, [sp], #0x20")]), Var("R29",Imm(64)), +Load(Var("mem",Mem(64,8)),Var("R31",Imm(64)),LittleEndian(),64)), +Def(Tid(819, "%00000333"), Attrs([Attr("address","0x800"), +Attr("insn","ldp x29, x30, [sp], #0x20")]), Var("R30",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(8,64)),LittleEndian(),64)), +Def(Tid(823, "%00000337"), Attrs([Attr("address","0x800"), +Attr("insn","ldp x29, x30, [sp], #0x20")]), Var("R31",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(32,64)))]), Jmps([Call(Tid(828, "%0000033c"), + Attrs([Attr("address","0x804"), Attr("insn","ret")]), Int(1,1), +(Indirect(Var("R30",Imm(64))),))]))])), Sub(Tid(1_739, "@__libc_start_main"), + Attrs([Attr("c.proto","signed (*)(signed (*)(signed , char** , char** );* main, signed , char** , \nvoid* auxv)"), +Attr("address","0x680"), Attr("stub","()")]), "__libc_start_main", + Args([Arg(Tid(1_793, "%00000701"), + Attrs([Attr("c.layout","**[ : 64]"), +Attr("c.data","Top:u64 ptr ptr"), +Attr("c.type","signed (*)(signed , char** , char** );*")]), + Var("__libc_start_main_main",Imm(64)), Var("R0",Imm(64)), In()), +Arg(Tid(1_794, "%00000702"), Attrs([Attr("c.layout","[signed : 32]"), +Attr("c.data","Top:u32"), Attr("c.type","signed")]), + Var("__libc_start_main_arg2",Imm(32)), LOW(32,Var("R1",Imm(64))), In()), +Arg(Tid(1_795, "%00000703"), Attrs([Attr("c.layout","**[char : 8]"), +Attr("c.data","Top:u8 ptr ptr"), Attr("c.type","char**")]), + Var("__libc_start_main_arg3",Imm(64)), Var("R2",Imm(64)), Both()), +Arg(Tid(1_796, "%00000704"), Attrs([Attr("c.layout","*[ : 8]"), +Attr("c.data","{} ptr"), Attr("c.type","void*")]), + Var("__libc_start_main_auxv",Imm(64)), Var("R3",Imm(64)), Both()), +Arg(Tid(1_797, "%00000705"), Attrs([Attr("c.layout","[signed : 32]"), +Attr("c.data","Top:u32"), Attr("c.type","signed")]), + Var("__libc_start_main_result",Imm(32)), LOW(32,Var("R0",Imm(64))), +Out())]), Blks([Blk(Tid(580, "@__libc_start_main"), + Attrs([Attr("address","0x680")]), Phis([]), +Defs([Def(Tid(1_428, "%00000594"), Attrs([Attr("address","0x680"), +Attr("insn","adrp x16, #126976")]), Var("R16",Imm(64)), Int(126976,64)), +Def(Tid(1_435, "%0000059b"), Attrs([Attr("address","0x684"), +Attr("insn","ldr x17, [x16, #0xfa0]")]), Var("R17",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R16",Imm(64)),Int(4000,64)),LittleEndian(),64)), +Def(Tid(1_441, "%000005a1"), Attrs([Attr("address","0x688"), +Attr("insn","add x16, x16, #0xfa0")]), Var("R16",Imm(64)), +PLUS(Var("R16",Imm(64)),Int(4000,64)))]), Jmps([Call(Tid(1_446, "%000005a6"), + Attrs([Attr("address","0x68C"), Attr("insn","br x17")]), Int(1,1), +(Indirect(Var("R17",Imm(64))),))]))])), Sub(Tid(1_740, "@__stack_chk_fail"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x6A0"), +Attr("stub","()")]), "__stack_chk_fail", Args([Arg(Tid(1_798, "%00000706"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("__stack_chk_fail_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), +Blks([Blk(Tid(1_127, "@__stack_chk_fail"), Attrs([Attr("address","0x6A0")]), + Phis([]), Defs([Def(Tid(1_472, "%000005c0"), Attrs([Attr("address","0x6A0"), +Attr("insn","adrp x16, #126976")]), Var("R16",Imm(64)), Int(126976,64)), +Def(Tid(1_479, "%000005c7"), Attrs([Attr("address","0x6A4"), +Attr("insn","ldr x17, [x16, #0xfb0]")]), Var("R17",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R16",Imm(64)),Int(4016,64)),LittleEndian(),64)), +Def(Tid(1_485, "%000005cd"), Attrs([Attr("address","0x6A8"), +Attr("insn","add x16, x16, #0xfb0")]), Var("R16",Imm(64)), +PLUS(Var("R16",Imm(64)),Int(4016,64)))]), Jmps([Call(Tid(1_490, "%000005d2"), + Attrs([Attr("address","0x6AC"), Attr("insn","br x17")]), Int(1,1), +(Indirect(Var("R17",Imm(64))),))]))])), Sub(Tid(1_741, "@_fini"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x8B0")]), + "_fini", Args([Arg(Tid(1_799, "%00000707"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("_fini_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(32, "@_fini"), + Attrs([Attr("address","0x8B0")]), Phis([]), Defs([Def(Tid(38, "%00000026"), + Attrs([Attr("address","0x8B4"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("#0",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(18446744073709551600,64))), +Def(Tid(44, "%0000002c"), Attrs([Attr("address","0x8B4"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),Var("#0",Imm(64)),Var("R29",Imm(64)),LittleEndian(),64)), +Def(Tid(50, "%00000032"), Attrs([Attr("address","0x8B4"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("#0",Imm(64)),Int(8,64)),Var("R30",Imm(64)),LittleEndian(),64)), +Def(Tid(54, "%00000036"), Attrs([Attr("address","0x8B4"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("R31",Imm(64)), +Var("#0",Imm(64))), Def(Tid(60, "%0000003c"), Attrs([Attr("address","0x8B8"), +Attr("insn","mov x29, sp")]), Var("R29",Imm(64)), Var("R31",Imm(64))), +Def(Tid(67, "%00000043"), Attrs([Attr("address","0x8BC"), +Attr("insn","ldp x29, x30, [sp], #0x10")]), Var("R29",Imm(64)), +Load(Var("mem",Mem(64,8)),Var("R31",Imm(64)),LittleEndian(),64)), +Def(Tid(72, "%00000048"), Attrs([Attr("address","0x8BC"), +Attr("insn","ldp x29, x30, [sp], #0x10")]), Var("R30",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(8,64)),LittleEndian(),64)), +Def(Tid(76, "%0000004c"), Attrs([Attr("address","0x8BC"), +Attr("insn","ldp x29, x30, [sp], #0x10")]), Var("R31",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(16,64)))]), Jmps([Call(Tid(81, "%00000051"), + Attrs([Attr("address","0x8C0"), Attr("insn","ret")]), Int(1,1), +(Indirect(Var("R30",Imm(64))),))]))])), Sub(Tid(1_742, "@_init"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x640")]), + "_init", Args([Arg(Tid(1_800, "%00000708"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("_init_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(1_562, "@_init"), + Attrs([Attr("address","0x640")]), Phis([]), +Defs([Def(Tid(1_568, "%00000620"), Attrs([Attr("address","0x644"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("#9",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(18446744073709551600,64))), +Def(Tid(1_574, "%00000626"), Attrs([Attr("address","0x644"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),Var("#9",Imm(64)),Var("R29",Imm(64)),LittleEndian(),64)), +Def(Tid(1_580, "%0000062c"), Attrs([Attr("address","0x644"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("#9",Imm(64)),Int(8,64)),Var("R30",Imm(64)),LittleEndian(),64)), +Def(Tid(1_584, "%00000630"), Attrs([Attr("address","0x644"), +Attr("insn","stp x29, x30, [sp, #-0x10]!")]), Var("R31",Imm(64)), +Var("#9",Imm(64))), Def(Tid(1_590, "%00000636"), + Attrs([Attr("address","0x648"), Attr("insn","mov x29, sp")]), + Var("R29",Imm(64)), Var("R31",Imm(64))), Def(Tid(1_595, "%0000063b"), + Attrs([Attr("address","0x64C"), Attr("insn","bl #0xe8")]), + Var("R30",Imm(64)), Int(1616,64))]), Jmps([Call(Tid(1_597, "%0000063d"), + Attrs([Attr("address","0x64C"), Attr("insn","bl #0xe8")]), Int(1,1), +(Direct(Tid(1_747, "@call_weak_fn")),Direct(Tid(1_599, "%0000063f"))))])), +Blk(Tid(1_599, "%0000063f"), Attrs([Attr("address","0x650")]), Phis([]), +Defs([Def(Tid(1_604, "%00000644"), Attrs([Attr("address","0x650"), +Attr("insn","ldp x29, x30, [sp], #0x10")]), Var("R29",Imm(64)), +Load(Var("mem",Mem(64,8)),Var("R31",Imm(64)),LittleEndian(),64)), +Def(Tid(1_609, "%00000649"), Attrs([Attr("address","0x650"), +Attr("insn","ldp x29, x30, [sp], #0x10")]), Var("R30",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(8,64)),LittleEndian(),64)), +Def(Tid(1_613, "%0000064d"), Attrs([Attr("address","0x650"), +Attr("insn","ldp x29, x30, [sp], #0x10")]), Var("R31",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(16,64)))]), Jmps([Call(Tid(1_618, "%00000652"), + Attrs([Attr("address","0x654"), Attr("insn","ret")]), Int(1,1), +(Indirect(Var("R30",Imm(64))),))]))])), Sub(Tid(1_743, "@_start"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x700"), +Attr("entry-point","()")]), "_start", Args([Arg(Tid(1_801, "%00000709"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("_start_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(517, "@_start"), + Attrs([Attr("address","0x700")]), Phis([]), Defs([Def(Tid(522, "%0000020a"), + Attrs([Attr("address","0x704"), Attr("insn","mov x29, #0x0")]), + Var("R29",Imm(64)), Int(0,64)), Def(Tid(527, "%0000020f"), + Attrs([Attr("address","0x708"), Attr("insn","mov x30, #0x0")]), + Var("R30",Imm(64)), Int(0,64)), Def(Tid(533, "%00000215"), + Attrs([Attr("address","0x70C"), Attr("insn","mov x5, x0")]), + Var("R5",Imm(64)), Var("R0",Imm(64))), Def(Tid(540, "%0000021c"), + Attrs([Attr("address","0x710"), Attr("insn","ldr x1, [sp]")]), + Var("R1",Imm(64)), +Load(Var("mem",Mem(64,8)),Var("R31",Imm(64)),LittleEndian(),64)), +Def(Tid(546, "%00000222"), Attrs([Attr("address","0x714"), +Attr("insn","add x2, sp, #0x8")]), Var("R2",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(8,64))), Def(Tid(552, "%00000228"), + Attrs([Attr("address","0x718"), Attr("insn","mov x6, sp")]), + Var("R6",Imm(64)), Var("R31",Imm(64))), Def(Tid(557, "%0000022d"), + Attrs([Attr("address","0x71C"), Attr("insn","adrp x0, #126976")]), + Var("R0",Imm(64)), Int(126976,64)), Def(Tid(564, "%00000234"), + Attrs([Attr("address","0x720"), Attr("insn","ldr x0, [x0, #0xff0]")]), + Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R0",Imm(64)),Int(4080,64)),LittleEndian(),64)), +Def(Tid(569, "%00000239"), Attrs([Attr("address","0x724"), +Attr("insn","mov x3, #0x0")]), Var("R3",Imm(64)), Int(0,64)), +Def(Tid(574, "%0000023e"), Attrs([Attr("address","0x728"), +Attr("insn","mov x4, #0x0")]), Var("R4",Imm(64)), Int(0,64)), +Def(Tid(579, "%00000243"), Attrs([Attr("address","0x72C"), +Attr("insn","bl #-0xac")]), Var("R30",Imm(64)), Int(1840,64))]), +Jmps([Call(Tid(582, "%00000246"), Attrs([Attr("address","0x72C"), +Attr("insn","bl #-0xac")]), Int(1,1), +(Direct(Tid(1_739, "@__libc_start_main")),Direct(Tid(584, "%00000248"))))])), +Blk(Tid(584, "%00000248"), Attrs([Attr("address","0x730")]), Phis([]), +Defs([Def(Tid(587, "%0000024b"), Attrs([Attr("address","0x730"), +Attr("insn","bl #-0x70")]), Var("R30",Imm(64)), Int(1844,64))]), +Jmps([Call(Tid(590, "%0000024e"), Attrs([Attr("address","0x730"), +Attr("insn","bl #-0x70")]), Int(1,1), +(Direct(Tid(1_746, "@abort")),Direct(Tid(1_782, "%000006f6"))))])), +Blk(Tid(1_782, "%000006f6"), Attrs([]), Phis([]), Defs([]), +Jmps([Call(Tid(1_783, "%000006f7"), Attrs([]), Int(1,1), +(Direct(Tid(1_747, "@call_weak_fn")),))]))])), Sub(Tid(1_746, "@abort"), + Attrs([Attr("noreturn","()"), Attr("c.proto","void (*)(void)"), +Attr("address","0x6C0"), Attr("stub","()")]), "abort", Args([]), +Blks([Blk(Tid(588, "@abort"), Attrs([Attr("address","0x6C0")]), Phis([]), +Defs([Def(Tid(1_516, "%000005ec"), Attrs([Attr("address","0x6C0"), +Attr("insn","adrp x16, #126976")]), Var("R16",Imm(64)), Int(126976,64)), +Def(Tid(1_523, "%000005f3"), Attrs([Attr("address","0x6C4"), +Attr("insn","ldr x17, [x16, #0xfc0]")]), Var("R17",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R16",Imm(64)),Int(4032,64)),LittleEndian(),64)), +Def(Tid(1_529, "%000005f9"), Attrs([Attr("address","0x6C8"), +Attr("insn","add x16, x16, #0xfc0")]), Var("R16",Imm(64)), +PLUS(Var("R16",Imm(64)),Int(4032,64)))]), Jmps([Call(Tid(1_534, "%000005fe"), + Attrs([Attr("address","0x6CC"), Attr("insn","br x17")]), Int(1,1), +(Indirect(Var("R17",Imm(64))),))]))])), Sub(Tid(1_747, "@call_weak_fn"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x734")]), + "call_weak_fn", Args([Arg(Tid(1_802, "%0000070a"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("call_weak_fn_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(592, "@call_weak_fn"), + Attrs([Attr("address","0x734")]), Phis([]), Defs([Def(Tid(595, "%00000253"), + Attrs([Attr("address","0x734"), Attr("insn","adrp x0, #126976")]), + Var("R0",Imm(64)), Int(126976,64)), Def(Tid(602, "%0000025a"), + Attrs([Attr("address","0x738"), Attr("insn","ldr x0, [x0, #0xfe0]")]), + Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R0",Imm(64)),Int(4064,64)),LittleEndian(),64))]), +Jmps([Goto(Tid(608, "%00000260"), Attrs([Attr("address","0x73C"), +Attr("insn","cbz x0, #0x8")]), EQ(Var("R0",Imm(64)),Int(0,64)), +Direct(Tid(606, "%0000025e"))), Goto(Tid(1_784, "%000006f8"), Attrs([]), + Int(1,1), Direct(Tid(1_250, "%000004e2")))])), Blk(Tid(606, "%0000025e"), + Attrs([Attr("address","0x744")]), Phis([]), Defs([]), +Jmps([Call(Tid(614, "%00000266"), Attrs([Attr("address","0x744"), +Attr("insn","ret")]), Int(1,1), (Indirect(Var("R30",Imm(64))),))])), +Blk(Tid(1_250, "%000004e2"), Attrs([Attr("address","0x740")]), Phis([]), +Defs([]), Jmps([Goto(Tid(1_253, "%000004e5"), Attrs([Attr("address","0x740"), +Attr("insn","b #-0x90")]), Int(1,1), +Direct(Tid(1_251, "@__gmon_start__")))])), Blk(Tid(1_251, "@__gmon_start__"), + Attrs([Attr("address","0x6B0")]), Phis([]), +Defs([Def(Tid(1_494, "%000005d6"), Attrs([Attr("address","0x6B0"), +Attr("insn","adrp x16, #126976")]), Var("R16",Imm(64)), Int(126976,64)), +Def(Tid(1_501, "%000005dd"), Attrs([Attr("address","0x6B4"), +Attr("insn","ldr x17, [x16, #0xfb8]")]), Var("R17",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R16",Imm(64)),Int(4024,64)),LittleEndian(),64)), +Def(Tid(1_507, "%000005e3"), Attrs([Attr("address","0x6B8"), +Attr("insn","add x16, x16, #0xfb8")]), Var("R16",Imm(64)), +PLUS(Var("R16",Imm(64)),Int(4024,64)))]), Jmps([Call(Tid(1_512, "%000005e8"), + Attrs([Attr("address","0x6BC"), Attr("insn","br x17")]), Int(1,1), +(Indirect(Var("R17",Imm(64))),))]))])), +Sub(Tid(1_749, "@deregister_tm_clones"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x750")]), + "deregister_tm_clones", Args([Arg(Tid(1_803, "%0000070b"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("deregister_tm_clones_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), +Blks([Blk(Tid(620, "@deregister_tm_clones"), + Attrs([Attr("address","0x750")]), Phis([]), Defs([Def(Tid(623, "%0000026f"), + Attrs([Attr("address","0x750"), Attr("insn","adrp x0, #131072")]), + Var("R0",Imm(64)), Int(131072,64)), Def(Tid(629, "%00000275"), + Attrs([Attr("address","0x754"), Attr("insn","add x0, x0, #0x10")]), + Var("R0",Imm(64)), PLUS(Var("R0",Imm(64)),Int(16,64))), +Def(Tid(634, "%0000027a"), Attrs([Attr("address","0x758"), +Attr("insn","adrp x1, #131072")]), Var("R1",Imm(64)), Int(131072,64)), +Def(Tid(640, "%00000280"), Attrs([Attr("address","0x75C"), +Attr("insn","add x1, x1, #0x10")]), Var("R1",Imm(64)), +PLUS(Var("R1",Imm(64)),Int(16,64))), Def(Tid(646, "%00000286"), + Attrs([Attr("address","0x760"), Attr("insn","cmp x1, x0")]), + Var("#1",Imm(64)), NOT(Var("R0",Imm(64)))), Def(Tid(651, "%0000028b"), + Attrs([Attr("address","0x760"), Attr("insn","cmp x1, x0")]), + Var("#2",Imm(64)), PLUS(Var("R1",Imm(64)),NOT(Var("R0",Imm(64))))), +Def(Tid(657, "%00000291"), Attrs([Attr("address","0x760"), +Attr("insn","cmp x1, x0")]), Var("VF",Imm(1)), +NEQ(SIGNED(128,PLUS(Var("#2",Imm(64)),Int(1,64))),PLUS(PLUS(SIGNED(128,Var("R1",Imm(64))),SIGNED(128,Var("#1",Imm(64)))),Int(1,128)))), +Def(Tid(663, "%00000297"), Attrs([Attr("address","0x760"), +Attr("insn","cmp x1, x0")]), Var("CF",Imm(1)), +NEQ(UNSIGNED(128,PLUS(Var("#2",Imm(64)),Int(1,64))),PLUS(PLUS(UNSIGNED(128,Var("R1",Imm(64))),UNSIGNED(128,Var("#1",Imm(64)))),Int(1,128)))), +Def(Tid(667, "%0000029b"), Attrs([Attr("address","0x760"), +Attr("insn","cmp x1, x0")]), Var("ZF",Imm(1)), +EQ(PLUS(Var("#2",Imm(64)),Int(1,64)),Int(0,64))), Def(Tid(671, "%0000029f"), + Attrs([Attr("address","0x760"), Attr("insn","cmp x1, x0")]), + Var("NF",Imm(1)), Extract(63,63,PLUS(Var("#2",Imm(64)),Int(1,64))))]), +Jmps([Goto(Tid(677, "%000002a5"), Attrs([Attr("address","0x764"), +Attr("insn","b.eq #0x18")]), EQ(Var("ZF",Imm(1)),Int(1,1)), +Direct(Tid(675, "%000002a3"))), Goto(Tid(1_785, "%000006f9"), Attrs([]), + Int(1,1), Direct(Tid(1_220, "%000004c4")))])), Blk(Tid(1_220, "%000004c4"), + Attrs([Attr("address","0x768")]), Phis([]), +Defs([Def(Tid(1_223, "%000004c7"), Attrs([Attr("address","0x768"), +Attr("insn","adrp x1, #126976")]), Var("R1",Imm(64)), Int(126976,64)), +Def(Tid(1_230, "%000004ce"), Attrs([Attr("address","0x76C"), +Attr("insn","ldr x1, [x1, #0xfd0]")]), Var("R1",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R1",Imm(64)),Int(4048,64)),LittleEndian(),64))]), +Jmps([Goto(Tid(1_235, "%000004d3"), Attrs([Attr("address","0x770"), +Attr("insn","cbz x1, #0xc")]), EQ(Var("R1",Imm(64)),Int(0,64)), +Direct(Tid(675, "%000002a3"))), Goto(Tid(1_786, "%000006fa"), Attrs([]), + Int(1,1), Direct(Tid(1_239, "%000004d7")))])), Blk(Tid(675, "%000002a3"), + Attrs([Attr("address","0x77C")]), Phis([]), Defs([]), +Jmps([Call(Tid(683, "%000002ab"), Attrs([Attr("address","0x77C"), +Attr("insn","ret")]), Int(1,1), (Indirect(Var("R30",Imm(64))),))])), +Blk(Tid(1_239, "%000004d7"), Attrs([Attr("address","0x774")]), Phis([]), +Defs([Def(Tid(1_243, "%000004db"), Attrs([Attr("address","0x774"), +Attr("insn","mov x16, x1")]), Var("R16",Imm(64)), Var("R1",Imm(64)))]), +Jmps([Call(Tid(1_248, "%000004e0"), Attrs([Attr("address","0x778"), +Attr("insn","br x16")]), Int(1,1), (Indirect(Var("R16",Imm(64))),))]))])), +Sub(Tid(1_752, "@frame_dummy"), Attrs([Attr("c.proto","signed (*)(void)"), +Attr("address","0x810")]), "frame_dummy", Args([Arg(Tid(1_804, "%0000070c"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("frame_dummy_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(834, "@frame_dummy"), + Attrs([Attr("address","0x810")]), Phis([]), Defs([]), +Jmps([Call(Tid(836, "%00000344"), Attrs([Attr("address","0x810"), +Attr("insn","b #-0x90")]), Int(1,1), +(Direct(Tid(1_755, "@register_tm_clones")),))]))])), Sub(Tid(1_753, "@main"), + Attrs([Attr("c.proto","signed (*)(signed argc, const char** argv)"), +Attr("address","0x840")]), "main", Args([Arg(Tid(1_805, "%0000070d"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("main_argc",Imm(32)), +LOW(32,Var("R0",Imm(64))), In()), Arg(Tid(1_806, "%0000070e"), + Attrs([Attr("c.layout","**[char : 8]"), Attr("c.data","Top:u8 ptr ptr"), +Attr("c.type"," const char**")]), Var("main_argv",Imm(64)), +Var("R1",Imm(64)), Both()), Arg(Tid(1_807, "%0000070f"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("main_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(905, "@main"), + Attrs([Attr("address","0x840")]), Phis([]), Defs([Def(Tid(909, "%0000038d"), + Attrs([Attr("address","0x840"), Attr("insn","sub sp, sp, #0x30")]), + Var("R31",Imm(64)), PLUS(Var("R31",Imm(64)),Int(18446744073709551568,64))), +Def(Tid(915, "%00000393"), Attrs([Attr("address","0x844"), +Attr("insn","stp x29, x30, [sp, #0x20]")]), Var("#4",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(32,64))), Def(Tid(921, "%00000399"), + Attrs([Attr("address","0x844"), Attr("insn","stp x29, x30, [sp, #0x20]")]), + Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),Var("#4",Imm(64)),Var("R29",Imm(64)),LittleEndian(),64)), +Def(Tid(927, "%0000039f"), Attrs([Attr("address","0x844"), +Attr("insn","stp x29, x30, [sp, #0x20]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("#4",Imm(64)),Int(8,64)),Var("R30",Imm(64)),LittleEndian(),64)), +Def(Tid(933, "%000003a5"), Attrs([Attr("address","0x848"), +Attr("insn","add x29, sp, #0x20")]), Var("R29",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(32,64))), Def(Tid(938, "%000003aa"), + Attrs([Attr("address","0x84C"), Attr("insn","adrp x0, #126976")]), + Var("R0",Imm(64)), Int(126976,64)), Def(Tid(945, "%000003b1"), + Attrs([Attr("address","0x850"), Attr("insn","ldr x0, [x0, #0xfe8]")]), + Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R0",Imm(64)),Int(4072,64)),LittleEndian(),64)), +Def(Tid(952, "%000003b8"), Attrs([Attr("address","0x854"), +Attr("insn","ldr x1, [x0]")]), Var("R1",Imm(64)), +Load(Var("mem",Mem(64,8)),Var("R0",Imm(64)),LittleEndian(),64)), +Def(Tid(960, "%000003c0"), Attrs([Attr("address","0x858"), +Attr("insn","str x1, [sp, #0x18]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(24,64)),Var("R1",Imm(64)),LittleEndian(),64)), +Def(Tid(965, "%000003c5"), Attrs([Attr("address","0x85C"), +Attr("insn","mov x1, #0x0")]), Var("R1",Imm(64)), Int(0,64)), +Def(Tid(970, "%000003ca"), Attrs([Attr("address","0x860"), +Attr("insn","mov x0, #0x3")]), Var("R0",Imm(64)), Int(3,64)), +Def(Tid(978, "%000003d2"), Attrs([Attr("address","0x864"), +Attr("insn","str x0, [sp]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),Var("R31",Imm(64)),Var("R0",Imm(64)),LittleEndian(),64)), +Def(Tid(983, "%000003d7"), Attrs([Attr("address","0x868"), +Attr("insn","mov x0, #0xa")]), Var("R0",Imm(64)), Int(10,64)), +Def(Tid(991, "%000003df"), Attrs([Attr("address","0x86C"), +Attr("insn","str x0, [sp, #0x10]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(16,64)),Var("R0",Imm(64)),LittleEndian(),64)), +Def(Tid(997, "%000003e5"), Attrs([Attr("address","0x870"), +Attr("insn","mov x0, sp")]), Var("R0",Imm(64)), Var("R31",Imm(64))), +Def(Tid(1_002, "%000003ea"), Attrs([Attr("address","0x874"), +Attr("insn","bl #-0x60")]), Var("R30",Imm(64)), Int(2168,64))]), +Jmps([Call(Tid(1_004, "%000003ec"), Attrs([Attr("address","0x874"), +Attr("insn","bl #-0x60")]), Int(1,1), +(Direct(Tid(1_758, "@set_fields")),Direct(Tid(1_006, "%000003ee"))))])), +Blk(Tid(1_006, "%000003ee"), Attrs([Attr("address","0x878")]), Phis([]), +Defs([Def(Tid(1_009, "%000003f1"), Attrs([Attr("address","0x878"), +Attr("insn","mov w0, #0x0")]), Var("R0",Imm(64)), Int(0,64)), +Def(Tid(1_015, "%000003f7"), Attrs([Attr("address","0x87C"), +Attr("insn","mov w1, w0")]), Var("R1",Imm(64)), +UNSIGNED(64,Extract(31,0,Var("R0",Imm(64))))), Def(Tid(1_020, "%000003fc"), + Attrs([Attr("address","0x880"), Attr("insn","adrp x0, #126976")]), + Var("R0",Imm(64)), Int(126976,64)), Def(Tid(1_027, "%00000403"), + Attrs([Attr("address","0x884"), Attr("insn","ldr x0, [x0, #0xfe8]")]), + Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R0",Imm(64)),Int(4072,64)),LittleEndian(),64)), +Def(Tid(1_034, "%0000040a"), Attrs([Attr("address","0x888"), +Attr("insn","ldr x3, [sp, #0x18]")]), Var("R3",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(24,64)),LittleEndian(),64)), +Def(Tid(1_041, "%00000411"), Attrs([Attr("address","0x88C"), +Attr("insn","ldr x2, [x0]")]), Var("R2",Imm(64)), +Load(Var("mem",Mem(64,8)),Var("R0",Imm(64)),LittleEndian(),64)), +Def(Tid(1_047, "%00000417"), Attrs([Attr("address","0x890"), +Attr("insn","subs x3, x3, x2")]), Var("#5",Imm(64)), NOT(Var("R2",Imm(64)))), +Def(Tid(1_052, "%0000041c"), Attrs([Attr("address","0x890"), +Attr("insn","subs x3, x3, x2")]), Var("#6",Imm(64)), +PLUS(Var("R3",Imm(64)),NOT(Var("R2",Imm(64))))), Def(Tid(1_058, "%00000422"), + Attrs([Attr("address","0x890"), Attr("insn","subs x3, x3, x2")]), + Var("VF",Imm(1)), +NEQ(SIGNED(128,PLUS(Var("#6",Imm(64)),Int(1,64))),PLUS(PLUS(SIGNED(128,Var("R3",Imm(64))),SIGNED(128,Var("#5",Imm(64)))),Int(1,128)))), +Def(Tid(1_064, "%00000428"), Attrs([Attr("address","0x890"), +Attr("insn","subs x3, x3, x2")]), Var("CF",Imm(1)), +NEQ(UNSIGNED(128,PLUS(Var("#6",Imm(64)),Int(1,64))),PLUS(PLUS(UNSIGNED(128,Var("R3",Imm(64))),UNSIGNED(128,Var("#5",Imm(64)))),Int(1,128)))), +Def(Tid(1_068, "%0000042c"), Attrs([Attr("address","0x890"), +Attr("insn","subs x3, x3, x2")]), Var("ZF",Imm(1)), +EQ(PLUS(Var("#6",Imm(64)),Int(1,64)),Int(0,64))), +Def(Tid(1_072, "%00000430"), Attrs([Attr("address","0x890"), +Attr("insn","subs x3, x3, x2")]), Var("NF",Imm(1)), +Extract(63,63,PLUS(Var("#6",Imm(64)),Int(1,64)))), +Def(Tid(1_076, "%00000434"), Attrs([Attr("address","0x890"), +Attr("insn","subs x3, x3, x2")]), Var("R3",Imm(64)), +PLUS(Var("#6",Imm(64)),Int(1,64))), Def(Tid(1_081, "%00000439"), + Attrs([Attr("address","0x894"), Attr("insn","mov x2, #0x0")]), + Var("R2",Imm(64)), Int(0,64))]), Jmps([Goto(Tid(1_087, "%0000043f"), + Attrs([Attr("address","0x898"), Attr("insn","b.eq #0x8")]), + EQ(Var("ZF",Imm(1)),Int(1,1)), Direct(Tid(1_085, "%0000043d"))), +Goto(Tid(1_787, "%000006fb"), Attrs([]), Int(1,1), +Direct(Tid(1_123, "%00000463")))])), Blk(Tid(1_123, "%00000463"), + Attrs([Attr("address","0x89C")]), Phis([]), +Defs([Def(Tid(1_126, "%00000466"), Attrs([Attr("address","0x89C"), +Attr("insn","bl #-0x1fc")]), Var("R30",Imm(64)), Int(2208,64))]), +Jmps([Call(Tid(1_129, "%00000469"), Attrs([Attr("address","0x89C"), +Attr("insn","bl #-0x1fc")]), Int(1,1), +(Direct(Tid(1_740, "@__stack_chk_fail")),Direct(Tid(1_085, "%0000043d"))))])), +Blk(Tid(1_085, "%0000043d"), Attrs([Attr("address","0x8A0")]), Phis([]), +Defs([Def(Tid(1_094, "%00000446"), Attrs([Attr("address","0x8A0"), +Attr("insn","mov w0, w1")]), Var("R0",Imm(64)), +UNSIGNED(64,Extract(31,0,Var("R1",Imm(64))))), Def(Tid(1_100, "%0000044c"), + Attrs([Attr("address","0x8A4"), Attr("insn","ldp x29, x30, [sp, #0x20]")]), + Var("#7",Imm(64)), PLUS(Var("R31",Imm(64)),Int(32,64))), +Def(Tid(1_105, "%00000451"), Attrs([Attr("address","0x8A4"), +Attr("insn","ldp x29, x30, [sp, #0x20]")]), Var("R29",Imm(64)), +Load(Var("mem",Mem(64,8)),Var("#7",Imm(64)),LittleEndian(),64)), +Def(Tid(1_110, "%00000456"), Attrs([Attr("address","0x8A4"), +Attr("insn","ldp x29, x30, [sp, #0x20]")]), Var("R30",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("#7",Imm(64)),Int(8,64)),LittleEndian(),64)), +Def(Tid(1_116, "%0000045c"), Attrs([Attr("address","0x8A8"), +Attr("insn","add sp, sp, #0x30")]), Var("R31",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(48,64)))]), Jmps([Call(Tid(1_121, "%00000461"), + Attrs([Attr("address","0x8AC"), Attr("insn","ret")]), Int(1,1), +(Indirect(Var("R30",Imm(64))),))]))])), +Sub(Tid(1_755, "@register_tm_clones"), + Attrs([Attr("c.proto","signed (*)(void)"), Attr("address","0x780")]), + "register_tm_clones", Args([Arg(Tid(1_808, "%00000710"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("register_tm_clones_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), +Blks([Blk(Tid(685, "@register_tm_clones"), Attrs([Attr("address","0x780")]), + Phis([]), Defs([Def(Tid(688, "%000002b0"), Attrs([Attr("address","0x780"), +Attr("insn","adrp x0, #131072")]), Var("R0",Imm(64)), Int(131072,64)), +Def(Tid(694, "%000002b6"), Attrs([Attr("address","0x784"), +Attr("insn","add x0, x0, #0x10")]), Var("R0",Imm(64)), +PLUS(Var("R0",Imm(64)),Int(16,64))), Def(Tid(699, "%000002bb"), + Attrs([Attr("address","0x788"), Attr("insn","adrp x1, #131072")]), + Var("R1",Imm(64)), Int(131072,64)), Def(Tid(705, "%000002c1"), + Attrs([Attr("address","0x78C"), Attr("insn","add x1, x1, #0x10")]), + Var("R1",Imm(64)), PLUS(Var("R1",Imm(64)),Int(16,64))), +Def(Tid(712, "%000002c8"), Attrs([Attr("address","0x790"), +Attr("insn","sub x1, x1, x0")]), Var("R1",Imm(64)), +PLUS(PLUS(Var("R1",Imm(64)),NOT(Var("R0",Imm(64)))),Int(1,64))), +Def(Tid(718, "%000002ce"), Attrs([Attr("address","0x794"), +Attr("insn","lsr x2, x1, #63")]), Var("R2",Imm(64)), +UNSIGNED(64,Extract(63,63,Var("R1",Imm(64))))), Def(Tid(725, "%000002d5"), + Attrs([Attr("address","0x798"), Attr("insn","add x1, x2, x1, asr #3")]), + Var("R1",Imm(64)), +PLUS(Var("R2",Imm(64)),ARSHIFT(Var("R1",Imm(64)),Int(3,4)))), +Def(Tid(731, "%000002db"), Attrs([Attr("address","0x79C"), +Attr("insn","asr x1, x1, #1")]), Var("R1",Imm(64)), +SIGNED(64,Extract(63,1,Var("R1",Imm(64)))))]), +Jmps([Goto(Tid(737, "%000002e1"), Attrs([Attr("address","0x7A0"), +Attr("insn","cbz x1, #0x18")]), EQ(Var("R1",Imm(64)),Int(0,64)), +Direct(Tid(735, "%000002df"))), Goto(Tid(1_788, "%000006fc"), Attrs([]), + Int(1,1), Direct(Tid(1_190, "%000004a6")))])), Blk(Tid(1_190, "%000004a6"), + Attrs([Attr("address","0x7A4")]), Phis([]), +Defs([Def(Tid(1_193, "%000004a9"), Attrs([Attr("address","0x7A4"), +Attr("insn","adrp x2, #126976")]), Var("R2",Imm(64)), Int(126976,64)), +Def(Tid(1_200, "%000004b0"), Attrs([Attr("address","0x7A8"), +Attr("insn","ldr x2, [x2, #0xff8]")]), Var("R2",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R2",Imm(64)),Int(4088,64)),LittleEndian(),64))]), +Jmps([Goto(Tid(1_205, "%000004b5"), Attrs([Attr("address","0x7AC"), +Attr("insn","cbz x2, #0xc")]), EQ(Var("R2",Imm(64)),Int(0,64)), +Direct(Tid(735, "%000002df"))), Goto(Tid(1_789, "%000006fd"), Attrs([]), + Int(1,1), Direct(Tid(1_209, "%000004b9")))])), Blk(Tid(735, "%000002df"), + Attrs([Attr("address","0x7B8")]), Phis([]), Defs([]), +Jmps([Call(Tid(743, "%000002e7"), Attrs([Attr("address","0x7B8"), +Attr("insn","ret")]), Int(1,1), (Indirect(Var("R30",Imm(64))),))])), +Blk(Tid(1_209, "%000004b9"), Attrs([Attr("address","0x7B0")]), Phis([]), +Defs([Def(Tid(1_213, "%000004bd"), Attrs([Attr("address","0x7B0"), +Attr("insn","mov x16, x2")]), Var("R16",Imm(64)), Var("R2",Imm(64)))]), +Jmps([Call(Tid(1_218, "%000004c2"), Attrs([Attr("address","0x7B4"), +Attr("insn","br x16")]), Int(1,1), (Indirect(Var("R16",Imm(64))),))]))])), +Sub(Tid(1_758, "@set_fields"), Attrs([Attr("c.proto","signed (*)(void)"), +Attr("address","0x814")]), "set_fields", Args([Arg(Tid(1_809, "%00000711"), + Attrs([Attr("c.layout","[signed : 32]"), Attr("c.data","Top:u32"), +Attr("c.type","signed")]), Var("set_fields_result",Imm(32)), +LOW(32,Var("R0",Imm(64))), Out())]), Blks([Blk(Tid(838, "@set_fields"), + Attrs([Attr("address","0x814")]), Phis([]), Defs([Def(Tid(842, "%0000034a"), + Attrs([Attr("address","0x814"), Attr("insn","sub sp, sp, #0x10")]), + Var("R31",Imm(64)), PLUS(Var("R31",Imm(64)),Int(18446744073709551600,64))), +Def(Tid(850, "%00000352"), Attrs([Attr("address","0x818"), +Attr("insn","str x0, [sp, #0x8]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(8,64)),Var("R0",Imm(64)),LittleEndian(),64)), +Def(Tid(857, "%00000359"), Attrs([Attr("address","0x81C"), +Attr("insn","ldr x0, [sp, #0x8]")]), Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(8,64)),LittleEndian(),64)), +Def(Tid(862, "%0000035e"), Attrs([Attr("address","0x820"), +Attr("insn","mov x1, #0x1")]), Var("R1",Imm(64)), Int(1,64)), +Def(Tid(870, "%00000366"), Attrs([Attr("address","0x824"), +Attr("insn","str x1, [x0]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),Var("R0",Imm(64)),Var("R1",Imm(64)),LittleEndian(),64)), +Def(Tid(877, "%0000036d"), Attrs([Attr("address","0x828"), +Attr("insn","ldr x0, [sp, #0x8]")]), Var("R0",Imm(64)), +Load(Var("mem",Mem(64,8)),PLUS(Var("R31",Imm(64)),Int(8,64)),LittleEndian(),64)), +Def(Tid(882, "%00000372"), Attrs([Attr("address","0x82C"), +Attr("insn","mov x1, #0x2")]), Var("R1",Imm(64)), Int(2,64)), +Def(Tid(890, "%0000037a"), Attrs([Attr("address","0x830"), +Attr("insn","str x1, [x0, #0x10]")]), Var("mem",Mem(64,8)), +Store(Var("mem",Mem(64,8)),PLUS(Var("R0",Imm(64)),Int(16,64)),Var("R1",Imm(64)),LittleEndian(),64)), +Def(Tid(898, "%00000382"), Attrs([Attr("address","0x838"), +Attr("insn","add sp, sp, #0x10")]), Var("R31",Imm(64)), +PLUS(Var("R31",Imm(64)),Int(16,64)))]), Jmps([Call(Tid(903, "%00000387"), + Attrs([Attr("address","0x83C"), Attr("insn","ret")]), Int(1,1), +(Indirect(Var("R30",Imm(64))),))]))]))]))) \ No newline at end of file diff --git a/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.bir b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.bir new file mode 100644 index 000000000..4bd458e29 --- /dev/null +++ b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.bir @@ -0,0 +1,293 @@ +000006fe: program +000006c6: sub __cxa_finalize(__cxa_finalize_result) +000006ff: __cxa_finalize_result :: out u32 = low:32[R0] + +000004a2: +000005aa: R16 := 0x1F000 +000005b1: R17 := mem[R16 + 0xFA8, el]:u64 +000005b7: R16 := R16 + 0xFA8 +000005bc: call R17 with noreturn + +000006c7: sub __do_global_dtors_aux(__do_global_dtors_aux_result) +00000700: __do_global_dtors_aux_result :: out u32 = low:32[R0] + +000002eb: +000002ef: #3 := R31 - 0x20 +000002f5: mem := mem with [#3, el]:u64 <- R29 +000002fb: mem := mem with [#3 + 8, el]:u64 <- R30 +000002ff: R31 := #3 +00000305: R29 := R31 +0000030d: mem := mem with [R31 + 0x10, el]:u64 <- R19 +00000312: R19 := 0x20000 +00000319: R0 := pad:64[mem[R19 + 0x10]] +0000031f: when 0:0[R0] goto %0000031d +000006f3: goto %0000046b + +0000046b: +0000046e: R0 := 0x1F000 +00000475: R0 := mem[R0 + 0xFD8, el]:u64 +0000047b: when R0 = 0 goto %00000479 +000006f4: goto %00000492 + +00000492: +00000495: R0 := 0x20000 +0000049c: R0 := mem[R0 + 8, el]:u64 +000004a1: R30 := 0x7F0 +000004a4: call @__cxa_finalize with return %00000479 + +00000479: +00000481: R30 := 0x7F4 +00000483: call @deregister_tm_clones with return %00000485 + +00000485: +00000488: R0 := 1 +00000490: mem := mem with [R19 + 0x10] <- 7:0[R0] +000006f5: goto %0000031d + +0000031d: +00000327: R19 := mem[R31 + 0x10, el]:u64 +0000032e: R29 := mem[R31, el]:u64 +00000333: R30 := mem[R31 + 8, el]:u64 +00000337: R31 := R31 + 0x20 +0000033c: call R30 with noreturn + +000006cb: sub __libc_start_main(__libc_start_main_main, __libc_start_main_arg2, __libc_start_main_arg3, __libc_start_main_auxv, __libc_start_main_result) +00000701: __libc_start_main_main :: in u64 = R0 +00000702: __libc_start_main_arg2 :: in u32 = low:32[R1] +00000703: __libc_start_main_arg3 :: in out u64 = R2 +00000704: __libc_start_main_auxv :: in out u64 = R3 +00000705: __libc_start_main_result :: out u32 = low:32[R0] + +00000244: +00000594: R16 := 0x1F000 +0000059b: R17 := mem[R16 + 0xFA0, el]:u64 +000005a1: R16 := R16 + 0xFA0 +000005a6: call R17 with noreturn + +000006cc: sub __stack_chk_fail(__stack_chk_fail_result) +00000706: __stack_chk_fail_result :: out u32 = low:32[R0] + +00000467: +000005c0: R16 := 0x1F000 +000005c7: R17 := mem[R16 + 0xFB0, el]:u64 +000005cd: R16 := R16 + 0xFB0 +000005d2: call R17 with noreturn + +000006cd: sub _fini(_fini_result) +00000707: _fini_result :: out u32 = low:32[R0] + +00000020: +00000026: #0 := R31 - 0x10 +0000002c: mem := mem with [#0, el]:u64 <- R29 +00000032: mem := mem with [#0 + 8, el]:u64 <- R30 +00000036: R31 := #0 +0000003c: R29 := R31 +00000043: R29 := mem[R31, el]:u64 +00000048: R30 := mem[R31 + 8, el]:u64 +0000004c: R31 := R31 + 0x10 +00000051: call R30 with noreturn + +000006ce: sub _init(_init_result) +00000708: _init_result :: out u32 = low:32[R0] + +0000061a: +00000620: #9 := R31 - 0x10 +00000626: mem := mem with [#9, el]:u64 <- R29 +0000062c: mem := mem with [#9 + 8, el]:u64 <- R30 +00000630: R31 := #9 +00000636: R29 := R31 +0000063b: R30 := 0x650 +0000063d: call @call_weak_fn with return %0000063f + +0000063f: +00000644: R29 := mem[R31, el]:u64 +00000649: R30 := mem[R31 + 8, el]:u64 +0000064d: R31 := R31 + 0x10 +00000652: call R30 with noreturn + +000006cf: sub _start(_start_result) +00000709: _start_result :: out u32 = low:32[R0] + +00000205: +0000020a: R29 := 0 +0000020f: R30 := 0 +00000215: R5 := R0 +0000021c: R1 := mem[R31, el]:u64 +00000222: R2 := R31 + 8 +00000228: R6 := R31 +0000022d: R0 := 0x1F000 +00000234: R0 := mem[R0 + 0xFF0, el]:u64 +00000239: R3 := 0 +0000023e: R4 := 0 +00000243: R30 := 0x730 +00000246: call @__libc_start_main with return %00000248 + +00000248: +0000024b: R30 := 0x734 +0000024e: call @abort with return %000006f6 + +000006f6: +000006f7: call @call_weak_fn with noreturn + +000006d2: sub abort() + + +0000024c: +000005ec: R16 := 0x1F000 +000005f3: R17 := mem[R16 + 0xFC0, el]:u64 +000005f9: R16 := R16 + 0xFC0 +000005fe: call R17 with noreturn + +000006d3: sub call_weak_fn(call_weak_fn_result) +0000070a: call_weak_fn_result :: out u32 = low:32[R0] + +00000250: +00000253: R0 := 0x1F000 +0000025a: R0 := mem[R0 + 0xFE0, el]:u64 +00000260: when R0 = 0 goto %0000025e +000006f8: goto %000004e2 + +0000025e: +00000266: call R30 with noreturn + +000004e2: +000004e5: goto @__gmon_start__ + +000004e3: +000005d6: R16 := 0x1F000 +000005dd: R17 := mem[R16 + 0xFB8, el]:u64 +000005e3: R16 := R16 + 0xFB8 +000005e8: call R17 with noreturn + +000006d5: sub deregister_tm_clones(deregister_tm_clones_result) +0000070b: deregister_tm_clones_result :: out u32 = low:32[R0] + +0000026c: +0000026f: R0 := 0x20000 +00000275: R0 := R0 + 0x10 +0000027a: R1 := 0x20000 +00000280: R1 := R1 + 0x10 +00000286: #1 := ~R0 +0000028b: #2 := R1 + ~R0 +00000291: VF := extend:128[#2 + 1] <> extend:128[R1] + extend:128[#1] + 1 +00000297: CF := pad:128[#2 + 1] <> pad:128[R1] + pad:128[#1] + 1 +0000029b: ZF := #2 + 1 = 0 +0000029f: NF := 63:63[#2 + 1] +000002a5: when ZF goto %000002a3 +000006f9: goto %000004c4 + +000004c4: +000004c7: R1 := 0x1F000 +000004ce: R1 := mem[R1 + 0xFD0, el]:u64 +000004d3: when R1 = 0 goto %000002a3 +000006fa: goto %000004d7 + +000002a3: +000002ab: call R30 with noreturn + +000004d7: +000004db: R16 := R1 +000004e0: call R16 with noreturn + +000006d8: sub frame_dummy(frame_dummy_result) +0000070c: frame_dummy_result :: out u32 = low:32[R0] + +00000342: +00000344: call @register_tm_clones with noreturn + +000006d9: sub main(main_argc, main_argv, main_result) +0000070d: main_argc :: in u32 = low:32[R0] +0000070e: main_argv :: in out u64 = R1 +0000070f: main_result :: out u32 = low:32[R0] + +00000389: +0000038d: R31 := R31 - 0x30 +00000393: #4 := R31 + 0x20 +00000399: mem := mem with [#4, el]:u64 <- R29 +0000039f: mem := mem with [#4 + 8, el]:u64 <- R30 +000003a5: R29 := R31 + 0x20 +000003aa: R0 := 0x1F000 +000003b1: R0 := mem[R0 + 0xFE8, el]:u64 +000003b8: R1 := mem[R0, el]:u64 +000003c0: mem := mem with [R31 + 0x18, el]:u64 <- R1 +000003c5: R1 := 0 +000003ca: R0 := 3 +000003d2: mem := mem with [R31, el]:u64 <- R0 +000003d7: R0 := 0xA +000003df: mem := mem with [R31 + 0x10, el]:u64 <- R0 +000003e5: R0 := R31 +000003ea: R30 := 0x878 +000003ec: call @set_fields with return %000003ee + +000003ee: +000003f1: R0 := 0 +000003f7: R1 := pad:64[31:0[R0]] +000003fc: R0 := 0x1F000 +00000403: R0 := mem[R0 + 0xFE8, el]:u64 +0000040a: R3 := mem[R31 + 0x18, el]:u64 +00000411: R2 := mem[R0, el]:u64 +00000417: #5 := ~R2 +0000041c: #6 := R3 + ~R2 +00000422: VF := extend:128[#6 + 1] <> extend:128[R3] + extend:128[#5] + 1 +00000428: CF := pad:128[#6 + 1] <> pad:128[R3] + pad:128[#5] + 1 +0000042c: ZF := #6 + 1 = 0 +00000430: NF := 63:63[#6 + 1] +00000434: R3 := #6 + 1 +00000439: R2 := 0 +0000043f: when ZF goto %0000043d +000006fb: goto %00000463 + +00000463: +00000466: R30 := 0x8A0 +00000469: call @__stack_chk_fail with return %0000043d + +0000043d: +00000446: R0 := pad:64[31:0[R1]] +0000044c: #7 := R31 + 0x20 +00000451: R29 := mem[#7, el]:u64 +00000456: R30 := mem[#7 + 8, el]:u64 +0000045c: R31 := R31 + 0x30 +00000461: call R30 with noreturn + +000006db: sub register_tm_clones(register_tm_clones_result) +00000710: register_tm_clones_result :: out u32 = low:32[R0] + +000002ad: +000002b0: R0 := 0x20000 +000002b6: R0 := R0 + 0x10 +000002bb: R1 := 0x20000 +000002c1: R1 := R1 + 0x10 +000002c8: R1 := R1 + ~R0 + 1 +000002ce: R2 := pad:64[63:63[R1]] +000002d5: R1 := R2 + (R1 ~>> 3) +000002db: R1 := extend:64[63:1[R1]] +000002e1: when R1 = 0 goto %000002df +000006fc: goto %000004a6 + +000004a6: +000004a9: R2 := 0x1F000 +000004b0: R2 := mem[R2 + 0xFF8, el]:u64 +000004b5: when R2 = 0 goto %000002df +000006fd: goto %000004b9 + +000002df: +000002e7: call R30 with noreturn + +000004b9: +000004bd: R16 := R2 +000004c2: call R16 with noreturn + +000006de: sub set_fields(set_fields_result) +00000711: set_fields_result :: out u32 = low:32[R0] + +00000346: +0000034a: R31 := R31 - 0x10 +00000352: mem := mem with [R31 + 8, el]:u64 <- R0 +00000359: R0 := mem[R31 + 8, el]:u64 +0000035e: R1 := 1 +00000366: mem := mem with [R0, el]:u64 <- R1 +0000036d: R0 := mem[R31 + 8, el]:u64 +00000372: R1 := 2 +0000037a: mem := mem with [R0 + 0x10, el]:u64 <- R1 +00000382: R31 := R31 + 0x10 +00000387: call R30 with noreturn diff --git a/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.c b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.c new file mode 100644 index 000000000..095894070 --- /dev/null +++ b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.c @@ -0,0 +1,21 @@ +#include +#include + +typedef struct { + long int a; + long int b; + long int c; +} str; + +void __attribute__ ((noinline)) set_fields(str *ext) { + ext->a = 1; + ext->c = 2; +} + +int main() +{ + str stack; + stack.a = 3; + stack.c = 10; + set_fields(&stack); +} \ No newline at end of file diff --git a/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.relf b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.relf new file mode 100644 index 000000000..3c93073f8 --- /dev/null +++ b/src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.relf @@ -0,0 +1,126 @@ + +Relocation section '.rela.dyn' at offset 0x4f0 contains 9 entries: + Offset Info Type Symbol's Value Symbol's Name + Addend +000000000001fd78 0000000000000403 R_AARCH64_RELATIVE 810 +000000000001fd80 0000000000000403 R_AARCH64_RELATIVE 7c0 +000000000001fff0 0000000000000403 R_AARCH64_RELATIVE 840 +0000000000020008 0000000000000403 R_AARCH64_RELATIVE 20008 +000000000001ffd0 0000000400000401 R_AARCH64_GLOB_DAT 0000000000000000 _ITM_deregisterTMCloneTable + 0 +000000000001ffd8 0000000500000401 R_AARCH64_GLOB_DAT 0000000000000000 __cxa_finalize@GLIBC_2.17 + 0 +000000000001ffe0 0000000700000401 R_AARCH64_GLOB_DAT 0000000000000000 __gmon_start__ + 0 +000000000001ffe8 0000000800000401 R_AARCH64_GLOB_DAT 0000000000000000 __stack_chk_guard@GLIBC_2.17 + 0 +000000000001fff8 0000000a00000401 R_AARCH64_GLOB_DAT 0000000000000000 _ITM_registerTMCloneTable + 0 + +Relocation section '.rela.plt' at offset 0x5c8 contains 5 entries: + Offset Info Type Symbol's Value Symbol's Name + Addend +000000000001ffa0 0000000300000402 R_AARCH64_JUMP_SLOT 0000000000000000 __libc_start_main@GLIBC_2.34 + 0 +000000000001ffa8 0000000500000402 R_AARCH64_JUMP_SLOT 0000000000000000 __cxa_finalize@GLIBC_2.17 + 0 +000000000001ffb0 0000000600000402 R_AARCH64_JUMP_SLOT 0000000000000000 __stack_chk_fail@GLIBC_2.17 + 0 +000000000001ffb8 0000000700000402 R_AARCH64_JUMP_SLOT 0000000000000000 __gmon_start__ + 0 +000000000001ffc0 0000000900000402 R_AARCH64_JUMP_SLOT 0000000000000000 abort@GLIBC_2.17 + 0 + +Symbol table '.dynsym' contains 11 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000640 0 SECTION LOCAL DEFAULT 11 .init + 2: 0000000000020000 0 SECTION LOCAL DEFAULT 22 .data + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.34 (2) + 4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 5: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 (3) + 6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 (3) + 7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 8: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 (4) + 9: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 (3) + 10: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + +Symbol table '.symtab' contains 89 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000238 0 SECTION LOCAL DEFAULT 1 .interp + 2: 0000000000000254 0 SECTION LOCAL DEFAULT 2 .note.gnu.build-id + 3: 0000000000000278 0 SECTION LOCAL DEFAULT 3 .note.ABI-tag + 4: 0000000000000298 0 SECTION LOCAL DEFAULT 4 .gnu.hash + 5: 00000000000002b8 0 SECTION LOCAL DEFAULT 5 .dynsym + 6: 00000000000003c0 0 SECTION LOCAL DEFAULT 6 .dynstr + 7: 0000000000000486 0 SECTION LOCAL DEFAULT 7 .gnu.version + 8: 00000000000004a0 0 SECTION LOCAL DEFAULT 8 .gnu.version_r + 9: 00000000000004f0 0 SECTION LOCAL DEFAULT 9 .rela.dyn + 10: 00000000000005c8 0 SECTION LOCAL DEFAULT 10 .rela.plt + 11: 0000000000000640 0 SECTION LOCAL DEFAULT 11 .init + 12: 0000000000000660 0 SECTION LOCAL DEFAULT 12 .plt + 13: 0000000000000700 0 SECTION LOCAL DEFAULT 13 .text + 14: 00000000000008b0 0 SECTION LOCAL DEFAULT 14 .fini + 15: 00000000000008c4 0 SECTION LOCAL DEFAULT 15 .rodata + 16: 00000000000008c8 0 SECTION LOCAL DEFAULT 16 .eh_frame_hdr + 17: 0000000000000910 0 SECTION LOCAL DEFAULT 17 .eh_frame + 18: 000000000001fd78 0 SECTION LOCAL DEFAULT 18 .init_array + 19: 000000000001fd80 0 SECTION LOCAL DEFAULT 19 .fini_array + 20: 000000000001fd88 0 SECTION LOCAL DEFAULT 20 .dynamic + 21: 000000000001ff88 0 SECTION LOCAL DEFAULT 21 .got + 22: 0000000000020000 0 SECTION LOCAL DEFAULT 22 .data + 23: 0000000000020010 0 SECTION LOCAL DEFAULT 23 .bss + 24: 0000000000000000 0 SECTION LOCAL DEFAULT 24 .comment + 25: 0000000000000000 0 FILE LOCAL DEFAULT ABS Scrt1.o + 26: 0000000000000278 0 NOTYPE LOCAL DEFAULT 3 $d + 27: 0000000000000278 32 OBJECT LOCAL DEFAULT 3 __abi_tag + 28: 0000000000000700 0 NOTYPE LOCAL DEFAULT 13 $x + 29: 0000000000000924 0 NOTYPE LOCAL DEFAULT 17 $d + 30: 00000000000008c4 0 NOTYPE LOCAL DEFAULT 15 $d + 31: 0000000000000000 0 FILE LOCAL DEFAULT ABS crti.o + 32: 0000000000000734 0 NOTYPE LOCAL DEFAULT 13 $x + 33: 0000000000000734 20 FUNC LOCAL DEFAULT 13 call_weak_fn + 34: 0000000000000640 0 NOTYPE LOCAL DEFAULT 11 $x + 35: 00000000000008b0 0 NOTYPE LOCAL DEFAULT 14 $x + 36: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtn.o + 37: 0000000000000650 0 NOTYPE LOCAL DEFAULT 11 $x + 38: 00000000000008bc 0 NOTYPE LOCAL DEFAULT 14 $x + 39: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c + 40: 0000000000000750 0 NOTYPE LOCAL DEFAULT 13 $x + 41: 0000000000000750 0 FUNC LOCAL DEFAULT 13 deregister_tm_clones + 42: 0000000000000780 0 FUNC LOCAL DEFAULT 13 register_tm_clones + 43: 0000000000020008 0 NOTYPE LOCAL DEFAULT 22 $d + 44: 00000000000007c0 0 FUNC LOCAL DEFAULT 13 __do_global_dtors_aux + 45: 0000000000020010 1 OBJECT LOCAL DEFAULT 23 completed.0 + 46: 000000000001fd80 0 NOTYPE LOCAL DEFAULT 19 $d + 47: 000000000001fd80 0 OBJECT LOCAL DEFAULT 19 __do_global_dtors_aux_fini_array_entry + 48: 0000000000000810 0 FUNC LOCAL DEFAULT 13 frame_dummy + 49: 000000000001fd78 0 NOTYPE LOCAL DEFAULT 18 $d + 50: 000000000001fd78 0 OBJECT LOCAL DEFAULT 18 __frame_dummy_init_array_entry + 51: 0000000000000938 0 NOTYPE LOCAL DEFAULT 17 $d + 52: 0000000000020010 0 NOTYPE LOCAL DEFAULT 23 $d + 53: 0000000000000000 0 FILE LOCAL DEFAULT ABS stack_interproc_overlapping.c + 54: 0000000000000814 0 NOTYPE LOCAL DEFAULT 13 $x + 55: 0000000000000998 0 NOTYPE LOCAL DEFAULT 17 $d + 56: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c + 57: 00000000000009d0 0 NOTYPE LOCAL DEFAULT 17 $d + 58: 00000000000009d0 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__ + 59: 0000000000000000 0 FILE LOCAL DEFAULT ABS + 60: 000000000001fd88 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC + 61: 00000000000008c8 0 NOTYPE LOCAL DEFAULT 16 __GNU_EH_FRAME_HDR + 62: 000000000001ffc8 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ + 63: 0000000000000660 0 NOTYPE LOCAL DEFAULT 12 $x + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.34 + 65: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable + 66: 0000000000020000 0 NOTYPE WEAK DEFAULT 22 data_start + 67: 0000000000020010 0 NOTYPE GLOBAL DEFAULT 23 __bss_start__ + 68: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.17 + 69: 0000000000020018 0 NOTYPE GLOBAL DEFAULT 23 _bss_end__ + 70: 0000000000020010 0 NOTYPE GLOBAL DEFAULT 22 _edata + 71: 00000000000008b0 0 FUNC GLOBAL HIDDEN 14 _fini + 72: 0000000000020018 0 NOTYPE GLOBAL DEFAULT 23 __bss_end__ + 73: 0000000000020000 0 NOTYPE GLOBAL DEFAULT 22 __data_start + 74: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.17 + 75: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ + 76: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@GLIBC_2.17 + 77: 0000000000020008 0 OBJECT GLOBAL HIDDEN 22 __dso_handle + 78: 0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.17 + 79: 00000000000008c4 4 OBJECT GLOBAL DEFAULT 15 _IO_stdin_used + 80: 0000000000020018 0 NOTYPE GLOBAL DEFAULT 23 _end + 81: 0000000000000700 52 FUNC GLOBAL DEFAULT 13 _start + 82: 0000000000020018 0 NOTYPE GLOBAL DEFAULT 23 __end__ + 83: 0000000000000814 44 FUNC GLOBAL DEFAULT 13 set_fields + 84: 0000000000020010 0 NOTYPE GLOBAL DEFAULT 23 __bss_start + 85: 0000000000000840 112 FUNC GLOBAL DEFAULT 13 main + 86: 0000000000020010 0 OBJECT GLOBAL HIDDEN 22 __TMC_END__ + 87: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable + 88: 0000000000000640 0 FUNC GLOBAL HIDDEN 11 _init diff --git a/src/test/scala/DataStructureAnalysisTest.scala b/src/test/scala/DataStructureAnalysisTest.scala index f722e469f..0ffdd6a6a 100644 --- a/src/test/scala/DataStructureAnalysisTest.scala +++ b/src/test/scala/DataStructureAnalysisTest.scala @@ -97,6 +97,63 @@ class DataStructureAnalysisTest extends AnyFunSuite { assert(dsg.adjust(stack32.getPointee).equals(dsg.find(dsg.globalMapping(AddressRange(1916, 1916)).node.cells(0)))) + } + + + test("stack interproc overlapping callee") { + val results = RunUtils.loadAndTranslate( + BASILConfig( + loading = ILLoadingConfig( + inputFile = "src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.adt", + relfFile = "src/test/dsa/stack_interproc_overlapping/stack_interproc_overlapping.relf", + specFile = None, + dumpIL = None, + ), + staticAnalysis = Some(StaticAnalysisConfig()), + boogieTranslation = BoogieGeneratorConfig(), + outputPrefix = "boogie_out", + ) + ) + + // the dsg of the main procedure after the all phases + val program = results.ir.program + + // Local Callee + val dsgCallee = results.analysis.get.localDSA(program.nameToProcedure("set_fields")) + // dsg.formals(R29) is the slice representing formal R29 + + val stack8Pointee = dsgCallee.adjust(dsgCallee.find(dsgCallee.stackMapping(8).cells(0)).getPointee) + val R0formal = dsgCallee.adjust(dsgCallee.formals(R0)) + val paramNode = R0formal.node.get + + assert(stack8Pointee.equals(R0formal)) + assert(paramNode.cells.size == 2) + assert(R0formal.largestAccessedSize == 8) + assert(paramNode.cells(0) == R0formal) + assert(paramNode.cells(16).largestAccessedSize == 8) + + + + // Local Caller + val dsgCaller = results.analysis.get.localDSA(program.mainProcedure) + val stack0 = dsgCaller.find(dsgCaller.stackMapping(0).cells(0)) + // val stack8 = dsgCaller.find(dsgCaller.stackMapping(8).cells(0)) + val stack16 = dsgCaller.find(dsgCaller.stackMapping(16).cells(0)) + + assert(stack0.node.get != stack16.node.get) + + + // topdown Caller + val dsg = results.analysis.get.topDownDSA(program.mainProcedure) + val stack0Final = dsg.find(dsg.stackMapping(0).cells(0)) + val stack0FinalNode = stack0Final.node.get + // val stack8 = dsgCaller.find(dsgCaller.stackMapping(8).cells(0)) + val stack16Final = dsg.find(dsg.stackMapping(16).cells(0)) + +// assert(stack0Final.largestAccessedSize == 24) + assert(stack0Final.node.get == stack16Final.node.get) + + } // Local DSA tests