polyfile-weave 0.5.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of polyfile-weave might be problematic. Click here for more details.

Files changed (585) hide show
  1. polyfile/__init__.py +15 -0
  2. polyfile/__main__.py +394 -0
  3. polyfile/arithmetic.py +27 -0
  4. polyfile/ast.py +114 -0
  5. polyfile/debugger.py +1039 -0
  6. polyfile/expressions.py +346 -0
  7. polyfile/fileutils.py +343 -0
  8. polyfile/html.py +135 -0
  9. polyfile/http/__init__.py +1 -0
  10. polyfile/http/defacto.py +37 -0
  11. polyfile/http/deprecated.py +51 -0
  12. polyfile/http/experimental.py +67 -0
  13. polyfile/http/http_11.py +548 -0
  14. polyfile/http/matcher.py +37 -0
  15. polyfile/http/structured_headers.py +48 -0
  16. polyfile/iterators.py +72 -0
  17. polyfile/jpeg.py +24 -0
  18. polyfile/kaitai/__init__.py +0 -0
  19. polyfile/kaitai/compiler.py +156 -0
  20. polyfile/kaitai/parser.py +312 -0
  21. polyfile/kaitai/parsers/__init__.py +0 -0
  22. polyfile/kaitai/parsers/aix_utmp.py +116 -0
  23. polyfile/kaitai/parsers/allegro_dat.py +367 -0
  24. polyfile/kaitai/parsers/andes_firmware.py +64 -0
  25. polyfile/kaitai/parsers/android_bootldr_asus.py +105 -0
  26. polyfile/kaitai/parsers/android_bootldr_huawei.py +181 -0
  27. polyfile/kaitai/parsers/android_bootldr_qcom.py +217 -0
  28. polyfile/kaitai/parsers/android_dto.py +138 -0
  29. polyfile/kaitai/parsers/android_img.py +319 -0
  30. polyfile/kaitai/parsers/android_nanoapp_header.py +83 -0
  31. polyfile/kaitai/parsers/android_opengl_shaders_cache.py +151 -0
  32. polyfile/kaitai/parsers/android_sparse.py +237 -0
  33. polyfile/kaitai/parsers/android_super.py +401 -0
  34. polyfile/kaitai/parsers/apm_partition_table.py +196 -0
  35. polyfile/kaitai/parsers/apple_single_double.py +180 -0
  36. polyfile/kaitai/parsers/asn1_der.py +235 -0
  37. polyfile/kaitai/parsers/au.py +138 -0
  38. polyfile/kaitai/parsers/avantes_roh60.py +112 -0
  39. polyfile/kaitai/parsers/avi.py +296 -0
  40. polyfile/kaitai/parsers/bcd.py +111 -0
  41. polyfile/kaitai/parsers/bitcoin_transaction.py +210 -0
  42. polyfile/kaitai/parsers/blender_blend.py +334 -0
  43. polyfile/kaitai/parsers/bmp.py +780 -0
  44. polyfile/kaitai/parsers/bson.py +411 -0
  45. polyfile/kaitai/parsers/btrfs_stream.py +318 -0
  46. polyfile/kaitai/parsers/bytes_with_io.py +27 -0
  47. polyfile/kaitai/parsers/chrome_pak.py +194 -0
  48. polyfile/kaitai/parsers/code_6502.py +456 -0
  49. polyfile/kaitai/parsers/compressed_resource.py +217 -0
  50. polyfile/kaitai/parsers/cpio_old_le.py +154 -0
  51. polyfile/kaitai/parsers/cramfs.py +344 -0
  52. polyfile/kaitai/parsers/creative_voice_file.py +342 -0
  53. polyfile/kaitai/parsers/dbf.py +274 -0
  54. polyfile/kaitai/parsers/dcmp_0.py +664 -0
  55. polyfile/kaitai/parsers/dcmp_1.py +422 -0
  56. polyfile/kaitai/parsers/dcmp_2.py +312 -0
  57. polyfile/kaitai/parsers/dcmp_variable_length_integer.py +66 -0
  58. polyfile/kaitai/parsers/dex.py +1086 -0
  59. polyfile/kaitai/parsers/dicom.py +4370 -0
  60. polyfile/kaitai/parsers/dime_message.py +201 -0
  61. polyfile/kaitai/parsers/dns_packet.py +569 -0
  62. polyfile/kaitai/parsers/doom_wad.py +654 -0
  63. polyfile/kaitai/parsers/dos_datetime.py +191 -0
  64. polyfile/kaitai/parsers/dos_mz.py +172 -0
  65. polyfile/kaitai/parsers/ds_store.py +513 -0
  66. polyfile/kaitai/parsers/dtb.py +310 -0
  67. polyfile/kaitai/parsers/dune_2_pak.py +126 -0
  68. polyfile/kaitai/parsers/edid.py +472 -0
  69. polyfile/kaitai/parsers/efivar_signature_list.py +331 -0
  70. polyfile/kaitai/parsers/elf.py +2482 -0
  71. polyfile/kaitai/parsers/ethernet_frame.py +114 -0
  72. polyfile/kaitai/parsers/exif.py +723 -0
  73. polyfile/kaitai/parsers/ext2.py +537 -0
  74. polyfile/kaitai/parsers/fallout2_dat.py +187 -0
  75. polyfile/kaitai/parsers/fallout_dat.py +156 -0
  76. polyfile/kaitai/parsers/fasttracker_xm_module.py +558 -0
  77. polyfile/kaitai/parsers/ftl_dat.py +90 -0
  78. polyfile/kaitai/parsers/genmidi_op2.py +161 -0
  79. polyfile/kaitai/parsers/gettext_mo.py +541 -0
  80. polyfile/kaitai/parsers/gif.py +492 -0
  81. polyfile/kaitai/parsers/gimp_brush.py +244 -0
  82. polyfile/kaitai/parsers/glibc_utmp.py +114 -0
  83. polyfile/kaitai/parsers/gltf_binary.py +132 -0
  84. polyfile/kaitai/parsers/google_protobuf.py +151 -0
  85. polyfile/kaitai/parsers/gpt_partition_table.py +175 -0
  86. polyfile/kaitai/parsers/gran_turismo_vol.py +140 -0
  87. polyfile/kaitai/parsers/grub2_font.py +337 -0
  88. polyfile/kaitai/parsers/gzip.py +232 -0
  89. polyfile/kaitai/parsers/hashcat_restore.py +60 -0
  90. polyfile/kaitai/parsers/hccap.py +111 -0
  91. polyfile/kaitai/parsers/hccapx.py +103 -0
  92. polyfile/kaitai/parsers/heaps_pak.py +177 -0
  93. polyfile/kaitai/parsers/heroes_of_might_and_magic_agg.py +116 -0
  94. polyfile/kaitai/parsers/heroes_of_might_and_magic_bmp.py +34 -0
  95. polyfile/kaitai/parsers/icmp_packet.py +136 -0
  96. polyfile/kaitai/parsers/ico.py +129 -0
  97. polyfile/kaitai/parsers/id3v1_1.py +220 -0
  98. polyfile/kaitai/parsers/id3v2_3.py +324 -0
  99. polyfile/kaitai/parsers/id3v2_4.py +423 -0
  100. polyfile/kaitai/parsers/ines.py +282 -0
  101. polyfile/kaitai/parsers/ipv4_packet.py +158 -0
  102. polyfile/kaitai/parsers/ipv6_packet.py +55 -0
  103. polyfile/kaitai/parsers/iso9660.py +544 -0
  104. polyfile/kaitai/parsers/java_class.py +1113 -0
  105. polyfile/kaitai/parsers/jpeg.py +361 -0
  106. polyfile/kaitai/parsers/luks.py +149 -0
  107. polyfile/kaitai/parsers/lzh.py +165 -0
  108. polyfile/kaitai/parsers/mac_os_resource_snd.py +493 -0
  109. polyfile/kaitai/parsers/mach_o.py +3033 -0
  110. polyfile/kaitai/parsers/mach_o_fat.py +92 -0
  111. polyfile/kaitai/parsers/magicavoxel_vox.py +391 -0
  112. polyfile/kaitai/parsers/manifest.json +1 -0
  113. polyfile/kaitai/parsers/mbr_partition_table.py +119 -0
  114. polyfile/kaitai/parsers/mcap.py +1015 -0
  115. polyfile/kaitai/parsers/microsoft_cfb.py +293 -0
  116. polyfile/kaitai/parsers/microsoft_network_monitor_v2.py +309 -0
  117. polyfile/kaitai/parsers/microsoft_pe.py +765 -0
  118. polyfile/kaitai/parsers/mifare_classic.py +706 -0
  119. polyfile/kaitai/parsers/minecraft_nbt.py +449 -0
  120. polyfile/kaitai/parsers/monomakh_sapr_chg.py +69 -0
  121. polyfile/kaitai/parsers/mozilla_mar.py +239 -0
  122. polyfile/kaitai/parsers/mp4.py +333 -0
  123. polyfile/kaitai/parsers/msgpack.py +467 -0
  124. polyfile/kaitai/parsers/nitf.py +1189 -0
  125. polyfile/kaitai/parsers/nt_mdt_pal.py +155 -0
  126. polyfile/kaitai/parsers/ogg.py +118 -0
  127. polyfile/kaitai/parsers/openpgp_message.py +993 -0
  128. polyfile/kaitai/parsers/packet_ppi.py +515 -0
  129. polyfile/kaitai/parsers/pcap.py +344 -0
  130. polyfile/kaitai/parsers/pcf_font.py +506 -0
  131. polyfile/kaitai/parsers/pcx.py +195 -0
  132. polyfile/kaitai/parsers/pcx_dcx.py +79 -0
  133. polyfile/kaitai/parsers/phar_without_stub.py +399 -0
  134. polyfile/kaitai/parsers/php_serialized_value.py +505 -0
  135. polyfile/kaitai/parsers/png.py +721 -0
  136. polyfile/kaitai/parsers/protocol_body.py +260 -0
  137. polyfile/kaitai/parsers/psx_tim.py +104 -0
  138. polyfile/kaitai/parsers/python_pickle.py +718 -0
  139. polyfile/kaitai/parsers/python_pyc_27.py +510 -0
  140. polyfile/kaitai/parsers/quake_mdl.py +441 -0
  141. polyfile/kaitai/parsers/quake_pak.py +112 -0
  142. polyfile/kaitai/parsers/quicktime_mov.py +634 -0
  143. polyfile/kaitai/parsers/rar.py +265 -0
  144. polyfile/kaitai/parsers/regf.py +569 -0
  145. polyfile/kaitai/parsers/renderware_binary_stream.py +877 -0
  146. polyfile/kaitai/parsers/resource_fork.py +611 -0
  147. polyfile/kaitai/parsers/respack.py +57 -0
  148. polyfile/kaitai/parsers/riff.py +409 -0
  149. polyfile/kaitai/parsers/rpm.py +964 -0
  150. polyfile/kaitai/parsers/rtcp_payload.py +579 -0
  151. polyfile/kaitai/parsers/rtp_packet.py +150 -0
  152. polyfile/kaitai/parsers/rtpdump.py +115 -0
  153. polyfile/kaitai/parsers/ruby_marshal.py +423 -0
  154. polyfile/kaitai/parsers/s3m.py +493 -0
  155. polyfile/kaitai/parsers/saints_row_2_vpp_pc.py +254 -0
  156. polyfile/kaitai/parsers/shapefile_index.py +174 -0
  157. polyfile/kaitai/parsers/shapefile_main.py +893 -0
  158. polyfile/kaitai/parsers/some_ip.py +209 -0
  159. polyfile/kaitai/parsers/some_ip_container.py +37 -0
  160. polyfile/kaitai/parsers/some_ip_sd.py +86 -0
  161. polyfile/kaitai/parsers/some_ip_sd_entries.py +160 -0
  162. polyfile/kaitai/parsers/some_ip_sd_options.py +374 -0
  163. polyfile/kaitai/parsers/specpr.py +404 -0
  164. polyfile/kaitai/parsers/sqlite3.py +472 -0
  165. polyfile/kaitai/parsers/ssh_public_key.py +252 -0
  166. polyfile/kaitai/parsers/standard_midi_file.py +390 -0
  167. polyfile/kaitai/parsers/stl.py +111 -0
  168. polyfile/kaitai/parsers/sudoers_ts.py +201 -0
  169. polyfile/kaitai/parsers/swf.py +406 -0
  170. polyfile/kaitai/parsers/systemd_journal.py +361 -0
  171. polyfile/kaitai/parsers/tcp_segment.py +57 -0
  172. polyfile/kaitai/parsers/tga.py +213 -0
  173. polyfile/kaitai/parsers/tls_client_hello.py +293 -0
  174. polyfile/kaitai/parsers/tr_dos_image.py +322 -0
  175. polyfile/kaitai/parsers/tsm.py +198 -0
  176. polyfile/kaitai/parsers/ttf.py +1847 -0
  177. polyfile/kaitai/parsers/udp_datagram.py +42 -0
  178. polyfile/kaitai/parsers/uefi_te.py +236 -0
  179. polyfile/kaitai/parsers/uimage.py +198 -0
  180. polyfile/kaitai/parsers/utf8_string.py +137 -0
  181. polyfile/kaitai/parsers/vfat.py +410 -0
  182. polyfile/kaitai/parsers/vlq_base128_be.py +104 -0
  183. polyfile/kaitai/parsers/vlq_base128_le.py +129 -0
  184. polyfile/kaitai/parsers/vmware_vmdk.py +167 -0
  185. polyfile/kaitai/parsers/vp8_ivf.py +112 -0
  186. polyfile/kaitai/parsers/warcraft_2_pud.py +423 -0
  187. polyfile/kaitai/parsers/wav.py +1014 -0
  188. polyfile/kaitai/parsers/websocket.py +167 -0
  189. polyfile/kaitai/parsers/windows_evt_log.py +304 -0
  190. polyfile/kaitai/parsers/windows_lnk_file.py +467 -0
  191. polyfile/kaitai/parsers/windows_minidump.py +575 -0
  192. polyfile/kaitai/parsers/windows_resource_file.py +243 -0
  193. polyfile/kaitai/parsers/windows_shell_items.py +190 -0
  194. polyfile/kaitai/parsers/windows_systemtime.py +52 -0
  195. polyfile/kaitai/parsers/wmf.py +502 -0
  196. polyfile/kaitai/parsers/xar.py +181 -0
  197. polyfile/kaitai/parsers/xwd.py +189 -0
  198. polyfile/kaitai/parsers/zip.py +685 -0
  199. polyfile/kaitai/parsers/zisofs.py +158 -0
  200. polyfile/kaitai/parsers/zx_spectrum_tap.py +184 -0
  201. polyfile/kaitaimatcher.py +113 -0
  202. polyfile/languagematcher.py +217 -0
  203. polyfile/logger.py +135 -0
  204. polyfile/magic.py +2983 -0
  205. polyfile/magic_defs/COPYING +29 -0
  206. polyfile/magic_defs/__init__.py +0 -0
  207. polyfile/magic_defs/acorn +102 -0
  208. polyfile/magic_defs/adi +13 -0
  209. polyfile/magic_defs/adventure +122 -0
  210. polyfile/magic_defs/aes +29 -0
  211. polyfile/magic_defs/algol68 +35 -0
  212. polyfile/magic_defs/allegro +9 -0
  213. polyfile/magic_defs/alliant +18 -0
  214. polyfile/magic_defs/alpha +32 -0
  215. polyfile/magic_defs/amanda +12 -0
  216. polyfile/magic_defs/amigaos +218 -0
  217. polyfile/magic_defs/android +259 -0
  218. polyfile/magic_defs/animation +1197 -0
  219. polyfile/magic_defs/aout +46 -0
  220. polyfile/magic_defs/apache +28 -0
  221. polyfile/magic_defs/apl +7 -0
  222. polyfile/magic_defs/apple +773 -0
  223. polyfile/magic_defs/application +7 -0
  224. polyfile/magic_defs/applix +13 -0
  225. polyfile/magic_defs/apt +52 -0
  226. polyfile/magic_defs/archive +2586 -0
  227. polyfile/magic_defs/aria +38 -0
  228. polyfile/magic_defs/arm +50 -0
  229. polyfile/magic_defs/asf +132 -0
  230. polyfile/magic_defs/assembler +18 -0
  231. polyfile/magic_defs/asterix +18 -0
  232. polyfile/magic_defs/att3b +41 -0
  233. polyfile/magic_defs/audio +1291 -0
  234. polyfile/magic_defs/avm +33 -0
  235. polyfile/magic_defs/basis +18 -0
  236. polyfile/magic_defs/beetle +7 -0
  237. polyfile/magic_defs/ber +65 -0
  238. polyfile/magic_defs/bflt +14 -0
  239. polyfile/magic_defs/bhl +10 -0
  240. polyfile/magic_defs/bioinformatics +178 -0
  241. polyfile/magic_defs/biosig +154 -0
  242. polyfile/magic_defs/blackberry +8 -0
  243. polyfile/magic_defs/blcr +25 -0
  244. polyfile/magic_defs/blender +50 -0
  245. polyfile/magic_defs/blit +24 -0
  246. polyfile/magic_defs/bm +10 -0
  247. polyfile/magic_defs/bout +11 -0
  248. polyfile/magic_defs/bsdi +33 -0
  249. polyfile/magic_defs/bsi +10 -0
  250. polyfile/magic_defs/btsnoop +13 -0
  251. polyfile/magic_defs/burp +7 -0
  252. polyfile/magic_defs/bytecode +41 -0
  253. polyfile/magic_defs/c-lang +110 -0
  254. polyfile/magic_defs/c64 +531 -0
  255. polyfile/magic_defs/cad +437 -0
  256. polyfile/magic_defs/cafebabe +107 -0
  257. polyfile/magic_defs/cbor +21 -0
  258. polyfile/magic_defs/ccf +14 -0
  259. polyfile/magic_defs/cddb +12 -0
  260. polyfile/magic_defs/chord +15 -0
  261. polyfile/magic_defs/cisco +12 -0
  262. polyfile/magic_defs/citrus +12 -0
  263. polyfile/magic_defs/clarion +27 -0
  264. polyfile/magic_defs/claris +48 -0
  265. polyfile/magic_defs/clipper +65 -0
  266. polyfile/magic_defs/clojure +30 -0
  267. polyfile/magic_defs/coff +98 -0
  268. polyfile/magic_defs/commands +201 -0
  269. polyfile/magic_defs/communications +22 -0
  270. polyfile/magic_defs/compress +461 -0
  271. polyfile/magic_defs/console +1213 -0
  272. polyfile/magic_defs/convex +69 -0
  273. polyfile/magic_defs/coverage +91 -0
  274. polyfile/magic_defs/cracklib +14 -0
  275. polyfile/magic_defs/crypto +31 -0
  276. polyfile/magic_defs/csv +8 -0
  277. polyfile/magic_defs/ctags +6 -0
  278. polyfile/magic_defs/ctf +23 -0
  279. polyfile/magic_defs/cubemap +8 -0
  280. polyfile/magic_defs/cups +56 -0
  281. polyfile/magic_defs/dact +11 -0
  282. polyfile/magic_defs/database +886 -0
  283. polyfile/magic_defs/dataone +47 -0
  284. polyfile/magic_defs/dbpf +15 -0
  285. polyfile/magic_defs/der +146 -0
  286. polyfile/magic_defs/diamond +12 -0
  287. polyfile/magic_defs/dif +33 -0
  288. polyfile/magic_defs/diff +41 -0
  289. polyfile/magic_defs/digital +59 -0
  290. polyfile/magic_defs/dolby +69 -0
  291. polyfile/magic_defs/dsf +25 -0
  292. polyfile/magic_defs/dump +96 -0
  293. polyfile/magic_defs/dwarfs +45 -0
  294. polyfile/magic_defs/dyadic +61 -0
  295. polyfile/magic_defs/ebml +8 -0
  296. polyfile/magic_defs/edid +11 -0
  297. polyfile/magic_defs/editors +43 -0
  298. polyfile/magic_defs/efi +15 -0
  299. polyfile/magic_defs/elf +379 -0
  300. polyfile/magic_defs/encore +22 -0
  301. polyfile/magic_defs/epoc +62 -0
  302. polyfile/magic_defs/erlang +21 -0
  303. polyfile/magic_defs/espressif +57 -0
  304. polyfile/magic_defs/esri +28 -0
  305. polyfile/magic_defs/etf +33 -0
  306. polyfile/magic_defs/fcs +9 -0
  307. polyfile/magic_defs/filesystems +2694 -0
  308. polyfile/magic_defs/finger +16 -0
  309. polyfile/magic_defs/firmware +133 -0
  310. polyfile/magic_defs/flash +62 -0
  311. polyfile/magic_defs/flif +36 -0
  312. polyfile/magic_defs/fonts +449 -0
  313. polyfile/magic_defs/forth +82 -0
  314. polyfile/magic_defs/fortran +9 -0
  315. polyfile/magic_defs/frame +62 -0
  316. polyfile/magic_defs/freebsd +164 -0
  317. polyfile/magic_defs/fsav +128 -0
  318. polyfile/magic_defs/fusecompress +12 -0
  319. polyfile/magic_defs/games +696 -0
  320. polyfile/magic_defs/gcc +17 -0
  321. polyfile/magic_defs/gconv +10 -0
  322. polyfile/magic_defs/gentoo +85 -0
  323. polyfile/magic_defs/geo +166 -0
  324. polyfile/magic_defs/geos +20 -0
  325. polyfile/magic_defs/gimp +77 -0
  326. polyfile/magic_defs/git +13 -0
  327. polyfile/magic_defs/glibc +21 -0
  328. polyfile/magic_defs/gnome +59 -0
  329. polyfile/magic_defs/gnu +173 -0
  330. polyfile/magic_defs/gnumeric +8 -0
  331. polyfile/magic_defs/gpt +240 -0
  332. polyfile/magic_defs/gpu +28 -0
  333. polyfile/magic_defs/grace +21 -0
  334. polyfile/magic_defs/graphviz +12 -0
  335. polyfile/magic_defs/gringotts +48 -0
  336. polyfile/magic_defs/guile +13 -0
  337. polyfile/magic_defs/hardware +12 -0
  338. polyfile/magic_defs/hitachi-sh +30 -0
  339. polyfile/magic_defs/hp +433 -0
  340. polyfile/magic_defs/human68k +26 -0
  341. polyfile/magic_defs/ibm370 +52 -0
  342. polyfile/magic_defs/ibm6000 +35 -0
  343. polyfile/magic_defs/icc +214 -0
  344. polyfile/magic_defs/iff +80 -0
  345. polyfile/magic_defs/images +4210 -0
  346. polyfile/magic_defs/inform +9 -0
  347. polyfile/magic_defs/intel +310 -0
  348. polyfile/magic_defs/interleaf +9 -0
  349. polyfile/magic_defs/island +10 -0
  350. polyfile/magic_defs/ispell +63 -0
  351. polyfile/magic_defs/isz +15 -0
  352. polyfile/magic_defs/java +52 -0
  353. polyfile/magic_defs/javascript +171 -0
  354. polyfile/magic_defs/jpeg +252 -0
  355. polyfile/magic_defs/json +8 -0
  356. polyfile/magic_defs/karma +9 -0
  357. polyfile/magic_defs/kde +11 -0
  358. polyfile/magic_defs/keepass +20 -0
  359. polyfile/magic_defs/kerberos +45 -0
  360. polyfile/magic_defs/kicad +85 -0
  361. polyfile/magic_defs/kml +34 -0
  362. polyfile/magic_defs/lammps +64 -0
  363. polyfile/magic_defs/lecter +6 -0
  364. polyfile/magic_defs/lex +12 -0
  365. polyfile/magic_defs/lif +50 -0
  366. polyfile/magic_defs/linux +557 -0
  367. polyfile/magic_defs/lisp +78 -0
  368. polyfile/magic_defs/llvm +22 -0
  369. polyfile/magic_defs/locoscript +12 -0
  370. polyfile/magic_defs/lua +31 -0
  371. polyfile/magic_defs/luks +126 -0
  372. polyfile/magic_defs/m4 +11 -0
  373. polyfile/magic_defs/mach +303 -0
  374. polyfile/magic_defs/macintosh +505 -0
  375. polyfile/magic_defs/macos +7 -0
  376. polyfile/magic_defs/magic +10 -0
  377. polyfile/magic_defs/magic.mgc +0 -0
  378. polyfile/magic_defs/mail.news +132 -0
  379. polyfile/magic_defs/make +21 -0
  380. polyfile/magic_defs/map +413 -0
  381. polyfile/magic_defs/maple +109 -0
  382. polyfile/magic_defs/marc21 +30 -0
  383. polyfile/magic_defs/mathcad +8 -0
  384. polyfile/magic_defs/mathematica +188 -0
  385. polyfile/magic_defs/matroska +17 -0
  386. polyfile/magic_defs/mcrypt +52 -0
  387. polyfile/magic_defs/measure +44 -0
  388. polyfile/magic_defs/mercurial +13 -0
  389. polyfile/magic_defs/metastore +8 -0
  390. polyfile/magic_defs/meteorological +53 -0
  391. polyfile/magic_defs/microfocus +21 -0
  392. polyfile/magic_defs/mime +9 -0
  393. polyfile/magic_defs/mips +120 -0
  394. polyfile/magic_defs/mirage +8 -0
  395. polyfile/magic_defs/misctools +140 -0
  396. polyfile/magic_defs/mkid +11 -0
  397. polyfile/magic_defs/mlssa +8 -0
  398. polyfile/magic_defs/mmdf +6 -0
  399. polyfile/magic_defs/modem +92 -0
  400. polyfile/magic_defs/modulefile +9 -0
  401. polyfile/magic_defs/motorola +71 -0
  402. polyfile/magic_defs/mozilla +37 -0
  403. polyfile/magic_defs/msdos +2304 -0
  404. polyfile/magic_defs/msooxml +68 -0
  405. polyfile/magic_defs/msvc +222 -0
  406. polyfile/magic_defs/msx +309 -0
  407. polyfile/magic_defs/mup +24 -0
  408. polyfile/magic_defs/music +17 -0
  409. polyfile/magic_defs/nasa +7 -0
  410. polyfile/magic_defs/natinst +24 -0
  411. polyfile/magic_defs/ncr +49 -0
  412. polyfile/magic_defs/neko +12 -0
  413. polyfile/magic_defs/netbsd +251 -0
  414. polyfile/magic_defs/netscape +26 -0
  415. polyfile/magic_defs/netware +11 -0
  416. polyfile/magic_defs/news +13 -0
  417. polyfile/magic_defs/nifty +202 -0
  418. polyfile/magic_defs/nim-lang +29 -0
  419. polyfile/magic_defs/nitpicker +14 -0
  420. polyfile/magic_defs/numpy +9 -0
  421. polyfile/magic_defs/oasis +12 -0
  422. polyfile/magic_defs/ocaml +14 -0
  423. polyfile/magic_defs/octave +6 -0
  424. polyfile/magic_defs/ole2compounddocs +760 -0
  425. polyfile/magic_defs/olf +98 -0
  426. polyfile/magic_defs/openfst +17 -0
  427. polyfile/magic_defs/opentimestamps +16 -0
  428. polyfile/magic_defs/oric +16 -0
  429. polyfile/magic_defs/os2 +186 -0
  430. polyfile/magic_defs/os400 +39 -0
  431. polyfile/magic_defs/os9 +80 -0
  432. polyfile/magic_defs/osf1 +10 -0
  433. polyfile/magic_defs/palm +156 -0
  434. polyfile/magic_defs/parix +13 -0
  435. polyfile/magic_defs/parrot +22 -0
  436. polyfile/magic_defs/pascal +39 -0
  437. polyfile/magic_defs/pbf +11 -0
  438. polyfile/magic_defs/pbm +8 -0
  439. polyfile/magic_defs/pc88 +24 -0
  440. polyfile/magic_defs/pc98 +77 -0
  441. polyfile/magic_defs/pci_ids +116 -0
  442. polyfile/magic_defs/pcjr +8 -0
  443. polyfile/magic_defs/pdf +51 -0
  444. polyfile/magic_defs/pdp +42 -0
  445. polyfile/magic_defs/perl +100 -0
  446. polyfile/magic_defs/pgf +52 -0
  447. polyfile/magic_defs/pgp +581 -0
  448. polyfile/magic_defs/pgp-binary-keys +388 -0
  449. polyfile/magic_defs/pkgadd +7 -0
  450. polyfile/magic_defs/plan9 +25 -0
  451. polyfile/magic_defs/playdate +57 -0
  452. polyfile/magic_defs/plus5 +18 -0
  453. polyfile/magic_defs/pmem +46 -0
  454. polyfile/magic_defs/polyfile_zip +5 -0
  455. polyfile/magic_defs/polyml +23 -0
  456. polyfile/magic_defs/printer +269 -0
  457. polyfile/magic_defs/project +10 -0
  458. polyfile/magic_defs/psdbms +14 -0
  459. polyfile/magic_defs/psl +14 -0
  460. polyfile/magic_defs/pulsar +13 -0
  461. polyfile/magic_defs/puzzle +17 -0
  462. polyfile/magic_defs/pwsafe +14 -0
  463. polyfile/magic_defs/pyramid +12 -0
  464. polyfile/magic_defs/python +305 -0
  465. polyfile/magic_defs/qt +30 -0
  466. polyfile/magic_defs/revision +66 -0
  467. polyfile/magic_defs/riff +840 -0
  468. polyfile/magic_defs/rinex +44 -0
  469. polyfile/magic_defs/ringdove +45 -0
  470. polyfile/magic_defs/rpi +52 -0
  471. polyfile/magic_defs/rpm +45 -0
  472. polyfile/magic_defs/rpmsg +7 -0
  473. polyfile/magic_defs/rst +11 -0
  474. polyfile/magic_defs/rtf +94 -0
  475. polyfile/magic_defs/ruby +55 -0
  476. polyfile/magic_defs/rust +21 -0
  477. polyfile/magic_defs/sc +7 -0
  478. polyfile/magic_defs/sccs +24 -0
  479. polyfile/magic_defs/scientific +144 -0
  480. polyfile/magic_defs/securitycerts +6 -0
  481. polyfile/magic_defs/selinux +24 -0
  482. polyfile/magic_defs/sendmail +37 -0
  483. polyfile/magic_defs/sequent +42 -0
  484. polyfile/magic_defs/sereal +35 -0
  485. polyfile/magic_defs/sgi +144 -0
  486. polyfile/magic_defs/sgml +161 -0
  487. polyfile/magic_defs/sharc +23 -0
  488. polyfile/magic_defs/sinclair +40 -0
  489. polyfile/magic_defs/sisu +18 -0
  490. polyfile/magic_defs/sketch +6 -0
  491. polyfile/magic_defs/smalltalk +25 -0
  492. polyfile/magic_defs/smile +34 -0
  493. polyfile/magic_defs/sniffer +482 -0
  494. polyfile/magic_defs/softquad +40 -0
  495. polyfile/magic_defs/sosi +40 -0
  496. polyfile/magic_defs/spec +21 -0
  497. polyfile/magic_defs/spectrum +184 -0
  498. polyfile/magic_defs/sql +288 -0
  499. polyfile/magic_defs/ssh +39 -0
  500. polyfile/magic_defs/ssl +20 -0
  501. polyfile/magic_defs/statistics +45 -0
  502. polyfile/magic_defs/subtitle +38 -0
  503. polyfile/magic_defs/sun +141 -0
  504. polyfile/magic_defs/svf +5 -0
  505. polyfile/magic_defs/sylk +36 -0
  506. polyfile/magic_defs/symbos +42 -0
  507. polyfile/magic_defs/sysex +429 -0
  508. polyfile/magic_defs/tcl +29 -0
  509. polyfile/magic_defs/teapot +6 -0
  510. polyfile/magic_defs/terminfo +63 -0
  511. polyfile/magic_defs/tex +141 -0
  512. polyfile/magic_defs/tgif +7 -0
  513. polyfile/magic_defs/ti-8x +239 -0
  514. polyfile/magic_defs/timezone +42 -0
  515. polyfile/magic_defs/tplink +95 -0
  516. polyfile/magic_defs/troff +38 -0
  517. polyfile/magic_defs/tuxedo +8 -0
  518. polyfile/magic_defs/typeset +8 -0
  519. polyfile/magic_defs/uf2 +72 -0
  520. polyfile/magic_defs/unicode +15 -0
  521. polyfile/magic_defs/unisig +12 -0
  522. polyfile/magic_defs/unknown +34 -0
  523. polyfile/magic_defs/usd +21 -0
  524. polyfile/magic_defs/uterus +16 -0
  525. polyfile/magic_defs/uuencode +28 -0
  526. polyfile/magic_defs/vacuum-cleaner +54 -0
  527. polyfile/magic_defs/varied.out +46 -0
  528. polyfile/magic_defs/varied.script +21 -0
  529. polyfile/magic_defs/vax +32 -0
  530. polyfile/magic_defs/vicar +17 -0
  531. polyfile/magic_defs/virtual +307 -0
  532. polyfile/magic_defs/virtutech +12 -0
  533. polyfile/magic_defs/visx +32 -0
  534. polyfile/magic_defs/vms +30 -0
  535. polyfile/magic_defs/vmware +6 -0
  536. polyfile/magic_defs/vorbis +155 -0
  537. polyfile/magic_defs/vxl +14 -0
  538. polyfile/magic_defs/warc +16 -0
  539. polyfile/magic_defs/weak +16 -0
  540. polyfile/magic_defs/web +18 -0
  541. polyfile/magic_defs/webassembly +17 -0
  542. polyfile/magic_defs/windows +1811 -0
  543. polyfile/magic_defs/wireless +7 -0
  544. polyfile/magic_defs/wordprocessors +630 -0
  545. polyfile/magic_defs/wsdl +23 -0
  546. polyfile/magic_defs/x68000 +25 -0
  547. polyfile/magic_defs/xdelta +13 -0
  548. polyfile/magic_defs/xenix +106 -0
  549. polyfile/magic_defs/xilinx +58 -0
  550. polyfile/magic_defs/xo65 +37 -0
  551. polyfile/magic_defs/xwindows +43 -0
  552. polyfile/magic_defs/yara +17 -0
  553. polyfile/magic_defs/zfs +96 -0
  554. polyfile/magic_defs/zilog +12 -0
  555. polyfile/magic_defs/zip +126 -0
  556. polyfile/magic_defs/zyxel +17 -0
  557. polyfile/nes.py +144 -0
  558. polyfile/nitf.py +15 -0
  559. polyfile/pdf.py +1264 -0
  560. polyfile/pickles.py +45 -0
  561. polyfile/polyfile.py +409 -0
  562. polyfile/profiling.py +115 -0
  563. polyfile/repl.py +624 -0
  564. polyfile/search.py +310 -0
  565. polyfile/serialization.py +323 -0
  566. polyfile/structmatcher.py +46 -0
  567. polyfile/structs.py +281 -0
  568. polyfile/templates/download.js +162 -0
  569. polyfile/templates/hexdump.css +268 -0
  570. polyfile/templates/hexdump.js +756 -0
  571. polyfile/templates/jquery-3.4.1.min.js +2 -0
  572. polyfile/templates/template.html +119 -0
  573. polyfile/wildcards.py +62 -0
  574. polyfile/zipmatcher.py +183 -0
  575. polyfile_weave-0.5.5.dist-info/METADATA +173 -0
  576. polyfile_weave-0.5.5.dist-info/RECORD +585 -0
  577. polyfile_weave-0.5.5.dist-info/WHEEL +5 -0
  578. polyfile_weave-0.5.5.dist-info/entry_points.txt +2 -0
  579. polyfile_weave-0.5.5.dist-info/licenses/LICENSE +202 -0
  580. polyfile_weave-0.5.5.dist-info/top_level.txt +2 -0
  581. polymerge/__init__.py +1 -0
  582. polymerge/__main__.py +296 -0
  583. polymerge/cfg.py +127 -0
  584. polymerge/polymerge.py +227 -0
  585. polymerge/polytracker.py +190 -0
@@ -0,0 +1,2482 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ from enum import Enum
7
+ import collections
8
+
9
+
10
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
11
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
12
+
13
+ class Elf(KaitaiStruct):
14
+ """
15
+ .. seealso::
16
+ Source - https://sourceware.org/git/?p=glibc.git;a=blob;f=elf/elf.h;hb=0f62fe0532
17
+
18
+
19
+ .. seealso::
20
+ Source - https://refspecs.linuxfoundation.org/elf/gabi4+/contents.html
21
+
22
+
23
+ .. seealso::
24
+ Source - https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/linkers-libraries/elf-application-binary-interface.html
25
+ """
26
+
27
+ class SymbolVisibility(Enum):
28
+ default = 0
29
+ internal = 1
30
+ hidden = 2
31
+ protected = 3
32
+ exported = 4
33
+ singleton = 5
34
+ eliminate = 6
35
+
36
+ class SymbolBinding(Enum):
37
+ local = 0
38
+ global_symbol = 1
39
+ weak = 2
40
+ os10 = 10
41
+ os11 = 11
42
+ os12 = 12
43
+ proc13 = 13
44
+ proc14 = 14
45
+ proc15 = 15
46
+
47
+ class Endian(Enum):
48
+ le = 1
49
+ be = 2
50
+
51
+ class ShType(Enum):
52
+ null_type = 0
53
+ progbits = 1
54
+ symtab = 2
55
+ strtab = 3
56
+ rela = 4
57
+ hash = 5
58
+ dynamic = 6
59
+ note = 7
60
+ nobits = 8
61
+ rel = 9
62
+ shlib = 10
63
+ dynsym = 11
64
+ init_array = 14
65
+ fini_array = 15
66
+ preinit_array = 16
67
+ group = 17
68
+ symtab_shndx = 18
69
+ relr = 19
70
+ sunw_symnsort = 1879048172
71
+ sunw_phname = 1879048173
72
+ sunw_ancillary = 1879048174
73
+ sunw_capchain = 1879048175
74
+ sunw_capinfo = 1879048176
75
+ sunw_symsort = 1879048177
76
+ sunw_tlssort = 1879048178
77
+ sunw_ldynsym = 1879048179
78
+ sunw_dof = 1879048180
79
+ sunw_cap = 1879048181
80
+ sunw_signature = 1879048182
81
+ sunw_annotate = 1879048183
82
+ sunw_debugstr = 1879048184
83
+ sunw_debug = 1879048185
84
+ sunw_move = 1879048186
85
+ sunw_comdat = 1879048187
86
+ sunw_syminfo = 1879048188
87
+ sunw_verdef = 1879048189
88
+ sunw_verneed = 1879048190
89
+ sunw_versym = 1879048191
90
+ sparc_gotdata = 1879048192
91
+ amd64_unwind = 1879048193
92
+ arm_preemptmap = 1879048194
93
+ arm_attributes = 1879048195
94
+ arm_debugoverlay = 1879048196
95
+ arm_overlaysection = 1879048197
96
+
97
+ class OsAbi(Enum):
98
+ system_v = 0
99
+ hp_ux = 1
100
+ netbsd = 2
101
+ gnu = 3
102
+ solaris = 6
103
+ aix = 7
104
+ irix = 8
105
+ freebsd = 9
106
+ tru64 = 10
107
+ modesto = 11
108
+ openbsd = 12
109
+ openvms = 13
110
+ nsk = 14
111
+ aros = 15
112
+ fenixos = 16
113
+ cloudabi = 17
114
+ openvos = 18
115
+
116
+ class Machine(Enum):
117
+ no_machine = 0
118
+ m32 = 1
119
+ sparc = 2
120
+ x86 = 3
121
+ m68k = 4
122
+ m88k = 5
123
+ iamcu = 6
124
+ i860 = 7
125
+ mips = 8
126
+ s370 = 9
127
+ mips_rs3_le = 10
128
+ parisc = 15
129
+ vpp500 = 17
130
+ sparc32plus = 18
131
+ i960 = 19
132
+ powerpc = 20
133
+ powerpc64 = 21
134
+ s390 = 22
135
+ spu = 23
136
+ v800 = 36
137
+ fr20 = 37
138
+ rh32 = 38
139
+ rce = 39
140
+ arm = 40
141
+ old_alpha = 41
142
+ superh = 42
143
+ sparc_v9 = 43
144
+ tricore = 44
145
+ arc = 45
146
+ h8_300 = 46
147
+ h8_300h = 47
148
+ h8s = 48
149
+ h8_500 = 49
150
+ ia_64 = 50
151
+ mips_x = 51
152
+ coldfire = 52
153
+ m68hc12 = 53
154
+ mma = 54
155
+ pcp = 55
156
+ ncpu = 56
157
+ ndr1 = 57
158
+ starcore = 58
159
+ me16 = 59
160
+ st100 = 60
161
+ tinyj = 61
162
+ x86_64 = 62
163
+ pdsp = 63
164
+ pdp10 = 64
165
+ pdp11 = 65
166
+ fx66 = 66
167
+ st9plus = 67
168
+ st7 = 68
169
+ mc68hc16 = 69
170
+ mc68hc11 = 70
171
+ mc68hc08 = 71
172
+ mc68hc05 = 72
173
+ svx = 73
174
+ st19 = 74
175
+ vax = 75
176
+ cris = 76
177
+ javelin = 77
178
+ firepath = 78
179
+ zsp = 79
180
+ mmix = 80
181
+ huany = 81
182
+ prism = 82
183
+ avr = 83
184
+ fr30 = 84
185
+ d10v = 85
186
+ d30v = 86
187
+ v850 = 87
188
+ m32r = 88
189
+ mn10300 = 89
190
+ mn10200 = 90
191
+ picojava = 91
192
+ openrisc = 92
193
+ arc_compact = 93
194
+ xtensa = 94
195
+ videocore = 95
196
+ tmm_gpp = 96
197
+ ns32k = 97
198
+ tpc = 98
199
+ snp1k = 99
200
+ st200 = 100
201
+ ip2k = 101
202
+ max = 102
203
+ compact_risc = 103
204
+ f2mc16 = 104
205
+ msp430 = 105
206
+ blackfin = 106
207
+ se_c33 = 107
208
+ sep = 108
209
+ arca = 109
210
+ unicore = 110
211
+ excess = 111
212
+ dxp = 112
213
+ altera_nios2 = 113
214
+ crx = 114
215
+ xgate = 115
216
+ c166 = 116
217
+ m16c = 117
218
+ dspic30f = 118
219
+ freescale_ce = 119
220
+ m32c = 120
221
+ tsk3000 = 131
222
+ rs08 = 132
223
+ sharc = 133
224
+ ecog2 = 134
225
+ score7 = 135
226
+ dsp24 = 136
227
+ videocore3 = 137
228
+ latticemico32 = 138
229
+ se_c17 = 139
230
+ ti_c6000 = 140
231
+ ti_c2000 = 141
232
+ ti_c5500 = 142
233
+ ti_arp32 = 143
234
+ ti_pru = 144
235
+ mmdsp_plus = 160
236
+ cypress_m8c = 161
237
+ r32c = 162
238
+ trimedia = 163
239
+ qdsp6 = 164
240
+ i8051 = 165
241
+ stxp7x = 166
242
+ nds32 = 167
243
+ ecog1x = 168
244
+ maxq30 = 169
245
+ ximo16 = 170
246
+ manik = 171
247
+ craynv2 = 172
248
+ rx = 173
249
+ metag = 174
250
+ mcst_elbrus = 175
251
+ ecog16 = 176
252
+ cr16 = 177
253
+ etpu = 178
254
+ sle9x = 179
255
+ l10m = 180
256
+ k10m = 181
257
+ aarch64 = 183
258
+ avr32 = 185
259
+ stm8 = 186
260
+ tile64 = 187
261
+ tilepro = 188
262
+ microblaze = 189
263
+ cuda = 190
264
+ tilegx = 191
265
+ cloudshield = 192
266
+ corea_1st = 193
267
+ corea_2nd = 194
268
+ arcv2 = 195
269
+ open8 = 196
270
+ rl78 = 197
271
+ videocore5 = 198
272
+ renesas_78kor = 199
273
+ freescale_56800ex = 200
274
+ ba1 = 201
275
+ ba2 = 202
276
+ xcore = 203
277
+ mchp_pic = 204
278
+ intelgt = 205
279
+ intel206 = 206
280
+ intel207 = 207
281
+ intel208 = 208
282
+ intel209 = 209
283
+ km32 = 210
284
+ kmx32 = 211
285
+ kmx16 = 212
286
+ kmx8 = 213
287
+ kvarc = 214
288
+ cdp = 215
289
+ coge = 216
290
+ cool = 217
291
+ norc = 218
292
+ csr_kalimba = 219
293
+ z80 = 220
294
+ visium = 221
295
+ ft32 = 222
296
+ moxie = 223
297
+ amd_gpu = 224
298
+ riscv = 243
299
+ lanai = 244
300
+ ceva = 245
301
+ ceva_x2 = 246
302
+ bpf = 247
303
+ graphcore_ipu = 248
304
+ img1 = 249
305
+ nfp = 250
306
+ ve = 251
307
+ csky = 252
308
+ arc_compact3_64 = 253
309
+ mcs6502 = 254
310
+ arc_compact3 = 255
311
+ kvx = 256
312
+ wdc65816 = 257
313
+ loongarch = 258
314
+ kf32 = 259
315
+ u16_u8core = 260
316
+ tachyum = 261
317
+ nxp_56800ef = 262
318
+ avr_old = 4183
319
+ msp430_old = 4185
320
+ adapteva_epiphany = 4643
321
+ mt = 9520
322
+ cygnus_fr30 = 13104
323
+ webassembly = 16727
324
+ xc16x = 18056
325
+ s12z = 19951
326
+ cygnus_frv = 21569
327
+ dlx = 23205
328
+ cygnus_d10v = 30288
329
+ cygnus_d30v = 30326
330
+ ip2k_old = 33303
331
+ cygnus_powerpc = 36901
332
+ alpha = 36902
333
+ cygnus_m32r = 36929
334
+ cygnus_v850 = 36992
335
+ s390_old = 41872
336
+ xtensa_old = 43975
337
+ xstormy16 = 44357
338
+ microblaze_old = 47787
339
+ cygnus_mn10300 = 48879
340
+ cygnus_mn10200 = 57005
341
+ cygnus_mep = 61453
342
+ m32c_old = 65200
343
+ iq2000 = 65210
344
+ nios32 = 65211
345
+ moxie_old = 65261
346
+
347
+ class SymbolType(Enum):
348
+ no_type = 0
349
+ object = 1
350
+ func = 2
351
+ section = 3
352
+ file = 4
353
+ common = 5
354
+ tls = 6
355
+ relc = 8
356
+ srelc = 9
357
+ gnu_ifunc = 10
358
+ os11 = 11
359
+ os12 = 12
360
+ proc13 = 13
361
+ proc14 = 14
362
+ proc15 = 15
363
+
364
+ class DynamicArrayTags(Enum):
365
+ null = 0
366
+ needed = 1
367
+ pltrelsz = 2
368
+ pltgot = 3
369
+ hash = 4
370
+ strtab = 5
371
+ symtab = 6
372
+ rela = 7
373
+ relasz = 8
374
+ relaent = 9
375
+ strsz = 10
376
+ syment = 11
377
+ init = 12
378
+ fini = 13
379
+ soname = 14
380
+ rpath = 15
381
+ symbolic = 16
382
+ rel = 17
383
+ relsz = 18
384
+ relent = 19
385
+ pltrel = 20
386
+ debug = 21
387
+ textrel = 22
388
+ jmprel = 23
389
+ bind_now = 24
390
+ init_array = 25
391
+ fini_array = 26
392
+ init_arraysz = 27
393
+ fini_arraysz = 28
394
+ runpath = 29
395
+ flags = 30
396
+ preinit_array = 32
397
+ preinit_arraysz = 33
398
+ symtab_shndx = 34
399
+ relrsz = 35
400
+ relr = 36
401
+ relrent = 37
402
+ deprecated_sparc_register = 117440513
403
+ sunw_auxiliary = 1610612749
404
+ sunw_rtldinf = 1610612750
405
+ sunw_filter = 1610612751
406
+ sunw_cap = 1610612752
407
+ sunw_symtab = 1610612753
408
+ sunw_symsz = 1610612754
409
+ sunw_sortent = 1610612755
410
+ sunw_symsort = 1610612756
411
+ sunw_symsortsz = 1610612757
412
+ sunw_tlssort = 1610612758
413
+ sunw_tlssortsz = 1610612759
414
+ sunw_capinfo = 1610612760
415
+ sunw_strpad = 1610612761
416
+ sunw_capchain = 1610612762
417
+ sunw_ldmach = 1610612763
418
+ sunw_symtab_shndx = 1610612764
419
+ sunw_capchainent = 1610612765
420
+ sunw_deferred = 1610612766
421
+ sunw_capchainsz = 1610612767
422
+ sunw_phname = 1610612768
423
+ sunw_parent = 1610612769
424
+ sunw_sx_aslr = 1610612771
425
+ sunw_relax = 1610612773
426
+ sunw_kmod = 1610612775
427
+ sunw_sx_nxheap = 1610612777
428
+ sunw_sx_nxstack = 1610612779
429
+ sunw_sx_adiheap = 1610612781
430
+ sunw_sx_adistack = 1610612783
431
+ sunw_sx_ssbd = 1610612785
432
+ sunw_symnsort = 1610612786
433
+ sunw_symnsortsz = 1610612787
434
+ gnu_flags_1 = 1879047668
435
+ gnu_prelinked = 1879047669
436
+ gnu_conflictsz = 1879047670
437
+ gnu_liblistsz = 1879047671
438
+ checksum = 1879047672
439
+ pltpadsz = 1879047673
440
+ moveent = 1879047674
441
+ movesz = 1879047675
442
+ feature_1 = 1879047676
443
+ posflag_1 = 1879047677
444
+ syminsz = 1879047678
445
+ syminent = 1879047679
446
+ gnu_hash = 1879047925
447
+ tlsdesc_plt = 1879047926
448
+ tlsdesc_got = 1879047927
449
+ gnu_conflict = 1879047928
450
+ gnu_liblist = 1879047929
451
+ config = 1879047930
452
+ depaudit = 1879047931
453
+ audit = 1879047932
454
+ pltpad = 1879047933
455
+ movetab = 1879047934
456
+ syminfo = 1879047935
457
+ versym = 1879048176
458
+ relacount = 1879048185
459
+ relcount = 1879048186
460
+ flags_1 = 1879048187
461
+ verdef = 1879048188
462
+ verdefnum = 1879048189
463
+ verneed = 1879048190
464
+ verneednum = 1879048191
465
+ sparc_register = 1879048193
466
+ auxiliary = 2147483645
467
+ used = 2147483646
468
+ filter = 2147483647
469
+
470
+ class Bits(Enum):
471
+ b32 = 1
472
+ b64 = 2
473
+
474
+ class PhType(Enum):
475
+ null_type = 0
476
+ load = 1
477
+ dynamic = 2
478
+ interp = 3
479
+ note = 4
480
+ shlib = 5
481
+ phdr = 6
482
+ tls = 7
483
+ gnu_eh_frame = 1685382480
484
+ gnu_stack = 1685382481
485
+ gnu_relro = 1685382482
486
+ gnu_property = 1685382483
487
+ pax_flags = 1694766464
488
+ arm_exidx = 1879048193
489
+
490
+ class ObjType(Enum):
491
+ no_file_type = 0
492
+ relocatable = 1
493
+ executable = 2
494
+ shared = 3
495
+ core = 4
496
+
497
+ class SectionHeaderIdxSpecial(Enum):
498
+ undefined = 0
499
+ before = 65280
500
+ after = 65281
501
+ amd64_lcommon = 65282
502
+ sunw_ignore = 65343
503
+ abs = 65521
504
+ common = 65522
505
+ xindex = 65535
506
+ SEQ_FIELDS = ["magic", "bits", "endian", "ei_version", "abi", "abi_version", "pad", "header"]
507
+ def __init__(self, _io, _parent=None, _root=None):
508
+ self._io = _io
509
+ self._parent = _parent
510
+ self._root = _root if _root else self
511
+ self._debug = collections.defaultdict(dict)
512
+
513
+ def _read(self):
514
+ self._debug['magic']['start'] = self._io.pos()
515
+ self.magic = self._io.read_bytes(4)
516
+ self._debug['magic']['end'] = self._io.pos()
517
+ if not self.magic == b"\x7F\x45\x4C\x46":
518
+ raise kaitaistruct.ValidationNotEqualError(b"\x7F\x45\x4C\x46", self.magic, self._io, u"/seq/0")
519
+ self._debug['bits']['start'] = self._io.pos()
520
+ self.bits = KaitaiStream.resolve_enum(Elf.Bits, self._io.read_u1())
521
+ self._debug['bits']['end'] = self._io.pos()
522
+ self._debug['endian']['start'] = self._io.pos()
523
+ self.endian = KaitaiStream.resolve_enum(Elf.Endian, self._io.read_u1())
524
+ self._debug['endian']['end'] = self._io.pos()
525
+ self._debug['ei_version']['start'] = self._io.pos()
526
+ self.ei_version = self._io.read_u1()
527
+ self._debug['ei_version']['end'] = self._io.pos()
528
+ if not self.ei_version == 1:
529
+ raise kaitaistruct.ValidationNotEqualError(1, self.ei_version, self._io, u"/seq/3")
530
+ self._debug['abi']['start'] = self._io.pos()
531
+ self.abi = KaitaiStream.resolve_enum(Elf.OsAbi, self._io.read_u1())
532
+ self._debug['abi']['end'] = self._io.pos()
533
+ self._debug['abi_version']['start'] = self._io.pos()
534
+ self.abi_version = self._io.read_u1()
535
+ self._debug['abi_version']['end'] = self._io.pos()
536
+ self._debug['pad']['start'] = self._io.pos()
537
+ self.pad = self._io.read_bytes(7)
538
+ self._debug['pad']['end'] = self._io.pos()
539
+ if not self.pad == b"\x00\x00\x00\x00\x00\x00\x00":
540
+ raise kaitaistruct.ValidationNotEqualError(b"\x00\x00\x00\x00\x00\x00\x00", self.pad, self._io, u"/seq/6")
541
+ self._debug['header']['start'] = self._io.pos()
542
+ self.header = Elf.EndianElf(self._io, self, self._root)
543
+ self.header._read()
544
+ self._debug['header']['end'] = self._io.pos()
545
+
546
+ class EndianElf(KaitaiStruct):
547
+ SEQ_FIELDS = ["e_type", "machine", "e_version", "entry_point", "program_header_offset", "section_header_offset", "flags", "e_ehsize", "program_header_entry_size", "qty_program_header", "section_header_entry_size", "qty_section_header", "section_names_idx"]
548
+ def __init__(self, _io, _parent=None, _root=None):
549
+ self._io = _io
550
+ self._parent = _parent
551
+ self._root = _root if _root else self
552
+ self._debug = collections.defaultdict(dict)
553
+
554
+ def _read(self):
555
+ _on = self._root.endian
556
+ if _on == Elf.Endian.le:
557
+ self._is_le = True
558
+ elif _on == Elf.Endian.be:
559
+ self._is_le = False
560
+ if not hasattr(self, '_is_le'):
561
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf")
562
+ elif self._is_le == True:
563
+ self._read_le()
564
+ elif self._is_le == False:
565
+ self._read_be()
566
+
567
+ def _read_le(self):
568
+ self._debug['e_type']['start'] = self._io.pos()
569
+ self.e_type = KaitaiStream.resolve_enum(Elf.ObjType, self._io.read_u2le())
570
+ self._debug['e_type']['end'] = self._io.pos()
571
+ self._debug['machine']['start'] = self._io.pos()
572
+ self.machine = KaitaiStream.resolve_enum(Elf.Machine, self._io.read_u2le())
573
+ self._debug['machine']['end'] = self._io.pos()
574
+ self._debug['e_version']['start'] = self._io.pos()
575
+ self.e_version = self._io.read_u4le()
576
+ self._debug['e_version']['end'] = self._io.pos()
577
+ self._debug['entry_point']['start'] = self._io.pos()
578
+ _on = self._root.bits
579
+ if _on == Elf.Bits.b32:
580
+ self.entry_point = self._io.read_u4le()
581
+ elif _on == Elf.Bits.b64:
582
+ self.entry_point = self._io.read_u8le()
583
+ self._debug['entry_point']['end'] = self._io.pos()
584
+ self._debug['program_header_offset']['start'] = self._io.pos()
585
+ _on = self._root.bits
586
+ if _on == Elf.Bits.b32:
587
+ self.program_header_offset = self._io.read_u4le()
588
+ elif _on == Elf.Bits.b64:
589
+ self.program_header_offset = self._io.read_u8le()
590
+ self._debug['program_header_offset']['end'] = self._io.pos()
591
+ self._debug['section_header_offset']['start'] = self._io.pos()
592
+ _on = self._root.bits
593
+ if _on == Elf.Bits.b32:
594
+ self.section_header_offset = self._io.read_u4le()
595
+ elif _on == Elf.Bits.b64:
596
+ self.section_header_offset = self._io.read_u8le()
597
+ self._debug['section_header_offset']['end'] = self._io.pos()
598
+ self._debug['flags']['start'] = self._io.pos()
599
+ self.flags = self._io.read_bytes(4)
600
+ self._debug['flags']['end'] = self._io.pos()
601
+ self._debug['e_ehsize']['start'] = self._io.pos()
602
+ self.e_ehsize = self._io.read_u2le()
603
+ self._debug['e_ehsize']['end'] = self._io.pos()
604
+ self._debug['program_header_entry_size']['start'] = self._io.pos()
605
+ self.program_header_entry_size = self._io.read_u2le()
606
+ self._debug['program_header_entry_size']['end'] = self._io.pos()
607
+ self._debug['qty_program_header']['start'] = self._io.pos()
608
+ self.qty_program_header = self._io.read_u2le()
609
+ self._debug['qty_program_header']['end'] = self._io.pos()
610
+ self._debug['section_header_entry_size']['start'] = self._io.pos()
611
+ self.section_header_entry_size = self._io.read_u2le()
612
+ self._debug['section_header_entry_size']['end'] = self._io.pos()
613
+ self._debug['qty_section_header']['start'] = self._io.pos()
614
+ self.qty_section_header = self._io.read_u2le()
615
+ self._debug['qty_section_header']['end'] = self._io.pos()
616
+ self._debug['section_names_idx']['start'] = self._io.pos()
617
+ self.section_names_idx = self._io.read_u2le()
618
+ self._debug['section_names_idx']['end'] = self._io.pos()
619
+
620
+ def _read_be(self):
621
+ self._debug['e_type']['start'] = self._io.pos()
622
+ self.e_type = KaitaiStream.resolve_enum(Elf.ObjType, self._io.read_u2be())
623
+ self._debug['e_type']['end'] = self._io.pos()
624
+ self._debug['machine']['start'] = self._io.pos()
625
+ self.machine = KaitaiStream.resolve_enum(Elf.Machine, self._io.read_u2be())
626
+ self._debug['machine']['end'] = self._io.pos()
627
+ self._debug['e_version']['start'] = self._io.pos()
628
+ self.e_version = self._io.read_u4be()
629
+ self._debug['e_version']['end'] = self._io.pos()
630
+ self._debug['entry_point']['start'] = self._io.pos()
631
+ _on = self._root.bits
632
+ if _on == Elf.Bits.b32:
633
+ self.entry_point = self._io.read_u4be()
634
+ elif _on == Elf.Bits.b64:
635
+ self.entry_point = self._io.read_u8be()
636
+ self._debug['entry_point']['end'] = self._io.pos()
637
+ self._debug['program_header_offset']['start'] = self._io.pos()
638
+ _on = self._root.bits
639
+ if _on == Elf.Bits.b32:
640
+ self.program_header_offset = self._io.read_u4be()
641
+ elif _on == Elf.Bits.b64:
642
+ self.program_header_offset = self._io.read_u8be()
643
+ self._debug['program_header_offset']['end'] = self._io.pos()
644
+ self._debug['section_header_offset']['start'] = self._io.pos()
645
+ _on = self._root.bits
646
+ if _on == Elf.Bits.b32:
647
+ self.section_header_offset = self._io.read_u4be()
648
+ elif _on == Elf.Bits.b64:
649
+ self.section_header_offset = self._io.read_u8be()
650
+ self._debug['section_header_offset']['end'] = self._io.pos()
651
+ self._debug['flags']['start'] = self._io.pos()
652
+ self.flags = self._io.read_bytes(4)
653
+ self._debug['flags']['end'] = self._io.pos()
654
+ self._debug['e_ehsize']['start'] = self._io.pos()
655
+ self.e_ehsize = self._io.read_u2be()
656
+ self._debug['e_ehsize']['end'] = self._io.pos()
657
+ self._debug['program_header_entry_size']['start'] = self._io.pos()
658
+ self.program_header_entry_size = self._io.read_u2be()
659
+ self._debug['program_header_entry_size']['end'] = self._io.pos()
660
+ self._debug['qty_program_header']['start'] = self._io.pos()
661
+ self.qty_program_header = self._io.read_u2be()
662
+ self._debug['qty_program_header']['end'] = self._io.pos()
663
+ self._debug['section_header_entry_size']['start'] = self._io.pos()
664
+ self.section_header_entry_size = self._io.read_u2be()
665
+ self._debug['section_header_entry_size']['end'] = self._io.pos()
666
+ self._debug['qty_section_header']['start'] = self._io.pos()
667
+ self.qty_section_header = self._io.read_u2be()
668
+ self._debug['qty_section_header']['end'] = self._io.pos()
669
+ self._debug['section_names_idx']['start'] = self._io.pos()
670
+ self.section_names_idx = self._io.read_u2be()
671
+ self._debug['section_names_idx']['end'] = self._io.pos()
672
+
673
+ class NoteSection(KaitaiStruct):
674
+ SEQ_FIELDS = ["entries"]
675
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
676
+ self._io = _io
677
+ self._parent = _parent
678
+ self._root = _root if _root else self
679
+ self._is_le = _is_le
680
+ self._debug = collections.defaultdict(dict)
681
+
682
+ def _read(self):
683
+ if not hasattr(self, '_is_le'):
684
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/note_section")
685
+ elif self._is_le == True:
686
+ self._read_le()
687
+ elif self._is_le == False:
688
+ self._read_be()
689
+
690
+ def _read_le(self):
691
+ self._debug['entries']['start'] = self._io.pos()
692
+ self.entries = []
693
+ i = 0
694
+ while not self._io.is_eof():
695
+ if not 'arr' in self._debug['entries']:
696
+ self._debug['entries']['arr'] = []
697
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
698
+ _t_entries = Elf.EndianElf.NoteSectionEntry(self._io, self, self._root, self._is_le)
699
+ _t_entries._read()
700
+ self.entries.append(_t_entries)
701
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
702
+ i += 1
703
+
704
+ self._debug['entries']['end'] = self._io.pos()
705
+
706
+ def _read_be(self):
707
+ self._debug['entries']['start'] = self._io.pos()
708
+ self.entries = []
709
+ i = 0
710
+ while not self._io.is_eof():
711
+ if not 'arr' in self._debug['entries']:
712
+ self._debug['entries']['arr'] = []
713
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
714
+ _t_entries = Elf.EndianElf.NoteSectionEntry(self._io, self, self._root, self._is_le)
715
+ _t_entries._read()
716
+ self.entries.append(_t_entries)
717
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
718
+ i += 1
719
+
720
+ self._debug['entries']['end'] = self._io.pos()
721
+
722
+
723
+ class ProgramHeader(KaitaiStruct):
724
+ SEQ_FIELDS = ["type", "flags64", "offset", "vaddr", "paddr", "filesz", "memsz", "flags32", "align"]
725
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
726
+ self._io = _io
727
+ self._parent = _parent
728
+ self._root = _root if _root else self
729
+ self._is_le = _is_le
730
+ self._debug = collections.defaultdict(dict)
731
+
732
+ def _read(self):
733
+ if not hasattr(self, '_is_le'):
734
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/program_header")
735
+ elif self._is_le == True:
736
+ self._read_le()
737
+ elif self._is_le == False:
738
+ self._read_be()
739
+
740
+ def _read_le(self):
741
+ self._debug['type']['start'] = self._io.pos()
742
+ self.type = KaitaiStream.resolve_enum(Elf.PhType, self._io.read_u4le())
743
+ self._debug['type']['end'] = self._io.pos()
744
+ if self._root.bits == Elf.Bits.b64:
745
+ self._debug['flags64']['start'] = self._io.pos()
746
+ self.flags64 = self._io.read_u4le()
747
+ self._debug['flags64']['end'] = self._io.pos()
748
+
749
+ self._debug['offset']['start'] = self._io.pos()
750
+ _on = self._root.bits
751
+ if _on == Elf.Bits.b32:
752
+ self.offset = self._io.read_u4le()
753
+ elif _on == Elf.Bits.b64:
754
+ self.offset = self._io.read_u8le()
755
+ self._debug['offset']['end'] = self._io.pos()
756
+ self._debug['vaddr']['start'] = self._io.pos()
757
+ _on = self._root.bits
758
+ if _on == Elf.Bits.b32:
759
+ self.vaddr = self._io.read_u4le()
760
+ elif _on == Elf.Bits.b64:
761
+ self.vaddr = self._io.read_u8le()
762
+ self._debug['vaddr']['end'] = self._io.pos()
763
+ self._debug['paddr']['start'] = self._io.pos()
764
+ _on = self._root.bits
765
+ if _on == Elf.Bits.b32:
766
+ self.paddr = self._io.read_u4le()
767
+ elif _on == Elf.Bits.b64:
768
+ self.paddr = self._io.read_u8le()
769
+ self._debug['paddr']['end'] = self._io.pos()
770
+ self._debug['filesz']['start'] = self._io.pos()
771
+ _on = self._root.bits
772
+ if _on == Elf.Bits.b32:
773
+ self.filesz = self._io.read_u4le()
774
+ elif _on == Elf.Bits.b64:
775
+ self.filesz = self._io.read_u8le()
776
+ self._debug['filesz']['end'] = self._io.pos()
777
+ self._debug['memsz']['start'] = self._io.pos()
778
+ _on = self._root.bits
779
+ if _on == Elf.Bits.b32:
780
+ self.memsz = self._io.read_u4le()
781
+ elif _on == Elf.Bits.b64:
782
+ self.memsz = self._io.read_u8le()
783
+ self._debug['memsz']['end'] = self._io.pos()
784
+ if self._root.bits == Elf.Bits.b32:
785
+ self._debug['flags32']['start'] = self._io.pos()
786
+ self.flags32 = self._io.read_u4le()
787
+ self._debug['flags32']['end'] = self._io.pos()
788
+
789
+ self._debug['align']['start'] = self._io.pos()
790
+ _on = self._root.bits
791
+ if _on == Elf.Bits.b32:
792
+ self.align = self._io.read_u4le()
793
+ elif _on == Elf.Bits.b64:
794
+ self.align = self._io.read_u8le()
795
+ self._debug['align']['end'] = self._io.pos()
796
+
797
+ def _read_be(self):
798
+ self._debug['type']['start'] = self._io.pos()
799
+ self.type = KaitaiStream.resolve_enum(Elf.PhType, self._io.read_u4be())
800
+ self._debug['type']['end'] = self._io.pos()
801
+ if self._root.bits == Elf.Bits.b64:
802
+ self._debug['flags64']['start'] = self._io.pos()
803
+ self.flags64 = self._io.read_u4be()
804
+ self._debug['flags64']['end'] = self._io.pos()
805
+
806
+ self._debug['offset']['start'] = self._io.pos()
807
+ _on = self._root.bits
808
+ if _on == Elf.Bits.b32:
809
+ self.offset = self._io.read_u4be()
810
+ elif _on == Elf.Bits.b64:
811
+ self.offset = self._io.read_u8be()
812
+ self._debug['offset']['end'] = self._io.pos()
813
+ self._debug['vaddr']['start'] = self._io.pos()
814
+ _on = self._root.bits
815
+ if _on == Elf.Bits.b32:
816
+ self.vaddr = self._io.read_u4be()
817
+ elif _on == Elf.Bits.b64:
818
+ self.vaddr = self._io.read_u8be()
819
+ self._debug['vaddr']['end'] = self._io.pos()
820
+ self._debug['paddr']['start'] = self._io.pos()
821
+ _on = self._root.bits
822
+ if _on == Elf.Bits.b32:
823
+ self.paddr = self._io.read_u4be()
824
+ elif _on == Elf.Bits.b64:
825
+ self.paddr = self._io.read_u8be()
826
+ self._debug['paddr']['end'] = self._io.pos()
827
+ self._debug['filesz']['start'] = self._io.pos()
828
+ _on = self._root.bits
829
+ if _on == Elf.Bits.b32:
830
+ self.filesz = self._io.read_u4be()
831
+ elif _on == Elf.Bits.b64:
832
+ self.filesz = self._io.read_u8be()
833
+ self._debug['filesz']['end'] = self._io.pos()
834
+ self._debug['memsz']['start'] = self._io.pos()
835
+ _on = self._root.bits
836
+ if _on == Elf.Bits.b32:
837
+ self.memsz = self._io.read_u4be()
838
+ elif _on == Elf.Bits.b64:
839
+ self.memsz = self._io.read_u8be()
840
+ self._debug['memsz']['end'] = self._io.pos()
841
+ if self._root.bits == Elf.Bits.b32:
842
+ self._debug['flags32']['start'] = self._io.pos()
843
+ self.flags32 = self._io.read_u4be()
844
+ self._debug['flags32']['end'] = self._io.pos()
845
+
846
+ self._debug['align']['start'] = self._io.pos()
847
+ _on = self._root.bits
848
+ if _on == Elf.Bits.b32:
849
+ self.align = self._io.read_u4be()
850
+ elif _on == Elf.Bits.b64:
851
+ self.align = self._io.read_u8be()
852
+ self._debug['align']['end'] = self._io.pos()
853
+
854
+ @property
855
+ def flags_obj(self):
856
+ if hasattr(self, '_m_flags_obj'):
857
+ return self._m_flags_obj if hasattr(self, '_m_flags_obj') else None
858
+
859
+ self._debug['_m_flags_obj']['start'] = self._io.pos()
860
+ if self._is_le:
861
+ _on = self._root.bits
862
+ if _on == Elf.Bits.b32:
863
+ self._m_flags_obj = Elf.PhdrTypeFlags(self.flags32, self._io, self, self._root)
864
+ self._m_flags_obj._read()
865
+ elif _on == Elf.Bits.b64:
866
+ self._m_flags_obj = Elf.PhdrTypeFlags(self.flags64, self._io, self, self._root)
867
+ self._m_flags_obj._read()
868
+ else:
869
+ _on = self._root.bits
870
+ if _on == Elf.Bits.b32:
871
+ self._m_flags_obj = Elf.PhdrTypeFlags(self.flags32, self._io, self, self._root)
872
+ self._m_flags_obj._read()
873
+ elif _on == Elf.Bits.b64:
874
+ self._m_flags_obj = Elf.PhdrTypeFlags(self.flags64, self._io, self, self._root)
875
+ self._m_flags_obj._read()
876
+ self._debug['_m_flags_obj']['end'] = self._io.pos()
877
+ return self._m_flags_obj if hasattr(self, '_m_flags_obj') else None
878
+
879
+
880
+ class DynamicSectionEntry(KaitaiStruct):
881
+ """
882
+ .. seealso::
883
+ Source - https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/linkers-libraries/dynamic-section.html
884
+
885
+
886
+ .. seealso::
887
+ Source - https://refspecs.linuxfoundation.org/elf/gabi4+/ch5.dynamic.html#dynamic_section
888
+ """
889
+ SEQ_FIELDS = ["tag", "value_or_ptr"]
890
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
891
+ self._io = _io
892
+ self._parent = _parent
893
+ self._root = _root if _root else self
894
+ self._is_le = _is_le
895
+ self._debug = collections.defaultdict(dict)
896
+
897
+ def _read(self):
898
+ if not hasattr(self, '_is_le'):
899
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/dynamic_section_entry")
900
+ elif self._is_le == True:
901
+ self._read_le()
902
+ elif self._is_le == False:
903
+ self._read_be()
904
+
905
+ def _read_le(self):
906
+ self._debug['tag']['start'] = self._io.pos()
907
+ _on = self._root.bits
908
+ if _on == Elf.Bits.b32:
909
+ self.tag = self._io.read_u4le()
910
+ elif _on == Elf.Bits.b64:
911
+ self.tag = self._io.read_u8le()
912
+ self._debug['tag']['end'] = self._io.pos()
913
+ self._debug['value_or_ptr']['start'] = self._io.pos()
914
+ _on = self._root.bits
915
+ if _on == Elf.Bits.b32:
916
+ self.value_or_ptr = self._io.read_u4le()
917
+ elif _on == Elf.Bits.b64:
918
+ self.value_or_ptr = self._io.read_u8le()
919
+ self._debug['value_or_ptr']['end'] = self._io.pos()
920
+
921
+ def _read_be(self):
922
+ self._debug['tag']['start'] = self._io.pos()
923
+ _on = self._root.bits
924
+ if _on == Elf.Bits.b32:
925
+ self.tag = self._io.read_u4be()
926
+ elif _on == Elf.Bits.b64:
927
+ self.tag = self._io.read_u8be()
928
+ self._debug['tag']['end'] = self._io.pos()
929
+ self._debug['value_or_ptr']['start'] = self._io.pos()
930
+ _on = self._root.bits
931
+ if _on == Elf.Bits.b32:
932
+ self.value_or_ptr = self._io.read_u4be()
933
+ elif _on == Elf.Bits.b64:
934
+ self.value_or_ptr = self._io.read_u8be()
935
+ self._debug['value_or_ptr']['end'] = self._io.pos()
936
+
937
+ @property
938
+ def flag_1_values(self):
939
+ if hasattr(self, '_m_flag_1_values'):
940
+ return self._m_flag_1_values if hasattr(self, '_m_flag_1_values') else None
941
+
942
+ if self.tag_enum == Elf.DynamicArrayTags.flags_1:
943
+ self._debug['_m_flag_1_values']['start'] = self._io.pos()
944
+ if self._is_le:
945
+ self._m_flag_1_values = Elf.DtFlag1Values(self.value_or_ptr, self._io, self, self._root)
946
+ self._m_flag_1_values._read()
947
+ else:
948
+ self._m_flag_1_values = Elf.DtFlag1Values(self.value_or_ptr, self._io, self, self._root)
949
+ self._m_flag_1_values._read()
950
+ self._debug['_m_flag_1_values']['end'] = self._io.pos()
951
+
952
+ return self._m_flag_1_values if hasattr(self, '_m_flag_1_values') else None
953
+
954
+ @property
955
+ def value_str(self):
956
+ if hasattr(self, '_m_value_str'):
957
+ return self._m_value_str if hasattr(self, '_m_value_str') else None
958
+
959
+ if ((self.is_value_str) and (self._parent.is_string_table_linked)) :
960
+ io = self._parent._parent.linked_section.body._io
961
+ _pos = io.pos()
962
+ io.seek(self.value_or_ptr)
963
+ self._debug['_m_value_str']['start'] = io.pos()
964
+ if self._is_le:
965
+ self._m_value_str = (io.read_bytes_term(0, False, True, True)).decode(u"ASCII")
966
+ else:
967
+ self._m_value_str = (io.read_bytes_term(0, False, True, True)).decode(u"ASCII")
968
+ self._debug['_m_value_str']['end'] = io.pos()
969
+ io.seek(_pos)
970
+
971
+ return self._m_value_str if hasattr(self, '_m_value_str') else None
972
+
973
+ @property
974
+ def tag_enum(self):
975
+ if hasattr(self, '_m_tag_enum'):
976
+ return self._m_tag_enum if hasattr(self, '_m_tag_enum') else None
977
+
978
+ self._m_tag_enum = KaitaiStream.resolve_enum(Elf.DynamicArrayTags, self.tag)
979
+ return self._m_tag_enum if hasattr(self, '_m_tag_enum') else None
980
+
981
+ @property
982
+ def flag_values(self):
983
+ if hasattr(self, '_m_flag_values'):
984
+ return self._m_flag_values if hasattr(self, '_m_flag_values') else None
985
+
986
+ if self.tag_enum == Elf.DynamicArrayTags.flags:
987
+ self._debug['_m_flag_values']['start'] = self._io.pos()
988
+ if self._is_le:
989
+ self._m_flag_values = Elf.DtFlagValues(self.value_or_ptr, self._io, self, self._root)
990
+ self._m_flag_values._read()
991
+ else:
992
+ self._m_flag_values = Elf.DtFlagValues(self.value_or_ptr, self._io, self, self._root)
993
+ self._m_flag_values._read()
994
+ self._debug['_m_flag_values']['end'] = self._io.pos()
995
+
996
+ return self._m_flag_values if hasattr(self, '_m_flag_values') else None
997
+
998
+ @property
999
+ def is_value_str(self):
1000
+ if hasattr(self, '_m_is_value_str'):
1001
+ return self._m_is_value_str if hasattr(self, '_m_is_value_str') else None
1002
+
1003
+ self._m_is_value_str = ((self.value_or_ptr != 0) and ( ((self.tag_enum == Elf.DynamicArrayTags.needed) or (self.tag_enum == Elf.DynamicArrayTags.soname) or (self.tag_enum == Elf.DynamicArrayTags.rpath) or (self.tag_enum == Elf.DynamicArrayTags.runpath) or (self.tag_enum == Elf.DynamicArrayTags.sunw_auxiliary) or (self.tag_enum == Elf.DynamicArrayTags.sunw_filter) or (self.tag_enum == Elf.DynamicArrayTags.auxiliary) or (self.tag_enum == Elf.DynamicArrayTags.filter) or (self.tag_enum == Elf.DynamicArrayTags.config) or (self.tag_enum == Elf.DynamicArrayTags.depaudit) or (self.tag_enum == Elf.DynamicArrayTags.audit)) ))
1004
+ return self._m_is_value_str if hasattr(self, '_m_is_value_str') else None
1005
+
1006
+
1007
+ class SectionHeader(KaitaiStruct):
1008
+ SEQ_FIELDS = ["ofs_name", "type", "flags", "addr", "ofs_body", "len_body", "linked_section_idx", "info", "align", "entry_size"]
1009
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
1010
+ self._io = _io
1011
+ self._parent = _parent
1012
+ self._root = _root if _root else self
1013
+ self._is_le = _is_le
1014
+ self._debug = collections.defaultdict(dict)
1015
+
1016
+ def _read(self):
1017
+ if not hasattr(self, '_is_le'):
1018
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/section_header")
1019
+ elif self._is_le == True:
1020
+ self._read_le()
1021
+ elif self._is_le == False:
1022
+ self._read_be()
1023
+
1024
+ def _read_le(self):
1025
+ self._debug['ofs_name']['start'] = self._io.pos()
1026
+ self.ofs_name = self._io.read_u4le()
1027
+ self._debug['ofs_name']['end'] = self._io.pos()
1028
+ self._debug['type']['start'] = self._io.pos()
1029
+ self.type = KaitaiStream.resolve_enum(Elf.ShType, self._io.read_u4le())
1030
+ self._debug['type']['end'] = self._io.pos()
1031
+ self._debug['flags']['start'] = self._io.pos()
1032
+ _on = self._root.bits
1033
+ if _on == Elf.Bits.b32:
1034
+ self.flags = self._io.read_u4le()
1035
+ elif _on == Elf.Bits.b64:
1036
+ self.flags = self._io.read_u8le()
1037
+ self._debug['flags']['end'] = self._io.pos()
1038
+ self._debug['addr']['start'] = self._io.pos()
1039
+ _on = self._root.bits
1040
+ if _on == Elf.Bits.b32:
1041
+ self.addr = self._io.read_u4le()
1042
+ elif _on == Elf.Bits.b64:
1043
+ self.addr = self._io.read_u8le()
1044
+ self._debug['addr']['end'] = self._io.pos()
1045
+ self._debug['ofs_body']['start'] = self._io.pos()
1046
+ _on = self._root.bits
1047
+ if _on == Elf.Bits.b32:
1048
+ self.ofs_body = self._io.read_u4le()
1049
+ elif _on == Elf.Bits.b64:
1050
+ self.ofs_body = self._io.read_u8le()
1051
+ self._debug['ofs_body']['end'] = self._io.pos()
1052
+ self._debug['len_body']['start'] = self._io.pos()
1053
+ _on = self._root.bits
1054
+ if _on == Elf.Bits.b32:
1055
+ self.len_body = self._io.read_u4le()
1056
+ elif _on == Elf.Bits.b64:
1057
+ self.len_body = self._io.read_u8le()
1058
+ self._debug['len_body']['end'] = self._io.pos()
1059
+ self._debug['linked_section_idx']['start'] = self._io.pos()
1060
+ self.linked_section_idx = self._io.read_u4le()
1061
+ self._debug['linked_section_idx']['end'] = self._io.pos()
1062
+ self._debug['info']['start'] = self._io.pos()
1063
+ self.info = self._io.read_bytes(4)
1064
+ self._debug['info']['end'] = self._io.pos()
1065
+ self._debug['align']['start'] = self._io.pos()
1066
+ _on = self._root.bits
1067
+ if _on == Elf.Bits.b32:
1068
+ self.align = self._io.read_u4le()
1069
+ elif _on == Elf.Bits.b64:
1070
+ self.align = self._io.read_u8le()
1071
+ self._debug['align']['end'] = self._io.pos()
1072
+ self._debug['entry_size']['start'] = self._io.pos()
1073
+ _on = self._root.bits
1074
+ if _on == Elf.Bits.b32:
1075
+ self.entry_size = self._io.read_u4le()
1076
+ elif _on == Elf.Bits.b64:
1077
+ self.entry_size = self._io.read_u8le()
1078
+ self._debug['entry_size']['end'] = self._io.pos()
1079
+
1080
+ def _read_be(self):
1081
+ self._debug['ofs_name']['start'] = self._io.pos()
1082
+ self.ofs_name = self._io.read_u4be()
1083
+ self._debug['ofs_name']['end'] = self._io.pos()
1084
+ self._debug['type']['start'] = self._io.pos()
1085
+ self.type = KaitaiStream.resolve_enum(Elf.ShType, self._io.read_u4be())
1086
+ self._debug['type']['end'] = self._io.pos()
1087
+ self._debug['flags']['start'] = self._io.pos()
1088
+ _on = self._root.bits
1089
+ if _on == Elf.Bits.b32:
1090
+ self.flags = self._io.read_u4be()
1091
+ elif _on == Elf.Bits.b64:
1092
+ self.flags = self._io.read_u8be()
1093
+ self._debug['flags']['end'] = self._io.pos()
1094
+ self._debug['addr']['start'] = self._io.pos()
1095
+ _on = self._root.bits
1096
+ if _on == Elf.Bits.b32:
1097
+ self.addr = self._io.read_u4be()
1098
+ elif _on == Elf.Bits.b64:
1099
+ self.addr = self._io.read_u8be()
1100
+ self._debug['addr']['end'] = self._io.pos()
1101
+ self._debug['ofs_body']['start'] = self._io.pos()
1102
+ _on = self._root.bits
1103
+ if _on == Elf.Bits.b32:
1104
+ self.ofs_body = self._io.read_u4be()
1105
+ elif _on == Elf.Bits.b64:
1106
+ self.ofs_body = self._io.read_u8be()
1107
+ self._debug['ofs_body']['end'] = self._io.pos()
1108
+ self._debug['len_body']['start'] = self._io.pos()
1109
+ _on = self._root.bits
1110
+ if _on == Elf.Bits.b32:
1111
+ self.len_body = self._io.read_u4be()
1112
+ elif _on == Elf.Bits.b64:
1113
+ self.len_body = self._io.read_u8be()
1114
+ self._debug['len_body']['end'] = self._io.pos()
1115
+ self._debug['linked_section_idx']['start'] = self._io.pos()
1116
+ self.linked_section_idx = self._io.read_u4be()
1117
+ self._debug['linked_section_idx']['end'] = self._io.pos()
1118
+ self._debug['info']['start'] = self._io.pos()
1119
+ self.info = self._io.read_bytes(4)
1120
+ self._debug['info']['end'] = self._io.pos()
1121
+ self._debug['align']['start'] = self._io.pos()
1122
+ _on = self._root.bits
1123
+ if _on == Elf.Bits.b32:
1124
+ self.align = self._io.read_u4be()
1125
+ elif _on == Elf.Bits.b64:
1126
+ self.align = self._io.read_u8be()
1127
+ self._debug['align']['end'] = self._io.pos()
1128
+ self._debug['entry_size']['start'] = self._io.pos()
1129
+ _on = self._root.bits
1130
+ if _on == Elf.Bits.b32:
1131
+ self.entry_size = self._io.read_u4be()
1132
+ elif _on == Elf.Bits.b64:
1133
+ self.entry_size = self._io.read_u8be()
1134
+ self._debug['entry_size']['end'] = self._io.pos()
1135
+
1136
+ @property
1137
+ def body(self):
1138
+ if hasattr(self, '_m_body'):
1139
+ return self._m_body if hasattr(self, '_m_body') else None
1140
+
1141
+ if self.type != Elf.ShType.nobits:
1142
+ io = self._root._io
1143
+ _pos = io.pos()
1144
+ io.seek(self.ofs_body)
1145
+ self._debug['_m_body']['start'] = io.pos()
1146
+ if self._is_le:
1147
+ _on = self.type
1148
+ if _on == Elf.ShType.rel:
1149
+ self._raw__m_body = io.read_bytes(self.len_body)
1150
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1151
+ self._m_body = Elf.EndianElf.RelocationSection(False, _io__raw__m_body, self, self._root, self._is_le)
1152
+ self._m_body._read()
1153
+ elif _on == Elf.ShType.note:
1154
+ self._raw__m_body = io.read_bytes(self.len_body)
1155
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1156
+ self._m_body = Elf.EndianElf.NoteSection(_io__raw__m_body, self, self._root, self._is_le)
1157
+ self._m_body._read()
1158
+ elif _on == Elf.ShType.symtab:
1159
+ self._raw__m_body = io.read_bytes(self.len_body)
1160
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1161
+ self._m_body = Elf.EndianElf.DynsymSection(_io__raw__m_body, self, self._root, self._is_le)
1162
+ self._m_body._read()
1163
+ elif _on == Elf.ShType.strtab:
1164
+ self._raw__m_body = io.read_bytes(self.len_body)
1165
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1166
+ self._m_body = Elf.EndianElf.StringsStruct(_io__raw__m_body, self, self._root, self._is_le)
1167
+ self._m_body._read()
1168
+ elif _on == Elf.ShType.dynamic:
1169
+ self._raw__m_body = io.read_bytes(self.len_body)
1170
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1171
+ self._m_body = Elf.EndianElf.DynamicSection(_io__raw__m_body, self, self._root, self._is_le)
1172
+ self._m_body._read()
1173
+ elif _on == Elf.ShType.dynsym:
1174
+ self._raw__m_body = io.read_bytes(self.len_body)
1175
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1176
+ self._m_body = Elf.EndianElf.DynsymSection(_io__raw__m_body, self, self._root, self._is_le)
1177
+ self._m_body._read()
1178
+ elif _on == Elf.ShType.rela:
1179
+ self._raw__m_body = io.read_bytes(self.len_body)
1180
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1181
+ self._m_body = Elf.EndianElf.RelocationSection(True, _io__raw__m_body, self, self._root, self._is_le)
1182
+ self._m_body._read()
1183
+ else:
1184
+ self._m_body = io.read_bytes(self.len_body)
1185
+ else:
1186
+ _on = self.type
1187
+ if _on == Elf.ShType.rel:
1188
+ self._raw__m_body = io.read_bytes(self.len_body)
1189
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1190
+ self._m_body = Elf.EndianElf.RelocationSection(False, _io__raw__m_body, self, self._root, self._is_le)
1191
+ self._m_body._read()
1192
+ elif _on == Elf.ShType.note:
1193
+ self._raw__m_body = io.read_bytes(self.len_body)
1194
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1195
+ self._m_body = Elf.EndianElf.NoteSection(_io__raw__m_body, self, self._root, self._is_le)
1196
+ self._m_body._read()
1197
+ elif _on == Elf.ShType.symtab:
1198
+ self._raw__m_body = io.read_bytes(self.len_body)
1199
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1200
+ self._m_body = Elf.EndianElf.DynsymSection(_io__raw__m_body, self, self._root, self._is_le)
1201
+ self._m_body._read()
1202
+ elif _on == Elf.ShType.strtab:
1203
+ self._raw__m_body = io.read_bytes(self.len_body)
1204
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1205
+ self._m_body = Elf.EndianElf.StringsStruct(_io__raw__m_body, self, self._root, self._is_le)
1206
+ self._m_body._read()
1207
+ elif _on == Elf.ShType.dynamic:
1208
+ self._raw__m_body = io.read_bytes(self.len_body)
1209
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1210
+ self._m_body = Elf.EndianElf.DynamicSection(_io__raw__m_body, self, self._root, self._is_le)
1211
+ self._m_body._read()
1212
+ elif _on == Elf.ShType.dynsym:
1213
+ self._raw__m_body = io.read_bytes(self.len_body)
1214
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1215
+ self._m_body = Elf.EndianElf.DynsymSection(_io__raw__m_body, self, self._root, self._is_le)
1216
+ self._m_body._read()
1217
+ elif _on == Elf.ShType.rela:
1218
+ self._raw__m_body = io.read_bytes(self.len_body)
1219
+ _io__raw__m_body = KaitaiStream(BytesIO(self._raw__m_body))
1220
+ self._m_body = Elf.EndianElf.RelocationSection(True, _io__raw__m_body, self, self._root, self._is_le)
1221
+ self._m_body._read()
1222
+ else:
1223
+ self._m_body = io.read_bytes(self.len_body)
1224
+ self._debug['_m_body']['end'] = io.pos()
1225
+ io.seek(_pos)
1226
+
1227
+ return self._m_body if hasattr(self, '_m_body') else None
1228
+
1229
+ @property
1230
+ def linked_section(self):
1231
+ """may reference a later section header, so don't try to access too early (use only lazy `instances`).
1232
+
1233
+ .. seealso::
1234
+ Source - https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.sheader.html#sh_link
1235
+ """
1236
+ if hasattr(self, '_m_linked_section'):
1237
+ return self._m_linked_section if hasattr(self, '_m_linked_section') else None
1238
+
1239
+ if ((self.linked_section_idx != Elf.SectionHeaderIdxSpecial.undefined.value) and (self.linked_section_idx < self._root.header.qty_section_header)) :
1240
+ self._m_linked_section = self._root.header.section_headers[self.linked_section_idx]
1241
+
1242
+ return self._m_linked_section if hasattr(self, '_m_linked_section') else None
1243
+
1244
+ @property
1245
+ def name(self):
1246
+ if hasattr(self, '_m_name'):
1247
+ return self._m_name if hasattr(self, '_m_name') else None
1248
+
1249
+ io = self._root.header.section_names._io
1250
+ _pos = io.pos()
1251
+ io.seek(self.ofs_name)
1252
+ self._debug['_m_name']['start'] = io.pos()
1253
+ if self._is_le:
1254
+ self._m_name = (io.read_bytes_term(0, False, True, True)).decode(u"ASCII")
1255
+ else:
1256
+ self._m_name = (io.read_bytes_term(0, False, True, True)).decode(u"ASCII")
1257
+ self._debug['_m_name']['end'] = io.pos()
1258
+ io.seek(_pos)
1259
+ return self._m_name if hasattr(self, '_m_name') else None
1260
+
1261
+ @property
1262
+ def flags_obj(self):
1263
+ if hasattr(self, '_m_flags_obj'):
1264
+ return self._m_flags_obj if hasattr(self, '_m_flags_obj') else None
1265
+
1266
+ self._debug['_m_flags_obj']['start'] = self._io.pos()
1267
+ if self._is_le:
1268
+ self._m_flags_obj = Elf.SectionHeaderFlags(self.flags, self._io, self, self._root)
1269
+ self._m_flags_obj._read()
1270
+ else:
1271
+ self._m_flags_obj = Elf.SectionHeaderFlags(self.flags, self._io, self, self._root)
1272
+ self._m_flags_obj._read()
1273
+ self._debug['_m_flags_obj']['end'] = self._io.pos()
1274
+ return self._m_flags_obj if hasattr(self, '_m_flags_obj') else None
1275
+
1276
+
1277
+ class RelocationSection(KaitaiStruct):
1278
+ """
1279
+ .. seealso::
1280
+ Source - https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/linkers-libraries/relocation-sections.html
1281
+
1282
+
1283
+ .. seealso::
1284
+ Source - https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.reloc.html
1285
+ """
1286
+ SEQ_FIELDS = ["entries"]
1287
+ def __init__(self, has_addend, _io, _parent=None, _root=None, _is_le=None):
1288
+ self._io = _io
1289
+ self._parent = _parent
1290
+ self._root = _root if _root else self
1291
+ self._is_le = _is_le
1292
+ self.has_addend = has_addend
1293
+ self._debug = collections.defaultdict(dict)
1294
+
1295
+ def _read(self):
1296
+ if not hasattr(self, '_is_le'):
1297
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/relocation_section")
1298
+ elif self._is_le == True:
1299
+ self._read_le()
1300
+ elif self._is_le == False:
1301
+ self._read_be()
1302
+
1303
+ def _read_le(self):
1304
+ self._debug['entries']['start'] = self._io.pos()
1305
+ self.entries = []
1306
+ i = 0
1307
+ while not self._io.is_eof():
1308
+ if not 'arr' in self._debug['entries']:
1309
+ self._debug['entries']['arr'] = []
1310
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1311
+ _t_entries = Elf.EndianElf.RelocationSectionEntry(self._io, self, self._root, self._is_le)
1312
+ _t_entries._read()
1313
+ self.entries.append(_t_entries)
1314
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1315
+ i += 1
1316
+
1317
+ self._debug['entries']['end'] = self._io.pos()
1318
+
1319
+ def _read_be(self):
1320
+ self._debug['entries']['start'] = self._io.pos()
1321
+ self.entries = []
1322
+ i = 0
1323
+ while not self._io.is_eof():
1324
+ if not 'arr' in self._debug['entries']:
1325
+ self._debug['entries']['arr'] = []
1326
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1327
+ _t_entries = Elf.EndianElf.RelocationSectionEntry(self._io, self, self._root, self._is_le)
1328
+ _t_entries._read()
1329
+ self.entries.append(_t_entries)
1330
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1331
+ i += 1
1332
+
1333
+ self._debug['entries']['end'] = self._io.pos()
1334
+
1335
+
1336
+ class DynamicSection(KaitaiStruct):
1337
+ SEQ_FIELDS = ["entries"]
1338
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
1339
+ self._io = _io
1340
+ self._parent = _parent
1341
+ self._root = _root if _root else self
1342
+ self._is_le = _is_le
1343
+ self._debug = collections.defaultdict(dict)
1344
+
1345
+ def _read(self):
1346
+ if not hasattr(self, '_is_le'):
1347
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/dynamic_section")
1348
+ elif self._is_le == True:
1349
+ self._read_le()
1350
+ elif self._is_le == False:
1351
+ self._read_be()
1352
+
1353
+ def _read_le(self):
1354
+ self._debug['entries']['start'] = self._io.pos()
1355
+ self.entries = []
1356
+ i = 0
1357
+ while not self._io.is_eof():
1358
+ if not 'arr' in self._debug['entries']:
1359
+ self._debug['entries']['arr'] = []
1360
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1361
+ _t_entries = Elf.EndianElf.DynamicSectionEntry(self._io, self, self._root, self._is_le)
1362
+ _t_entries._read()
1363
+ self.entries.append(_t_entries)
1364
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1365
+ i += 1
1366
+
1367
+ self._debug['entries']['end'] = self._io.pos()
1368
+
1369
+ def _read_be(self):
1370
+ self._debug['entries']['start'] = self._io.pos()
1371
+ self.entries = []
1372
+ i = 0
1373
+ while not self._io.is_eof():
1374
+ if not 'arr' in self._debug['entries']:
1375
+ self._debug['entries']['arr'] = []
1376
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1377
+ _t_entries = Elf.EndianElf.DynamicSectionEntry(self._io, self, self._root, self._is_le)
1378
+ _t_entries._read()
1379
+ self.entries.append(_t_entries)
1380
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1381
+ i += 1
1382
+
1383
+ self._debug['entries']['end'] = self._io.pos()
1384
+
1385
+ @property
1386
+ def is_string_table_linked(self):
1387
+ if hasattr(self, '_m_is_string_table_linked'):
1388
+ return self._m_is_string_table_linked if hasattr(self, '_m_is_string_table_linked') else None
1389
+
1390
+ self._m_is_string_table_linked = self._parent.linked_section.type == Elf.ShType.strtab
1391
+ return self._m_is_string_table_linked if hasattr(self, '_m_is_string_table_linked') else None
1392
+
1393
+
1394
+ class DynsymSection(KaitaiStruct):
1395
+ SEQ_FIELDS = ["entries"]
1396
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
1397
+ self._io = _io
1398
+ self._parent = _parent
1399
+ self._root = _root if _root else self
1400
+ self._is_le = _is_le
1401
+ self._debug = collections.defaultdict(dict)
1402
+
1403
+ def _read(self):
1404
+ if not hasattr(self, '_is_le'):
1405
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/dynsym_section")
1406
+ elif self._is_le == True:
1407
+ self._read_le()
1408
+ elif self._is_le == False:
1409
+ self._read_be()
1410
+
1411
+ def _read_le(self):
1412
+ self._debug['entries']['start'] = self._io.pos()
1413
+ self.entries = []
1414
+ i = 0
1415
+ while not self._io.is_eof():
1416
+ if not 'arr' in self._debug['entries']:
1417
+ self._debug['entries']['arr'] = []
1418
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1419
+ _t_entries = Elf.EndianElf.DynsymSectionEntry(self._io, self, self._root, self._is_le)
1420
+ _t_entries._read()
1421
+ self.entries.append(_t_entries)
1422
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1423
+ i += 1
1424
+
1425
+ self._debug['entries']['end'] = self._io.pos()
1426
+
1427
+ def _read_be(self):
1428
+ self._debug['entries']['start'] = self._io.pos()
1429
+ self.entries = []
1430
+ i = 0
1431
+ while not self._io.is_eof():
1432
+ if not 'arr' in self._debug['entries']:
1433
+ self._debug['entries']['arr'] = []
1434
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1435
+ _t_entries = Elf.EndianElf.DynsymSectionEntry(self._io, self, self._root, self._is_le)
1436
+ _t_entries._read()
1437
+ self.entries.append(_t_entries)
1438
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1439
+ i += 1
1440
+
1441
+ self._debug['entries']['end'] = self._io.pos()
1442
+
1443
+ @property
1444
+ def is_string_table_linked(self):
1445
+ if hasattr(self, '_m_is_string_table_linked'):
1446
+ return self._m_is_string_table_linked if hasattr(self, '_m_is_string_table_linked') else None
1447
+
1448
+ self._m_is_string_table_linked = self._parent.linked_section.type == Elf.ShType.strtab
1449
+ return self._m_is_string_table_linked if hasattr(self, '_m_is_string_table_linked') else None
1450
+
1451
+
1452
+ class RelocationSectionEntry(KaitaiStruct):
1453
+ SEQ_FIELDS = ["offset", "info", "addend"]
1454
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
1455
+ self._io = _io
1456
+ self._parent = _parent
1457
+ self._root = _root if _root else self
1458
+ self._is_le = _is_le
1459
+ self._debug = collections.defaultdict(dict)
1460
+
1461
+ def _read(self):
1462
+ if not hasattr(self, '_is_le'):
1463
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/relocation_section_entry")
1464
+ elif self._is_le == True:
1465
+ self._read_le()
1466
+ elif self._is_le == False:
1467
+ self._read_be()
1468
+
1469
+ def _read_le(self):
1470
+ self._debug['offset']['start'] = self._io.pos()
1471
+ _on = self._root.bits
1472
+ if _on == Elf.Bits.b32:
1473
+ self.offset = self._io.read_u4le()
1474
+ elif _on == Elf.Bits.b64:
1475
+ self.offset = self._io.read_u8le()
1476
+ self._debug['offset']['end'] = self._io.pos()
1477
+ self._debug['info']['start'] = self._io.pos()
1478
+ _on = self._root.bits
1479
+ if _on == Elf.Bits.b32:
1480
+ self.info = self._io.read_u4le()
1481
+ elif _on == Elf.Bits.b64:
1482
+ self.info = self._io.read_u8le()
1483
+ self._debug['info']['end'] = self._io.pos()
1484
+ if self._parent.has_addend:
1485
+ self._debug['addend']['start'] = self._io.pos()
1486
+ _on = self._root.bits
1487
+ if _on == Elf.Bits.b32:
1488
+ self.addend = self._io.read_s4le()
1489
+ elif _on == Elf.Bits.b64:
1490
+ self.addend = self._io.read_s8le()
1491
+ self._debug['addend']['end'] = self._io.pos()
1492
+
1493
+
1494
+ def _read_be(self):
1495
+ self._debug['offset']['start'] = self._io.pos()
1496
+ _on = self._root.bits
1497
+ if _on == Elf.Bits.b32:
1498
+ self.offset = self._io.read_u4be()
1499
+ elif _on == Elf.Bits.b64:
1500
+ self.offset = self._io.read_u8be()
1501
+ self._debug['offset']['end'] = self._io.pos()
1502
+ self._debug['info']['start'] = self._io.pos()
1503
+ _on = self._root.bits
1504
+ if _on == Elf.Bits.b32:
1505
+ self.info = self._io.read_u4be()
1506
+ elif _on == Elf.Bits.b64:
1507
+ self.info = self._io.read_u8be()
1508
+ self._debug['info']['end'] = self._io.pos()
1509
+ if self._parent.has_addend:
1510
+ self._debug['addend']['start'] = self._io.pos()
1511
+ _on = self._root.bits
1512
+ if _on == Elf.Bits.b32:
1513
+ self.addend = self._io.read_s4be()
1514
+ elif _on == Elf.Bits.b64:
1515
+ self.addend = self._io.read_s8be()
1516
+ self._debug['addend']['end'] = self._io.pos()
1517
+
1518
+
1519
+
1520
+ class DynsymSectionEntry(KaitaiStruct):
1521
+ """
1522
+ .. seealso::
1523
+ Source - https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/linkers-libraries/symbol-table-section.html
1524
+
1525
+
1526
+ .. seealso::
1527
+ Source - https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.symtab.html
1528
+ """
1529
+ SEQ_FIELDS = ["ofs_name", "value_b32", "size_b32", "bind", "type", "other", "sh_idx", "value_b64", "size_b64"]
1530
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
1531
+ self._io = _io
1532
+ self._parent = _parent
1533
+ self._root = _root if _root else self
1534
+ self._is_le = _is_le
1535
+ self._debug = collections.defaultdict(dict)
1536
+
1537
+ def _read(self):
1538
+ if not hasattr(self, '_is_le'):
1539
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/dynsym_section_entry")
1540
+ elif self._is_le == True:
1541
+ self._read_le()
1542
+ elif self._is_le == False:
1543
+ self._read_be()
1544
+
1545
+ def _read_le(self):
1546
+ self._debug['ofs_name']['start'] = self._io.pos()
1547
+ self.ofs_name = self._io.read_u4le()
1548
+ self._debug['ofs_name']['end'] = self._io.pos()
1549
+ if self._root.bits == Elf.Bits.b32:
1550
+ self._debug['value_b32']['start'] = self._io.pos()
1551
+ self.value_b32 = self._io.read_u4le()
1552
+ self._debug['value_b32']['end'] = self._io.pos()
1553
+
1554
+ if self._root.bits == Elf.Bits.b32:
1555
+ self._debug['size_b32']['start'] = self._io.pos()
1556
+ self.size_b32 = self._io.read_u4le()
1557
+ self._debug['size_b32']['end'] = self._io.pos()
1558
+
1559
+ self._debug['bind']['start'] = self._io.pos()
1560
+ self.bind = KaitaiStream.resolve_enum(Elf.SymbolBinding, self._io.read_bits_int_be(4))
1561
+ self._debug['bind']['end'] = self._io.pos()
1562
+ self._debug['type']['start'] = self._io.pos()
1563
+ self.type = KaitaiStream.resolve_enum(Elf.SymbolType, self._io.read_bits_int_be(4))
1564
+ self._debug['type']['end'] = self._io.pos()
1565
+ self._io.align_to_byte()
1566
+ self._debug['other']['start'] = self._io.pos()
1567
+ self.other = self._io.read_u1()
1568
+ self._debug['other']['end'] = self._io.pos()
1569
+ self._debug['sh_idx']['start'] = self._io.pos()
1570
+ self.sh_idx = self._io.read_u2le()
1571
+ self._debug['sh_idx']['end'] = self._io.pos()
1572
+ if self._root.bits == Elf.Bits.b64:
1573
+ self._debug['value_b64']['start'] = self._io.pos()
1574
+ self.value_b64 = self._io.read_u8le()
1575
+ self._debug['value_b64']['end'] = self._io.pos()
1576
+
1577
+ if self._root.bits == Elf.Bits.b64:
1578
+ self._debug['size_b64']['start'] = self._io.pos()
1579
+ self.size_b64 = self._io.read_u8le()
1580
+ self._debug['size_b64']['end'] = self._io.pos()
1581
+
1582
+
1583
+ def _read_be(self):
1584
+ self._debug['ofs_name']['start'] = self._io.pos()
1585
+ self.ofs_name = self._io.read_u4be()
1586
+ self._debug['ofs_name']['end'] = self._io.pos()
1587
+ if self._root.bits == Elf.Bits.b32:
1588
+ self._debug['value_b32']['start'] = self._io.pos()
1589
+ self.value_b32 = self._io.read_u4be()
1590
+ self._debug['value_b32']['end'] = self._io.pos()
1591
+
1592
+ if self._root.bits == Elf.Bits.b32:
1593
+ self._debug['size_b32']['start'] = self._io.pos()
1594
+ self.size_b32 = self._io.read_u4be()
1595
+ self._debug['size_b32']['end'] = self._io.pos()
1596
+
1597
+ self._debug['bind']['start'] = self._io.pos()
1598
+ self.bind = KaitaiStream.resolve_enum(Elf.SymbolBinding, self._io.read_bits_int_be(4))
1599
+ self._debug['bind']['end'] = self._io.pos()
1600
+ self._debug['type']['start'] = self._io.pos()
1601
+ self.type = KaitaiStream.resolve_enum(Elf.SymbolType, self._io.read_bits_int_be(4))
1602
+ self._debug['type']['end'] = self._io.pos()
1603
+ self._io.align_to_byte()
1604
+ self._debug['other']['start'] = self._io.pos()
1605
+ self.other = self._io.read_u1()
1606
+ self._debug['other']['end'] = self._io.pos()
1607
+ self._debug['sh_idx']['start'] = self._io.pos()
1608
+ self.sh_idx = self._io.read_u2be()
1609
+ self._debug['sh_idx']['end'] = self._io.pos()
1610
+ if self._root.bits == Elf.Bits.b64:
1611
+ self._debug['value_b64']['start'] = self._io.pos()
1612
+ self.value_b64 = self._io.read_u8be()
1613
+ self._debug['value_b64']['end'] = self._io.pos()
1614
+
1615
+ if self._root.bits == Elf.Bits.b64:
1616
+ self._debug['size_b64']['start'] = self._io.pos()
1617
+ self.size_b64 = self._io.read_u8be()
1618
+ self._debug['size_b64']['end'] = self._io.pos()
1619
+
1620
+
1621
+ @property
1622
+ def is_sh_idx_reserved(self):
1623
+ if hasattr(self, '_m_is_sh_idx_reserved'):
1624
+ return self._m_is_sh_idx_reserved if hasattr(self, '_m_is_sh_idx_reserved') else None
1625
+
1626
+ self._m_is_sh_idx_reserved = ((self.sh_idx >= self._root.sh_idx_lo_reserved) and (self.sh_idx <= self._root.sh_idx_hi_reserved))
1627
+ return self._m_is_sh_idx_reserved if hasattr(self, '_m_is_sh_idx_reserved') else None
1628
+
1629
+ @property
1630
+ def is_sh_idx_os(self):
1631
+ if hasattr(self, '_m_is_sh_idx_os'):
1632
+ return self._m_is_sh_idx_os if hasattr(self, '_m_is_sh_idx_os') else None
1633
+
1634
+ self._m_is_sh_idx_os = ((self.sh_idx >= self._root.sh_idx_lo_os) and (self.sh_idx <= self._root.sh_idx_hi_os))
1635
+ return self._m_is_sh_idx_os if hasattr(self, '_m_is_sh_idx_os') else None
1636
+
1637
+ @property
1638
+ def is_sh_idx_proc(self):
1639
+ if hasattr(self, '_m_is_sh_idx_proc'):
1640
+ return self._m_is_sh_idx_proc if hasattr(self, '_m_is_sh_idx_proc') else None
1641
+
1642
+ self._m_is_sh_idx_proc = ((self.sh_idx >= self._root.sh_idx_lo_proc) and (self.sh_idx <= self._root.sh_idx_hi_proc))
1643
+ return self._m_is_sh_idx_proc if hasattr(self, '_m_is_sh_idx_proc') else None
1644
+
1645
+ @property
1646
+ def size(self):
1647
+ if hasattr(self, '_m_size'):
1648
+ return self._m_size if hasattr(self, '_m_size') else None
1649
+
1650
+ self._m_size = (self.size_b32 if self._root.bits == Elf.Bits.b32 else (self.size_b64 if self._root.bits == Elf.Bits.b64 else 0))
1651
+ return self._m_size if hasattr(self, '_m_size') else None
1652
+
1653
+ @property
1654
+ def visibility(self):
1655
+ if hasattr(self, '_m_visibility'):
1656
+ return self._m_visibility if hasattr(self, '_m_visibility') else None
1657
+
1658
+ self._m_visibility = KaitaiStream.resolve_enum(Elf.SymbolVisibility, (self.other & 3))
1659
+ return self._m_visibility if hasattr(self, '_m_visibility') else None
1660
+
1661
+ @property
1662
+ def value(self):
1663
+ if hasattr(self, '_m_value'):
1664
+ return self._m_value if hasattr(self, '_m_value') else None
1665
+
1666
+ self._m_value = (self.value_b32 if self._root.bits == Elf.Bits.b32 else (self.value_b64 if self._root.bits == Elf.Bits.b64 else 0))
1667
+ return self._m_value if hasattr(self, '_m_value') else None
1668
+
1669
+ @property
1670
+ def name(self):
1671
+ if hasattr(self, '_m_name'):
1672
+ return self._m_name if hasattr(self, '_m_name') else None
1673
+
1674
+ if ((self.ofs_name != 0) and (self._parent.is_string_table_linked)) :
1675
+ io = self._parent._parent.linked_section.body._io
1676
+ _pos = io.pos()
1677
+ io.seek(self.ofs_name)
1678
+ self._debug['_m_name']['start'] = io.pos()
1679
+ if self._is_le:
1680
+ self._m_name = (io.read_bytes_term(0, False, True, True)).decode(u"UTF-8")
1681
+ else:
1682
+ self._m_name = (io.read_bytes_term(0, False, True, True)).decode(u"UTF-8")
1683
+ self._debug['_m_name']['end'] = io.pos()
1684
+ io.seek(_pos)
1685
+
1686
+ return self._m_name if hasattr(self, '_m_name') else None
1687
+
1688
+ @property
1689
+ def sh_idx_special(self):
1690
+ if hasattr(self, '_m_sh_idx_special'):
1691
+ return self._m_sh_idx_special if hasattr(self, '_m_sh_idx_special') else None
1692
+
1693
+ self._m_sh_idx_special = KaitaiStream.resolve_enum(Elf.SectionHeaderIdxSpecial, self.sh_idx)
1694
+ return self._m_sh_idx_special if hasattr(self, '_m_sh_idx_special') else None
1695
+
1696
+
1697
+ class NoteSectionEntry(KaitaiStruct):
1698
+ """
1699
+ .. seealso::
1700
+ Source - https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/linkers-libraries/note-section.html
1701
+
1702
+
1703
+ .. seealso::
1704
+ Source - https://refspecs.linuxfoundation.org/elf/gabi4+/ch5.pheader.html#note_section
1705
+ """
1706
+ SEQ_FIELDS = ["len_name", "len_descriptor", "type", "name", "name_padding", "descriptor", "descriptor_padding"]
1707
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
1708
+ self._io = _io
1709
+ self._parent = _parent
1710
+ self._root = _root if _root else self
1711
+ self._is_le = _is_le
1712
+ self._debug = collections.defaultdict(dict)
1713
+
1714
+ def _read(self):
1715
+ if not hasattr(self, '_is_le'):
1716
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/note_section_entry")
1717
+ elif self._is_le == True:
1718
+ self._read_le()
1719
+ elif self._is_le == False:
1720
+ self._read_be()
1721
+
1722
+ def _read_le(self):
1723
+ self._debug['len_name']['start'] = self._io.pos()
1724
+ self.len_name = self._io.read_u4le()
1725
+ self._debug['len_name']['end'] = self._io.pos()
1726
+ self._debug['len_descriptor']['start'] = self._io.pos()
1727
+ self.len_descriptor = self._io.read_u4le()
1728
+ self._debug['len_descriptor']['end'] = self._io.pos()
1729
+ self._debug['type']['start'] = self._io.pos()
1730
+ self.type = self._io.read_u4le()
1731
+ self._debug['type']['end'] = self._io.pos()
1732
+ self._debug['name']['start'] = self._io.pos()
1733
+ self.name = KaitaiStream.bytes_terminate(self._io.read_bytes(self.len_name), 0, False)
1734
+ self._debug['name']['end'] = self._io.pos()
1735
+ self._debug['name_padding']['start'] = self._io.pos()
1736
+ self.name_padding = self._io.read_bytes((-(self.len_name) % 4))
1737
+ self._debug['name_padding']['end'] = self._io.pos()
1738
+ self._debug['descriptor']['start'] = self._io.pos()
1739
+ self.descriptor = self._io.read_bytes(self.len_descriptor)
1740
+ self._debug['descriptor']['end'] = self._io.pos()
1741
+ self._debug['descriptor_padding']['start'] = self._io.pos()
1742
+ self.descriptor_padding = self._io.read_bytes((-(self.len_descriptor) % 4))
1743
+ self._debug['descriptor_padding']['end'] = self._io.pos()
1744
+
1745
+ def _read_be(self):
1746
+ self._debug['len_name']['start'] = self._io.pos()
1747
+ self.len_name = self._io.read_u4be()
1748
+ self._debug['len_name']['end'] = self._io.pos()
1749
+ self._debug['len_descriptor']['start'] = self._io.pos()
1750
+ self.len_descriptor = self._io.read_u4be()
1751
+ self._debug['len_descriptor']['end'] = self._io.pos()
1752
+ self._debug['type']['start'] = self._io.pos()
1753
+ self.type = self._io.read_u4be()
1754
+ self._debug['type']['end'] = self._io.pos()
1755
+ self._debug['name']['start'] = self._io.pos()
1756
+ self.name = KaitaiStream.bytes_terminate(self._io.read_bytes(self.len_name), 0, False)
1757
+ self._debug['name']['end'] = self._io.pos()
1758
+ self._debug['name_padding']['start'] = self._io.pos()
1759
+ self.name_padding = self._io.read_bytes((-(self.len_name) % 4))
1760
+ self._debug['name_padding']['end'] = self._io.pos()
1761
+ self._debug['descriptor']['start'] = self._io.pos()
1762
+ self.descriptor = self._io.read_bytes(self.len_descriptor)
1763
+ self._debug['descriptor']['end'] = self._io.pos()
1764
+ self._debug['descriptor_padding']['start'] = self._io.pos()
1765
+ self.descriptor_padding = self._io.read_bytes((-(self.len_descriptor) % 4))
1766
+ self._debug['descriptor_padding']['end'] = self._io.pos()
1767
+
1768
+
1769
+ class StringsStruct(KaitaiStruct):
1770
+ SEQ_FIELDS = ["entries"]
1771
+ def __init__(self, _io, _parent=None, _root=None, _is_le=None):
1772
+ self._io = _io
1773
+ self._parent = _parent
1774
+ self._root = _root if _root else self
1775
+ self._is_le = _is_le
1776
+ self._debug = collections.defaultdict(dict)
1777
+
1778
+ def _read(self):
1779
+ if not hasattr(self, '_is_le'):
1780
+ raise kaitaistruct.UndecidedEndiannessError("/types/endian_elf/types/strings_struct")
1781
+ elif self._is_le == True:
1782
+ self._read_le()
1783
+ elif self._is_le == False:
1784
+ self._read_be()
1785
+
1786
+ def _read_le(self):
1787
+ self._debug['entries']['start'] = self._io.pos()
1788
+ self.entries = []
1789
+ i = 0
1790
+ while not self._io.is_eof():
1791
+ if not 'arr' in self._debug['entries']:
1792
+ self._debug['entries']['arr'] = []
1793
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1794
+ self.entries.append((self._io.read_bytes_term(0, False, True, True)).decode(u"UTF-8"))
1795
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1796
+ i += 1
1797
+
1798
+ self._debug['entries']['end'] = self._io.pos()
1799
+
1800
+ def _read_be(self):
1801
+ self._debug['entries']['start'] = self._io.pos()
1802
+ self.entries = []
1803
+ i = 0
1804
+ while not self._io.is_eof():
1805
+ if not 'arr' in self._debug['entries']:
1806
+ self._debug['entries']['arr'] = []
1807
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
1808
+ self.entries.append((self._io.read_bytes_term(0, False, True, True)).decode(u"UTF-8"))
1809
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
1810
+ i += 1
1811
+
1812
+ self._debug['entries']['end'] = self._io.pos()
1813
+
1814
+
1815
+ @property
1816
+ def program_headers(self):
1817
+ if hasattr(self, '_m_program_headers'):
1818
+ return self._m_program_headers if hasattr(self, '_m_program_headers') else None
1819
+
1820
+ _pos = self._io.pos()
1821
+ self._io.seek(self.program_header_offset)
1822
+ self._debug['_m_program_headers']['start'] = self._io.pos()
1823
+ if self._is_le:
1824
+ self._raw__m_program_headers = [None] * (self.qty_program_header)
1825
+ self._m_program_headers = [None] * (self.qty_program_header)
1826
+ for i in range(self.qty_program_header):
1827
+ if not 'arr' in self._debug['_m_program_headers']:
1828
+ self._debug['_m_program_headers']['arr'] = []
1829
+ self._debug['_m_program_headers']['arr'].append({'start': self._io.pos()})
1830
+ self._raw__m_program_headers[i] = self._io.read_bytes(self.program_header_entry_size)
1831
+ _io__raw__m_program_headers = KaitaiStream(BytesIO(self._raw__m_program_headers[i]))
1832
+ _t__m_program_headers = Elf.EndianElf.ProgramHeader(_io__raw__m_program_headers, self, self._root, self._is_le)
1833
+ _t__m_program_headers._read()
1834
+ self._m_program_headers[i] = _t__m_program_headers
1835
+ self._debug['_m_program_headers']['arr'][i]['end'] = self._io.pos()
1836
+
1837
+ else:
1838
+ self._raw__m_program_headers = [None] * (self.qty_program_header)
1839
+ self._m_program_headers = [None] * (self.qty_program_header)
1840
+ for i in range(self.qty_program_header):
1841
+ if not 'arr' in self._debug['_m_program_headers']:
1842
+ self._debug['_m_program_headers']['arr'] = []
1843
+ self._debug['_m_program_headers']['arr'].append({'start': self._io.pos()})
1844
+ self._raw__m_program_headers[i] = self._io.read_bytes(self.program_header_entry_size)
1845
+ _io__raw__m_program_headers = KaitaiStream(BytesIO(self._raw__m_program_headers[i]))
1846
+ _t__m_program_headers = Elf.EndianElf.ProgramHeader(_io__raw__m_program_headers, self, self._root, self._is_le)
1847
+ _t__m_program_headers._read()
1848
+ self._m_program_headers[i] = _t__m_program_headers
1849
+ self._debug['_m_program_headers']['arr'][i]['end'] = self._io.pos()
1850
+
1851
+ self._debug['_m_program_headers']['end'] = self._io.pos()
1852
+ self._io.seek(_pos)
1853
+ return self._m_program_headers if hasattr(self, '_m_program_headers') else None
1854
+
1855
+ @property
1856
+ def section_headers(self):
1857
+ if hasattr(self, '_m_section_headers'):
1858
+ return self._m_section_headers if hasattr(self, '_m_section_headers') else None
1859
+
1860
+ _pos = self._io.pos()
1861
+ self._io.seek(self.section_header_offset)
1862
+ self._debug['_m_section_headers']['start'] = self._io.pos()
1863
+ if self._is_le:
1864
+ self._raw__m_section_headers = [None] * (self.qty_section_header)
1865
+ self._m_section_headers = [None] * (self.qty_section_header)
1866
+ for i in range(self.qty_section_header):
1867
+ if not 'arr' in self._debug['_m_section_headers']:
1868
+ self._debug['_m_section_headers']['arr'] = []
1869
+ self._debug['_m_section_headers']['arr'].append({'start': self._io.pos()})
1870
+ self._raw__m_section_headers[i] = self._io.read_bytes(self.section_header_entry_size)
1871
+ _io__raw__m_section_headers = KaitaiStream(BytesIO(self._raw__m_section_headers[i]))
1872
+ _t__m_section_headers = Elf.EndianElf.SectionHeader(_io__raw__m_section_headers, self, self._root, self._is_le)
1873
+ _t__m_section_headers._read()
1874
+ self._m_section_headers[i] = _t__m_section_headers
1875
+ self._debug['_m_section_headers']['arr'][i]['end'] = self._io.pos()
1876
+
1877
+ else:
1878
+ self._raw__m_section_headers = [None] * (self.qty_section_header)
1879
+ self._m_section_headers = [None] * (self.qty_section_header)
1880
+ for i in range(self.qty_section_header):
1881
+ if not 'arr' in self._debug['_m_section_headers']:
1882
+ self._debug['_m_section_headers']['arr'] = []
1883
+ self._debug['_m_section_headers']['arr'].append({'start': self._io.pos()})
1884
+ self._raw__m_section_headers[i] = self._io.read_bytes(self.section_header_entry_size)
1885
+ _io__raw__m_section_headers = KaitaiStream(BytesIO(self._raw__m_section_headers[i]))
1886
+ _t__m_section_headers = Elf.EndianElf.SectionHeader(_io__raw__m_section_headers, self, self._root, self._is_le)
1887
+ _t__m_section_headers._read()
1888
+ self._m_section_headers[i] = _t__m_section_headers
1889
+ self._debug['_m_section_headers']['arr'][i]['end'] = self._io.pos()
1890
+
1891
+ self._debug['_m_section_headers']['end'] = self._io.pos()
1892
+ self._io.seek(_pos)
1893
+ return self._m_section_headers if hasattr(self, '_m_section_headers') else None
1894
+
1895
+ @property
1896
+ def section_names(self):
1897
+ if hasattr(self, '_m_section_names'):
1898
+ return self._m_section_names if hasattr(self, '_m_section_names') else None
1899
+
1900
+ if ((self.section_names_idx != Elf.SectionHeaderIdxSpecial.undefined.value) and (self.section_names_idx < self._root.header.qty_section_header)) :
1901
+ _pos = self._io.pos()
1902
+ self._io.seek(self.section_headers[self.section_names_idx].ofs_body)
1903
+ self._debug['_m_section_names']['start'] = self._io.pos()
1904
+ if self._is_le:
1905
+ self._raw__m_section_names = self._io.read_bytes(self.section_headers[self.section_names_idx].len_body)
1906
+ _io__raw__m_section_names = KaitaiStream(BytesIO(self._raw__m_section_names))
1907
+ self._m_section_names = Elf.EndianElf.StringsStruct(_io__raw__m_section_names, self, self._root, self._is_le)
1908
+ self._m_section_names._read()
1909
+ else:
1910
+ self._raw__m_section_names = self._io.read_bytes(self.section_headers[self.section_names_idx].len_body)
1911
+ _io__raw__m_section_names = KaitaiStream(BytesIO(self._raw__m_section_names))
1912
+ self._m_section_names = Elf.EndianElf.StringsStruct(_io__raw__m_section_names, self, self._root, self._is_le)
1913
+ self._m_section_names._read()
1914
+ self._debug['_m_section_names']['end'] = self._io.pos()
1915
+ self._io.seek(_pos)
1916
+
1917
+ return self._m_section_names if hasattr(self, '_m_section_names') else None
1918
+
1919
+
1920
+ class DtFlag1Values(KaitaiStruct):
1921
+ SEQ_FIELDS = []
1922
+ def __init__(self, value, _io, _parent=None, _root=None):
1923
+ self._io = _io
1924
+ self._parent = _parent
1925
+ self._root = _root if _root else self
1926
+ self.value = value
1927
+ self._debug = collections.defaultdict(dict)
1928
+
1929
+ def _read(self):
1930
+ pass
1931
+
1932
+ @property
1933
+ def singleton(self):
1934
+ """Singleton symbols are used."""
1935
+ if hasattr(self, '_m_singleton'):
1936
+ return self._m_singleton if hasattr(self, '_m_singleton') else None
1937
+
1938
+ self._m_singleton = (self.value & 33554432) != 0
1939
+ return self._m_singleton if hasattr(self, '_m_singleton') else None
1940
+
1941
+ @property
1942
+ def ignmuldef(self):
1943
+ if hasattr(self, '_m_ignmuldef'):
1944
+ return self._m_ignmuldef if hasattr(self, '_m_ignmuldef') else None
1945
+
1946
+ self._m_ignmuldef = (self.value & 262144) != 0
1947
+ return self._m_ignmuldef if hasattr(self, '_m_ignmuldef') else None
1948
+
1949
+ @property
1950
+ def loadfltr(self):
1951
+ """Trigger filtee loading at runtime."""
1952
+ if hasattr(self, '_m_loadfltr'):
1953
+ return self._m_loadfltr if hasattr(self, '_m_loadfltr') else None
1954
+
1955
+ self._m_loadfltr = (self.value & 16) != 0
1956
+ return self._m_loadfltr if hasattr(self, '_m_loadfltr') else None
1957
+
1958
+ @property
1959
+ def initfirst(self):
1960
+ """Set RTLD_INITFIRST for this object."""
1961
+ if hasattr(self, '_m_initfirst'):
1962
+ return self._m_initfirst if hasattr(self, '_m_initfirst') else None
1963
+
1964
+ self._m_initfirst = (self.value & 32) != 0
1965
+ return self._m_initfirst if hasattr(self, '_m_initfirst') else None
1966
+
1967
+ @property
1968
+ def symintpose(self):
1969
+ """Object has individual interposers."""
1970
+ if hasattr(self, '_m_symintpose'):
1971
+ return self._m_symintpose if hasattr(self, '_m_symintpose') else None
1972
+
1973
+ self._m_symintpose = (self.value & 8388608) != 0
1974
+ return self._m_symintpose if hasattr(self, '_m_symintpose') else None
1975
+
1976
+ @property
1977
+ def noreloc(self):
1978
+ if hasattr(self, '_m_noreloc'):
1979
+ return self._m_noreloc if hasattr(self, '_m_noreloc') else None
1980
+
1981
+ self._m_noreloc = (self.value & 4194304) != 0
1982
+ return self._m_noreloc if hasattr(self, '_m_noreloc') else None
1983
+
1984
+ @property
1985
+ def confalt(self):
1986
+ """Configuration alternative created."""
1987
+ if hasattr(self, '_m_confalt'):
1988
+ return self._m_confalt if hasattr(self, '_m_confalt') else None
1989
+
1990
+ self._m_confalt = (self.value & 8192) != 0
1991
+ return self._m_confalt if hasattr(self, '_m_confalt') else None
1992
+
1993
+ @property
1994
+ def dispreldne(self):
1995
+ """Disp reloc applied at build time."""
1996
+ if hasattr(self, '_m_dispreldne'):
1997
+ return self._m_dispreldne if hasattr(self, '_m_dispreldne') else None
1998
+
1999
+ self._m_dispreldne = (self.value & 32768) != 0
2000
+ return self._m_dispreldne if hasattr(self, '_m_dispreldne') else None
2001
+
2002
+ @property
2003
+ def rtld_global(self):
2004
+ """Set RTLD_GLOBAL for this object."""
2005
+ if hasattr(self, '_m_rtld_global'):
2006
+ return self._m_rtld_global if hasattr(self, '_m_rtld_global') else None
2007
+
2008
+ self._m_rtld_global = (self.value & 2) != 0
2009
+ return self._m_rtld_global if hasattr(self, '_m_rtld_global') else None
2010
+
2011
+ @property
2012
+ def nodelete(self):
2013
+ """Set RTLD_NODELETE for this object."""
2014
+ if hasattr(self, '_m_nodelete'):
2015
+ return self._m_nodelete if hasattr(self, '_m_nodelete') else None
2016
+
2017
+ self._m_nodelete = (self.value & 8) != 0
2018
+ return self._m_nodelete if hasattr(self, '_m_nodelete') else None
2019
+
2020
+ @property
2021
+ def trans(self):
2022
+ if hasattr(self, '_m_trans'):
2023
+ return self._m_trans if hasattr(self, '_m_trans') else None
2024
+
2025
+ self._m_trans = (self.value & 512) != 0
2026
+ return self._m_trans if hasattr(self, '_m_trans') else None
2027
+
2028
+ @property
2029
+ def origin(self):
2030
+ """$ORIGIN must be handled."""
2031
+ if hasattr(self, '_m_origin'):
2032
+ return self._m_origin if hasattr(self, '_m_origin') else None
2033
+
2034
+ self._m_origin = (self.value & 128) != 0
2035
+ return self._m_origin if hasattr(self, '_m_origin') else None
2036
+
2037
+ @property
2038
+ def now(self):
2039
+ """Set RTLD_NOW for this object."""
2040
+ if hasattr(self, '_m_now'):
2041
+ return self._m_now if hasattr(self, '_m_now') else None
2042
+
2043
+ self._m_now = (self.value & 1) != 0
2044
+ return self._m_now if hasattr(self, '_m_now') else None
2045
+
2046
+ @property
2047
+ def nohdr(self):
2048
+ if hasattr(self, '_m_nohdr'):
2049
+ return self._m_nohdr if hasattr(self, '_m_nohdr') else None
2050
+
2051
+ self._m_nohdr = (self.value & 1048576) != 0
2052
+ return self._m_nohdr if hasattr(self, '_m_nohdr') else None
2053
+
2054
+ @property
2055
+ def endfiltee(self):
2056
+ """Filtee terminates filters search."""
2057
+ if hasattr(self, '_m_endfiltee'):
2058
+ return self._m_endfiltee if hasattr(self, '_m_endfiltee') else None
2059
+
2060
+ self._m_endfiltee = (self.value & 16384) != 0
2061
+ return self._m_endfiltee if hasattr(self, '_m_endfiltee') else None
2062
+
2063
+ @property
2064
+ def nodirect(self):
2065
+ """Object has no-direct binding."""
2066
+ if hasattr(self, '_m_nodirect'):
2067
+ return self._m_nodirect if hasattr(self, '_m_nodirect') else None
2068
+
2069
+ self._m_nodirect = (self.value & 131072) != 0
2070
+ return self._m_nodirect if hasattr(self, '_m_nodirect') else None
2071
+
2072
+ @property
2073
+ def globaudit(self):
2074
+ """Global auditing required."""
2075
+ if hasattr(self, '_m_globaudit'):
2076
+ return self._m_globaudit if hasattr(self, '_m_globaudit') else None
2077
+
2078
+ self._m_globaudit = (self.value & 16777216) != 0
2079
+ return self._m_globaudit if hasattr(self, '_m_globaudit') else None
2080
+
2081
+ @property
2082
+ def noksyms(self):
2083
+ if hasattr(self, '_m_noksyms'):
2084
+ return self._m_noksyms if hasattr(self, '_m_noksyms') else None
2085
+
2086
+ self._m_noksyms = (self.value & 524288) != 0
2087
+ return self._m_noksyms if hasattr(self, '_m_noksyms') else None
2088
+
2089
+ @property
2090
+ def interpose(self):
2091
+ """Object is used to interpose."""
2092
+ if hasattr(self, '_m_interpose'):
2093
+ return self._m_interpose if hasattr(self, '_m_interpose') else None
2094
+
2095
+ self._m_interpose = (self.value & 1024) != 0
2096
+ return self._m_interpose if hasattr(self, '_m_interpose') else None
2097
+
2098
+ @property
2099
+ def nodump(self):
2100
+ """Object can't be dldump'ed."""
2101
+ if hasattr(self, '_m_nodump'):
2102
+ return self._m_nodump if hasattr(self, '_m_nodump') else None
2103
+
2104
+ self._m_nodump = (self.value & 4096) != 0
2105
+ return self._m_nodump if hasattr(self, '_m_nodump') else None
2106
+
2107
+ @property
2108
+ def disprelpnd(self):
2109
+ """Disp reloc applied at run-time."""
2110
+ if hasattr(self, '_m_disprelpnd'):
2111
+ return self._m_disprelpnd if hasattr(self, '_m_disprelpnd') else None
2112
+
2113
+ self._m_disprelpnd = (self.value & 65536) != 0
2114
+ return self._m_disprelpnd if hasattr(self, '_m_disprelpnd') else None
2115
+
2116
+ @property
2117
+ def noopen(self):
2118
+ """Set RTLD_NOOPEN for this object."""
2119
+ if hasattr(self, '_m_noopen'):
2120
+ return self._m_noopen if hasattr(self, '_m_noopen') else None
2121
+
2122
+ self._m_noopen = (self.value & 64) != 0
2123
+ return self._m_noopen if hasattr(self, '_m_noopen') else None
2124
+
2125
+ @property
2126
+ def stub(self):
2127
+ if hasattr(self, '_m_stub'):
2128
+ return self._m_stub if hasattr(self, '_m_stub') else None
2129
+
2130
+ self._m_stub = (self.value & 67108864) != 0
2131
+ return self._m_stub if hasattr(self, '_m_stub') else None
2132
+
2133
+ @property
2134
+ def direct(self):
2135
+ """Direct binding enabled."""
2136
+ if hasattr(self, '_m_direct'):
2137
+ return self._m_direct if hasattr(self, '_m_direct') else None
2138
+
2139
+ self._m_direct = (self.value & 256) != 0
2140
+ return self._m_direct if hasattr(self, '_m_direct') else None
2141
+
2142
+ @property
2143
+ def edited(self):
2144
+ """Object is modified after built."""
2145
+ if hasattr(self, '_m_edited'):
2146
+ return self._m_edited if hasattr(self, '_m_edited') else None
2147
+
2148
+ self._m_edited = (self.value & 2097152) != 0
2149
+ return self._m_edited if hasattr(self, '_m_edited') else None
2150
+
2151
+ @property
2152
+ def group(self):
2153
+ """Set RTLD_GROUP for this object."""
2154
+ if hasattr(self, '_m_group'):
2155
+ return self._m_group if hasattr(self, '_m_group') else None
2156
+
2157
+ self._m_group = (self.value & 4) != 0
2158
+ return self._m_group if hasattr(self, '_m_group') else None
2159
+
2160
+ @property
2161
+ def pie(self):
2162
+ if hasattr(self, '_m_pie'):
2163
+ return self._m_pie if hasattr(self, '_m_pie') else None
2164
+
2165
+ self._m_pie = (self.value & 134217728) != 0
2166
+ return self._m_pie if hasattr(self, '_m_pie') else None
2167
+
2168
+ @property
2169
+ def nodeflib(self):
2170
+ """Ignore default lib search path."""
2171
+ if hasattr(self, '_m_nodeflib'):
2172
+ return self._m_nodeflib if hasattr(self, '_m_nodeflib') else None
2173
+
2174
+ self._m_nodeflib = (self.value & 2048) != 0
2175
+ return self._m_nodeflib if hasattr(self, '_m_nodeflib') else None
2176
+
2177
+
2178
+ class SectionHeaderFlags(KaitaiStruct):
2179
+ SEQ_FIELDS = []
2180
+ def __init__(self, value, _io, _parent=None, _root=None):
2181
+ self._io = _io
2182
+ self._parent = _parent
2183
+ self._root = _root if _root else self
2184
+ self.value = value
2185
+ self._debug = collections.defaultdict(dict)
2186
+
2187
+ def _read(self):
2188
+ pass
2189
+
2190
+ @property
2191
+ def merge(self):
2192
+ """might be merged."""
2193
+ if hasattr(self, '_m_merge'):
2194
+ return self._m_merge if hasattr(self, '_m_merge') else None
2195
+
2196
+ self._m_merge = (self.value & 16) != 0
2197
+ return self._m_merge if hasattr(self, '_m_merge') else None
2198
+
2199
+ @property
2200
+ def mask_os(self):
2201
+ """OS-specific."""
2202
+ if hasattr(self, '_m_mask_os'):
2203
+ return self._m_mask_os if hasattr(self, '_m_mask_os') else None
2204
+
2205
+ self._m_mask_os = (self.value & 267386880) != 0
2206
+ return self._m_mask_os if hasattr(self, '_m_mask_os') else None
2207
+
2208
+ @property
2209
+ def exclude(self):
2210
+ """section is excluded unless referenced or allocated (Solaris)."""
2211
+ if hasattr(self, '_m_exclude'):
2212
+ return self._m_exclude if hasattr(self, '_m_exclude') else None
2213
+
2214
+ self._m_exclude = (self.value & 134217728) != 0
2215
+ return self._m_exclude if hasattr(self, '_m_exclude') else None
2216
+
2217
+ @property
2218
+ def mask_proc(self):
2219
+ """Processor-specific."""
2220
+ if hasattr(self, '_m_mask_proc'):
2221
+ return self._m_mask_proc if hasattr(self, '_m_mask_proc') else None
2222
+
2223
+ self._m_mask_proc = (self.value & 4026531840) != 0
2224
+ return self._m_mask_proc if hasattr(self, '_m_mask_proc') else None
2225
+
2226
+ @property
2227
+ def strings(self):
2228
+ """contains nul-terminated strings."""
2229
+ if hasattr(self, '_m_strings'):
2230
+ return self._m_strings if hasattr(self, '_m_strings') else None
2231
+
2232
+ self._m_strings = (self.value & 32) != 0
2233
+ return self._m_strings if hasattr(self, '_m_strings') else None
2234
+
2235
+ @property
2236
+ def os_non_conforming(self):
2237
+ """non-standard OS specific handling required."""
2238
+ if hasattr(self, '_m_os_non_conforming'):
2239
+ return self._m_os_non_conforming if hasattr(self, '_m_os_non_conforming') else None
2240
+
2241
+ self._m_os_non_conforming = (self.value & 256) != 0
2242
+ return self._m_os_non_conforming if hasattr(self, '_m_os_non_conforming') else None
2243
+
2244
+ @property
2245
+ def alloc(self):
2246
+ """occupies memory during execution."""
2247
+ if hasattr(self, '_m_alloc'):
2248
+ return self._m_alloc if hasattr(self, '_m_alloc') else None
2249
+
2250
+ self._m_alloc = (self.value & 2) != 0
2251
+ return self._m_alloc if hasattr(self, '_m_alloc') else None
2252
+
2253
+ @property
2254
+ def exec_instr(self):
2255
+ """executable."""
2256
+ if hasattr(self, '_m_exec_instr'):
2257
+ return self._m_exec_instr if hasattr(self, '_m_exec_instr') else None
2258
+
2259
+ self._m_exec_instr = (self.value & 4) != 0
2260
+ return self._m_exec_instr if hasattr(self, '_m_exec_instr') else None
2261
+
2262
+ @property
2263
+ def info_link(self):
2264
+ """'sh_info' contains SHT index."""
2265
+ if hasattr(self, '_m_info_link'):
2266
+ return self._m_info_link if hasattr(self, '_m_info_link') else None
2267
+
2268
+ self._m_info_link = (self.value & 64) != 0
2269
+ return self._m_info_link if hasattr(self, '_m_info_link') else None
2270
+
2271
+ @property
2272
+ def write(self):
2273
+ """writable."""
2274
+ if hasattr(self, '_m_write'):
2275
+ return self._m_write if hasattr(self, '_m_write') else None
2276
+
2277
+ self._m_write = (self.value & 1) != 0
2278
+ return self._m_write if hasattr(self, '_m_write') else None
2279
+
2280
+ @property
2281
+ def link_order(self):
2282
+ """preserve order after combining."""
2283
+ if hasattr(self, '_m_link_order'):
2284
+ return self._m_link_order if hasattr(self, '_m_link_order') else None
2285
+
2286
+ self._m_link_order = (self.value & 128) != 0
2287
+ return self._m_link_order if hasattr(self, '_m_link_order') else None
2288
+
2289
+ @property
2290
+ def ordered(self):
2291
+ """special ordering requirement (Solaris)."""
2292
+ if hasattr(self, '_m_ordered'):
2293
+ return self._m_ordered if hasattr(self, '_m_ordered') else None
2294
+
2295
+ self._m_ordered = (self.value & 67108864) != 0
2296
+ return self._m_ordered if hasattr(self, '_m_ordered') else None
2297
+
2298
+ @property
2299
+ def tls(self):
2300
+ """section hold thread-local data."""
2301
+ if hasattr(self, '_m_tls'):
2302
+ return self._m_tls if hasattr(self, '_m_tls') else None
2303
+
2304
+ self._m_tls = (self.value & 1024) != 0
2305
+ return self._m_tls if hasattr(self, '_m_tls') else None
2306
+
2307
+ @property
2308
+ def group(self):
2309
+ """section is member of a group."""
2310
+ if hasattr(self, '_m_group'):
2311
+ return self._m_group if hasattr(self, '_m_group') else None
2312
+
2313
+ self._m_group = (self.value & 512) != 0
2314
+ return self._m_group if hasattr(self, '_m_group') else None
2315
+
2316
+
2317
+ class PhdrTypeFlags(KaitaiStruct):
2318
+ SEQ_FIELDS = []
2319
+ def __init__(self, value, _io, _parent=None, _root=None):
2320
+ self._io = _io
2321
+ self._parent = _parent
2322
+ self._root = _root if _root else self
2323
+ self.value = value
2324
+ self._debug = collections.defaultdict(dict)
2325
+
2326
+ def _read(self):
2327
+ pass
2328
+
2329
+ @property
2330
+ def read(self):
2331
+ if hasattr(self, '_m_read'):
2332
+ return self._m_read if hasattr(self, '_m_read') else None
2333
+
2334
+ self._m_read = (self.value & 4) != 0
2335
+ return self._m_read if hasattr(self, '_m_read') else None
2336
+
2337
+ @property
2338
+ def write(self):
2339
+ if hasattr(self, '_m_write'):
2340
+ return self._m_write if hasattr(self, '_m_write') else None
2341
+
2342
+ self._m_write = (self.value & 2) != 0
2343
+ return self._m_write if hasattr(self, '_m_write') else None
2344
+
2345
+ @property
2346
+ def execute(self):
2347
+ if hasattr(self, '_m_execute'):
2348
+ return self._m_execute if hasattr(self, '_m_execute') else None
2349
+
2350
+ self._m_execute = (self.value & 1) != 0
2351
+ return self._m_execute if hasattr(self, '_m_execute') else None
2352
+
2353
+ @property
2354
+ def mask_proc(self):
2355
+ if hasattr(self, '_m_mask_proc'):
2356
+ return self._m_mask_proc if hasattr(self, '_m_mask_proc') else None
2357
+
2358
+ self._m_mask_proc = (self.value & 4026531840) != 0
2359
+ return self._m_mask_proc if hasattr(self, '_m_mask_proc') else None
2360
+
2361
+
2362
+ class DtFlagValues(KaitaiStruct):
2363
+ """
2364
+ .. seealso::
2365
+ Figure 5-11: DT_FLAGS values - https://refspecs.linuxbase.org/elf/gabi4+/ch5.dynamic.html
2366
+
2367
+
2368
+ .. seealso::
2369
+ Source - https://github.com/golang/go/blob/48dfddbab3/src/debug/elf/elf.go#L1079-L1095
2370
+
2371
+
2372
+ .. seealso::
2373
+ Source - https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/linkers-libraries/dynamic-section.html#GUID-4336A69A-D905-4FCE-A398-80375A9E6464__CHAPTER7-TBL-5
2374
+ """
2375
+ SEQ_FIELDS = []
2376
+ def __init__(self, value, _io, _parent=None, _root=None):
2377
+ self._io = _io
2378
+ self._parent = _parent
2379
+ self._root = _root if _root else self
2380
+ self.value = value
2381
+ self._debug = collections.defaultdict(dict)
2382
+
2383
+ def _read(self):
2384
+ pass
2385
+
2386
+ @property
2387
+ def bind_now(self):
2388
+ """all relocations for this object must be processed before returning
2389
+ control to the program
2390
+ """
2391
+ if hasattr(self, '_m_bind_now'):
2392
+ return self._m_bind_now if hasattr(self, '_m_bind_now') else None
2393
+
2394
+ self._m_bind_now = (self.value & 8) != 0
2395
+ return self._m_bind_now if hasattr(self, '_m_bind_now') else None
2396
+
2397
+ @property
2398
+ def origin(self):
2399
+ """object may reference the $ORIGIN substitution string."""
2400
+ if hasattr(self, '_m_origin'):
2401
+ return self._m_origin if hasattr(self, '_m_origin') else None
2402
+
2403
+ self._m_origin = (self.value & 1) != 0
2404
+ return self._m_origin if hasattr(self, '_m_origin') else None
2405
+
2406
+ @property
2407
+ def textrel(self):
2408
+ """relocation entries might request modifications to a non-writable segment."""
2409
+ if hasattr(self, '_m_textrel'):
2410
+ return self._m_textrel if hasattr(self, '_m_textrel') else None
2411
+
2412
+ self._m_textrel = (self.value & 4) != 0
2413
+ return self._m_textrel if hasattr(self, '_m_textrel') else None
2414
+
2415
+ @property
2416
+ def static_tls(self):
2417
+ """object uses static thread-local storage scheme."""
2418
+ if hasattr(self, '_m_static_tls'):
2419
+ return self._m_static_tls if hasattr(self, '_m_static_tls') else None
2420
+
2421
+ self._m_static_tls = (self.value & 16) != 0
2422
+ return self._m_static_tls if hasattr(self, '_m_static_tls') else None
2423
+
2424
+ @property
2425
+ def symbolic(self):
2426
+ """symbolic linking."""
2427
+ if hasattr(self, '_m_symbolic'):
2428
+ return self._m_symbolic if hasattr(self, '_m_symbolic') else None
2429
+
2430
+ self._m_symbolic = (self.value & 2) != 0
2431
+ return self._m_symbolic if hasattr(self, '_m_symbolic') else None
2432
+
2433
+
2434
+ @property
2435
+ def sh_idx_lo_os(self):
2436
+ if hasattr(self, '_m_sh_idx_lo_os'):
2437
+ return self._m_sh_idx_lo_os if hasattr(self, '_m_sh_idx_lo_os') else None
2438
+
2439
+ self._m_sh_idx_lo_os = 65312
2440
+ return self._m_sh_idx_lo_os if hasattr(self, '_m_sh_idx_lo_os') else None
2441
+
2442
+ @property
2443
+ def sh_idx_lo_reserved(self):
2444
+ if hasattr(self, '_m_sh_idx_lo_reserved'):
2445
+ return self._m_sh_idx_lo_reserved if hasattr(self, '_m_sh_idx_lo_reserved') else None
2446
+
2447
+ self._m_sh_idx_lo_reserved = 65280
2448
+ return self._m_sh_idx_lo_reserved if hasattr(self, '_m_sh_idx_lo_reserved') else None
2449
+
2450
+ @property
2451
+ def sh_idx_hi_proc(self):
2452
+ if hasattr(self, '_m_sh_idx_hi_proc'):
2453
+ return self._m_sh_idx_hi_proc if hasattr(self, '_m_sh_idx_hi_proc') else None
2454
+
2455
+ self._m_sh_idx_hi_proc = 65311
2456
+ return self._m_sh_idx_hi_proc if hasattr(self, '_m_sh_idx_hi_proc') else None
2457
+
2458
+ @property
2459
+ def sh_idx_lo_proc(self):
2460
+ if hasattr(self, '_m_sh_idx_lo_proc'):
2461
+ return self._m_sh_idx_lo_proc if hasattr(self, '_m_sh_idx_lo_proc') else None
2462
+
2463
+ self._m_sh_idx_lo_proc = 65280
2464
+ return self._m_sh_idx_lo_proc if hasattr(self, '_m_sh_idx_lo_proc') else None
2465
+
2466
+ @property
2467
+ def sh_idx_hi_os(self):
2468
+ if hasattr(self, '_m_sh_idx_hi_os'):
2469
+ return self._m_sh_idx_hi_os if hasattr(self, '_m_sh_idx_hi_os') else None
2470
+
2471
+ self._m_sh_idx_hi_os = 65343
2472
+ return self._m_sh_idx_hi_os if hasattr(self, '_m_sh_idx_hi_os') else None
2473
+
2474
+ @property
2475
+ def sh_idx_hi_reserved(self):
2476
+ if hasattr(self, '_m_sh_idx_hi_reserved'):
2477
+ return self._m_sh_idx_hi_reserved if hasattr(self, '_m_sh_idx_hi_reserved') else None
2478
+
2479
+ self._m_sh_idx_hi_reserved = 65535
2480
+ return self._m_sh_idx_hi_reserved if hasattr(self, '_m_sh_idx_hi_reserved') else None
2481
+
2482
+