immunio 0.15.4 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (454) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +0 -27
  3. data/ext/immunio/Rakefile +9 -0
  4. data/lib/immunio/plugins/active_record.rb +1 -1
  5. data/lib/immunio/plugins/active_record_relation.rb +1 -1
  6. data/lib/immunio/plugins/environment_reporter.rb +20 -0
  7. data/lib/immunio/rufus_lua_ext/ref.rb +1 -3
  8. data/lib/immunio/version.rb +1 -1
  9. data/lib/immunio/vm.rb +1 -2
  10. data/lua-hooks/Makefile +97 -0
  11. data/lua-hooks/ext/all.c +41 -52
  12. data/lua-hooks/ext/all.o +0 -0
  13. data/lua-hooks/ext/libinjection/libinjection_html5.o +0 -0
  14. data/lua-hooks/ext/libinjection/libinjection_sqli.o +0 -0
  15. data/lua-hooks/ext/libinjection/libinjection_xss.o +0 -0
  16. data/lua-hooks/ext/libinjection/lualib.c +2 -2
  17. data/lua-hooks/ext/lpeg/lpcap.c +2 -2
  18. data/lua-hooks/ext/lpeg/lpcap.o +0 -0
  19. data/lua-hooks/ext/lpeg/lpcode.c +2 -2
  20. data/lua-hooks/ext/lpeg/lpcode.h +1 -1
  21. data/lua-hooks/ext/lpeg/lpcode.o +0 -0
  22. data/lua-hooks/ext/lpeg/lpprint.o +0 -0
  23. data/lua-hooks/ext/lpeg/lptree.c +2 -2
  24. data/lua-hooks/ext/lpeg/lptypes.h +1 -1
  25. data/lua-hooks/ext/lpeg/lpvm.c +2 -2
  26. data/lua-hooks/ext/lpeg/lpvm.o +0 -0
  27. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +16 -3
  28. data/lua-hooks/ext/lua-snapshot/snapshot.c +14 -7
  29. data/lua-hooks/ext/luajit/COPYRIGHT +56 -0
  30. data/lua-hooks/ext/luajit/Makefile +159 -0
  31. data/lua-hooks/ext/luajit/README +16 -0
  32. data/lua-hooks/ext/luajit/doc/bluequad-print.css +166 -0
  33. data/lua-hooks/ext/luajit/doc/bluequad.css +325 -0
  34. data/lua-hooks/ext/luajit/doc/changes.html +804 -0
  35. data/lua-hooks/ext/luajit/doc/contact.html +104 -0
  36. data/lua-hooks/ext/luajit/doc/ext_c_api.html +189 -0
  37. data/lua-hooks/ext/luajit/doc/ext_ffi.html +332 -0
  38. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +570 -0
  39. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +1261 -0
  40. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +603 -0
  41. data/lua-hooks/ext/luajit/doc/ext_jit.html +201 -0
  42. data/lua-hooks/ext/luajit/doc/ext_profiler.html +365 -0
  43. data/lua-hooks/ext/luajit/doc/extensions.html +448 -0
  44. data/lua-hooks/ext/luajit/doc/faq.html +186 -0
  45. data/lua-hooks/ext/luajit/doc/img/contact.png +0 -0
  46. data/lua-hooks/ext/luajit/doc/install.html +659 -0
  47. data/lua-hooks/ext/luajit/doc/luajit.html +236 -0
  48. data/lua-hooks/ext/luajit/doc/running.html +309 -0
  49. data/lua-hooks/ext/luajit/doc/status.html +118 -0
  50. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +456 -0
  51. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1125 -0
  52. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +518 -0
  53. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1166 -0
  54. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +416 -0
  55. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +953 -0
  56. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +419 -0
  57. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1919 -0
  58. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +83 -0
  59. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +12 -0
  60. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +471 -0
  61. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +1945 -0
  62. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +1094 -0
  63. data/lua-hooks/ext/luajit/etc/luajit.1 +88 -0
  64. data/lua-hooks/ext/luajit/etc/luajit.pc +25 -0
  65. data/lua-hooks/ext/luajit/src/Makefile +697 -0
  66. data/lua-hooks/ext/luajit/src/Makefile.dep +244 -0
  67. data/lua-hooks/ext/luajit/src/host/README +4 -0
  68. data/lua-hooks/ext/luajit/src/host/buildvm +0 -0
  69. data/lua-hooks/ext/luajit/src/host/buildvm.c +518 -0
  70. data/lua-hooks/ext/luajit/src/host/buildvm.h +105 -0
  71. data/lua-hooks/ext/luajit/src/host/buildvm.o +0 -0
  72. data/lua-hooks/ext/luajit/src/host/buildvm_arch.h +7449 -0
  73. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +345 -0
  74. data/lua-hooks/ext/luajit/src/host/buildvm_asm.o +0 -0
  75. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +229 -0
  76. data/lua-hooks/ext/luajit/src/host/buildvm_fold.o +0 -0
  77. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +457 -0
  78. data/lua-hooks/ext/luajit/src/host/buildvm_lib.o +0 -0
  79. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +45 -0
  80. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +368 -0
  81. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.o +0 -0
  82. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +197 -0
  83. data/lua-hooks/ext/luajit/src/host/genminilua.lua +428 -0
  84. data/lua-hooks/ext/luajit/src/host/minilua +0 -0
  85. data/lua-hooks/ext/luajit/src/host/minilua.c +7770 -0
  86. data/lua-hooks/ext/luajit/src/host/minilua.o +0 -0
  87. data/lua-hooks/ext/luajit/src/jit/bc.lua +190 -0
  88. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +661 -0
  89. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +689 -0
  90. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +428 -0
  91. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +17 -0
  92. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +591 -0
  93. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +17 -0
  94. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +838 -0
  95. data/lua-hooks/ext/luajit/src/jit/dump.lua +706 -0
  96. data/lua-hooks/ext/luajit/src/jit/p.lua +310 -0
  97. data/lua-hooks/ext/luajit/src/jit/v.lua +170 -0
  98. data/lua-hooks/ext/luajit/src/jit/vmdef.lua +362 -0
  99. data/lua-hooks/ext/luajit/src/jit/zone.lua +45 -0
  100. data/lua-hooks/ext/{lua → luajit/src}/lauxlib.h +10 -17
  101. data/lua-hooks/ext/luajit/src/lib_aux.c +356 -0
  102. data/lua-hooks/ext/luajit/src/lib_aux.o +0 -0
  103. data/lua-hooks/ext/luajit/src/lib_aux_dyn.o +0 -0
  104. data/lua-hooks/ext/luajit/src/lib_base.c +664 -0
  105. data/lua-hooks/ext/luajit/src/lib_base.o +0 -0
  106. data/lua-hooks/ext/luajit/src/lib_base_dyn.o +0 -0
  107. data/lua-hooks/ext/luajit/src/lib_bit.c +180 -0
  108. data/lua-hooks/ext/luajit/src/lib_bit.o +0 -0
  109. data/lua-hooks/ext/luajit/src/lib_bit_dyn.o +0 -0
  110. data/lua-hooks/ext/luajit/src/lib_debug.c +405 -0
  111. data/lua-hooks/ext/luajit/src/lib_debug.o +0 -0
  112. data/lua-hooks/ext/luajit/src/lib_debug_dyn.o +0 -0
  113. data/lua-hooks/ext/luajit/src/lib_ffi.c +872 -0
  114. data/lua-hooks/ext/luajit/src/lib_ffi.o +0 -0
  115. data/lua-hooks/ext/luajit/src/lib_ffi_dyn.o +0 -0
  116. data/lua-hooks/ext/luajit/src/lib_init.c +55 -0
  117. data/lua-hooks/ext/luajit/src/lib_init.o +0 -0
  118. data/lua-hooks/ext/luajit/src/lib_init_dyn.o +0 -0
  119. data/lua-hooks/ext/luajit/src/lib_io.c +541 -0
  120. data/lua-hooks/ext/luajit/src/lib_io.o +0 -0
  121. data/lua-hooks/ext/luajit/src/lib_io_dyn.o +0 -0
  122. data/lua-hooks/ext/luajit/src/lib_jit.c +767 -0
  123. data/lua-hooks/ext/luajit/src/lib_jit.o +0 -0
  124. data/lua-hooks/ext/luajit/src/lib_jit_dyn.o +0 -0
  125. data/lua-hooks/ext/luajit/src/lib_math.c +230 -0
  126. data/lua-hooks/ext/luajit/src/lib_math.o +0 -0
  127. data/lua-hooks/ext/luajit/src/lib_math_dyn.o +0 -0
  128. data/lua-hooks/ext/luajit/src/lib_os.c +292 -0
  129. data/lua-hooks/ext/luajit/src/lib_os.o +0 -0
  130. data/lua-hooks/ext/luajit/src/lib_os_dyn.o +0 -0
  131. data/lua-hooks/ext/luajit/src/lib_package.c +610 -0
  132. data/lua-hooks/ext/luajit/src/lib_package.o +0 -0
  133. data/lua-hooks/ext/luajit/src/lib_package_dyn.o +0 -0
  134. data/lua-hooks/ext/luajit/src/lib_string.c +752 -0
  135. data/lua-hooks/ext/luajit/src/lib_string.o +0 -0
  136. data/lua-hooks/ext/luajit/src/lib_string_dyn.o +0 -0
  137. data/lua-hooks/ext/luajit/src/lib_table.c +307 -0
  138. data/lua-hooks/ext/luajit/src/lib_table.o +0 -0
  139. data/lua-hooks/ext/luajit/src/lib_table_dyn.o +0 -0
  140. data/lua-hooks/ext/luajit/src/libluajit.a +0 -0
  141. data/lua-hooks/ext/luajit/src/libluajit.so +0 -0
  142. data/lua-hooks/ext/luajit/src/lj.supp +26 -0
  143. data/lua-hooks/ext/luajit/src/lj_alloc.c +1398 -0
  144. data/lua-hooks/ext/luajit/src/lj_alloc.h +17 -0
  145. data/lua-hooks/ext/luajit/src/lj_alloc.o +0 -0
  146. data/lua-hooks/ext/luajit/src/lj_alloc_dyn.o +0 -0
  147. data/lua-hooks/ext/luajit/src/lj_api.c +1210 -0
  148. data/lua-hooks/ext/luajit/src/lj_api.o +0 -0
  149. data/lua-hooks/ext/luajit/src/lj_api_dyn.o +0 -0
  150. data/lua-hooks/ext/luajit/src/lj_arch.h +509 -0
  151. data/lua-hooks/ext/luajit/src/lj_asm.c +2278 -0
  152. data/lua-hooks/ext/luajit/src/lj_asm.h +17 -0
  153. data/lua-hooks/ext/luajit/src/lj_asm.o +0 -0
  154. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +2217 -0
  155. data/lua-hooks/ext/luajit/src/lj_asm_dyn.o +0 -0
  156. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +1833 -0
  157. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +2015 -0
  158. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +2634 -0
  159. data/lua-hooks/ext/luajit/src/lj_bc.c +14 -0
  160. data/lua-hooks/ext/luajit/src/lj_bc.h +265 -0
  161. data/lua-hooks/ext/luajit/src/lj_bc.o +0 -0
  162. data/lua-hooks/ext/luajit/src/lj_bc_dyn.o +0 -0
  163. data/lua-hooks/ext/luajit/src/lj_bcdef.h +220 -0
  164. data/lua-hooks/ext/luajit/src/lj_bcdump.h +68 -0
  165. data/lua-hooks/ext/luajit/src/lj_bcread.c +457 -0
  166. data/lua-hooks/ext/luajit/src/lj_bcread.o +0 -0
  167. data/lua-hooks/ext/luajit/src/lj_bcread_dyn.o +0 -0
  168. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +361 -0
  169. data/lua-hooks/ext/luajit/src/lj_bcwrite.o +0 -0
  170. data/lua-hooks/ext/luajit/src/lj_bcwrite_dyn.o +0 -0
  171. data/lua-hooks/ext/luajit/src/lj_buf.c +234 -0
  172. data/lua-hooks/ext/luajit/src/lj_buf.h +105 -0
  173. data/lua-hooks/ext/luajit/src/lj_buf.o +0 -0
  174. data/lua-hooks/ext/luajit/src/lj_buf_dyn.o +0 -0
  175. data/lua-hooks/ext/luajit/src/lj_carith.c +429 -0
  176. data/lua-hooks/ext/luajit/src/lj_carith.h +37 -0
  177. data/lua-hooks/ext/luajit/src/lj_carith.o +0 -0
  178. data/lua-hooks/ext/luajit/src/lj_carith_dyn.o +0 -0
  179. data/lua-hooks/ext/luajit/src/lj_ccall.c +984 -0
  180. data/lua-hooks/ext/luajit/src/lj_ccall.h +178 -0
  181. data/lua-hooks/ext/luajit/src/lj_ccall.o +0 -0
  182. data/lua-hooks/ext/luajit/src/lj_ccall_dyn.o +0 -0
  183. data/lua-hooks/ext/luajit/src/lj_ccallback.c +712 -0
  184. data/lua-hooks/ext/luajit/src/lj_ccallback.h +25 -0
  185. data/lua-hooks/ext/luajit/src/lj_ccallback.o +0 -0
  186. data/lua-hooks/ext/luajit/src/lj_ccallback_dyn.o +0 -0
  187. data/lua-hooks/ext/luajit/src/lj_cconv.c +752 -0
  188. data/lua-hooks/ext/luajit/src/lj_cconv.h +70 -0
  189. data/lua-hooks/ext/luajit/src/lj_cconv.o +0 -0
  190. data/lua-hooks/ext/luajit/src/lj_cconv_dyn.o +0 -0
  191. data/lua-hooks/ext/luajit/src/lj_cdata.c +288 -0
  192. data/lua-hooks/ext/luajit/src/lj_cdata.h +76 -0
  193. data/lua-hooks/ext/luajit/src/lj_cdata.o +0 -0
  194. data/lua-hooks/ext/luajit/src/lj_cdata_dyn.o +0 -0
  195. data/lua-hooks/ext/luajit/src/lj_char.c +43 -0
  196. data/lua-hooks/ext/luajit/src/lj_char.h +42 -0
  197. data/lua-hooks/ext/luajit/src/lj_char.o +0 -0
  198. data/lua-hooks/ext/luajit/src/lj_char_dyn.o +0 -0
  199. data/lua-hooks/ext/luajit/src/lj_clib.c +418 -0
  200. data/lua-hooks/ext/luajit/src/lj_clib.h +29 -0
  201. data/lua-hooks/ext/luajit/src/lj_clib.o +0 -0
  202. data/lua-hooks/ext/luajit/src/lj_clib_dyn.o +0 -0
  203. data/lua-hooks/ext/luajit/src/lj_cparse.c +1862 -0
  204. data/lua-hooks/ext/luajit/src/lj_cparse.h +65 -0
  205. data/lua-hooks/ext/luajit/src/lj_cparse.o +0 -0
  206. data/lua-hooks/ext/luajit/src/lj_cparse_dyn.o +0 -0
  207. data/lua-hooks/ext/luajit/src/lj_crecord.c +1834 -0
  208. data/lua-hooks/ext/luajit/src/lj_crecord.h +38 -0
  209. data/lua-hooks/ext/luajit/src/lj_crecord.o +0 -0
  210. data/lua-hooks/ext/luajit/src/lj_crecord_dyn.o +0 -0
  211. data/lua-hooks/ext/luajit/src/lj_ctype.c +635 -0
  212. data/lua-hooks/ext/luajit/src/lj_ctype.h +461 -0
  213. data/lua-hooks/ext/luajit/src/lj_ctype.o +0 -0
  214. data/lua-hooks/ext/luajit/src/lj_ctype_dyn.o +0 -0
  215. data/lua-hooks/ext/luajit/src/lj_debug.c +699 -0
  216. data/lua-hooks/ext/luajit/src/lj_debug.h +65 -0
  217. data/lua-hooks/ext/luajit/src/lj_debug.o +0 -0
  218. data/lua-hooks/ext/luajit/src/lj_debug_dyn.o +0 -0
  219. data/lua-hooks/ext/luajit/src/lj_def.h +365 -0
  220. data/lua-hooks/ext/luajit/src/lj_dispatch.c +557 -0
  221. data/lua-hooks/ext/luajit/src/lj_dispatch.h +138 -0
  222. data/lua-hooks/ext/luajit/src/lj_dispatch.o +0 -0
  223. data/lua-hooks/ext/luajit/src/lj_dispatch_dyn.o +0 -0
  224. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +356 -0
  225. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +211 -0
  226. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +238 -0
  227. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +462 -0
  228. data/lua-hooks/ext/luajit/src/lj_err.c +794 -0
  229. data/lua-hooks/ext/luajit/src/lj_err.h +41 -0
  230. data/lua-hooks/ext/luajit/src/lj_err.o +0 -0
  231. data/lua-hooks/ext/luajit/src/lj_err_dyn.o +0 -0
  232. data/lua-hooks/ext/luajit/src/lj_errmsg.h +190 -0
  233. data/lua-hooks/ext/luajit/src/lj_ff.h +18 -0
  234. data/lua-hooks/ext/luajit/src/lj_ffdef.h +209 -0
  235. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +1247 -0
  236. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +24 -0
  237. data/lua-hooks/ext/luajit/src/lj_ffrecord.o +0 -0
  238. data/lua-hooks/ext/luajit/src/lj_ffrecord_dyn.o +0 -0
  239. data/lua-hooks/ext/luajit/src/lj_folddef.h +1138 -0
  240. data/lua-hooks/ext/luajit/src/lj_frame.h +259 -0
  241. data/lua-hooks/ext/luajit/src/lj_func.c +185 -0
  242. data/lua-hooks/ext/luajit/src/lj_func.h +24 -0
  243. data/lua-hooks/ext/luajit/src/lj_func.o +0 -0
  244. data/lua-hooks/ext/luajit/src/lj_func_dyn.o +0 -0
  245. data/lua-hooks/ext/luajit/src/lj_gc.c +845 -0
  246. data/lua-hooks/ext/luajit/src/lj_gc.h +134 -0
  247. data/lua-hooks/ext/luajit/src/lj_gc.o +0 -0
  248. data/lua-hooks/ext/luajit/src/lj_gc_dyn.o +0 -0
  249. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +787 -0
  250. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +22 -0
  251. data/lua-hooks/ext/luajit/src/lj_gdbjit.o +0 -0
  252. data/lua-hooks/ext/luajit/src/lj_gdbjit_dyn.o +0 -0
  253. data/lua-hooks/ext/luajit/src/lj_ir.c +505 -0
  254. data/lua-hooks/ext/luajit/src/lj_ir.h +577 -0
  255. data/lua-hooks/ext/luajit/src/lj_ir.o +0 -0
  256. data/lua-hooks/ext/luajit/src/lj_ir_dyn.o +0 -0
  257. data/lua-hooks/ext/luajit/src/lj_ircall.h +321 -0
  258. data/lua-hooks/ext/luajit/src/lj_iropt.h +161 -0
  259. data/lua-hooks/ext/luajit/src/lj_jit.h +440 -0
  260. data/lua-hooks/ext/luajit/src/lj_lex.c +482 -0
  261. data/lua-hooks/ext/luajit/src/lj_lex.h +86 -0
  262. data/lua-hooks/ext/luajit/src/lj_lex.o +0 -0
  263. data/lua-hooks/ext/luajit/src/lj_lex_dyn.o +0 -0
  264. data/lua-hooks/ext/luajit/src/lj_lib.c +303 -0
  265. data/lua-hooks/ext/luajit/src/lj_lib.h +115 -0
  266. data/lua-hooks/ext/luajit/src/lj_lib.o +0 -0
  267. data/lua-hooks/ext/luajit/src/lj_lib_dyn.o +0 -0
  268. data/lua-hooks/ext/luajit/src/lj_libdef.h +414 -0
  269. data/lua-hooks/ext/luajit/src/lj_load.c +168 -0
  270. data/lua-hooks/ext/luajit/src/lj_load.o +0 -0
  271. data/lua-hooks/ext/luajit/src/lj_load_dyn.o +0 -0
  272. data/lua-hooks/ext/luajit/src/lj_mcode.c +386 -0
  273. data/lua-hooks/ext/luajit/src/lj_mcode.h +30 -0
  274. data/lua-hooks/ext/luajit/src/lj_mcode.o +0 -0
  275. data/lua-hooks/ext/luajit/src/lj_mcode_dyn.o +0 -0
  276. data/lua-hooks/ext/luajit/src/lj_meta.c +477 -0
  277. data/lua-hooks/ext/luajit/src/lj_meta.h +38 -0
  278. data/lua-hooks/ext/luajit/src/lj_meta.o +0 -0
  279. data/lua-hooks/ext/luajit/src/lj_meta_dyn.o +0 -0
  280. data/lua-hooks/ext/luajit/src/lj_obj.c +50 -0
  281. data/lua-hooks/ext/luajit/src/lj_obj.h +976 -0
  282. data/lua-hooks/ext/luajit/src/lj_obj.o +0 -0
  283. data/lua-hooks/ext/luajit/src/lj_obj_dyn.o +0 -0
  284. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +78 -0
  285. data/lua-hooks/ext/luajit/src/lj_opt_dce.o +0 -0
  286. data/lua-hooks/ext/luajit/src/lj_opt_dce_dyn.o +0 -0
  287. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +2488 -0
  288. data/lua-hooks/ext/luajit/src/lj_opt_fold.o +0 -0
  289. data/lua-hooks/ext/luajit/src/lj_opt_fold_dyn.o +0 -0
  290. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +449 -0
  291. data/lua-hooks/ext/luajit/src/lj_opt_loop.o +0 -0
  292. data/lua-hooks/ext/luajit/src/lj_opt_loop_dyn.o +0 -0
  293. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +935 -0
  294. data/lua-hooks/ext/luajit/src/lj_opt_mem.o +0 -0
  295. data/lua-hooks/ext/luajit/src/lj_opt_mem_dyn.o +0 -0
  296. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +652 -0
  297. data/lua-hooks/ext/luajit/src/lj_opt_narrow.o +0 -0
  298. data/lua-hooks/ext/luajit/src/lj_opt_narrow_dyn.o +0 -0
  299. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +245 -0
  300. data/lua-hooks/ext/luajit/src/lj_opt_sink.o +0 -0
  301. data/lua-hooks/ext/luajit/src/lj_opt_sink_dyn.o +0 -0
  302. data/lua-hooks/ext/luajit/src/lj_opt_split.c +856 -0
  303. data/lua-hooks/ext/luajit/src/lj_opt_split.o +0 -0
  304. data/lua-hooks/ext/luajit/src/lj_opt_split_dyn.o +0 -0
  305. data/lua-hooks/ext/luajit/src/lj_parse.c +2725 -0
  306. data/lua-hooks/ext/luajit/src/lj_parse.h +18 -0
  307. data/lua-hooks/ext/luajit/src/lj_parse.o +0 -0
  308. data/lua-hooks/ext/luajit/src/lj_parse_dyn.o +0 -0
  309. data/lua-hooks/ext/luajit/src/lj_profile.c +368 -0
  310. data/lua-hooks/ext/luajit/src/lj_profile.h +21 -0
  311. data/lua-hooks/ext/luajit/src/lj_profile.o +0 -0
  312. data/lua-hooks/ext/luajit/src/lj_profile_dyn.o +0 -0
  313. data/lua-hooks/ext/luajit/src/lj_recdef.h +270 -0
  314. data/lua-hooks/ext/luajit/src/lj_record.c +2554 -0
  315. data/lua-hooks/ext/luajit/src/lj_record.h +45 -0
  316. data/lua-hooks/ext/luajit/src/lj_record.o +0 -0
  317. data/lua-hooks/ext/luajit/src/lj_record_dyn.o +0 -0
  318. data/lua-hooks/ext/luajit/src/lj_snap.c +870 -0
  319. data/lua-hooks/ext/luajit/src/lj_snap.h +34 -0
  320. data/lua-hooks/ext/luajit/src/lj_snap.o +0 -0
  321. data/lua-hooks/ext/luajit/src/lj_snap_dyn.o +0 -0
  322. data/lua-hooks/ext/luajit/src/lj_state.c +300 -0
  323. data/lua-hooks/ext/luajit/src/lj_state.h +35 -0
  324. data/lua-hooks/ext/luajit/src/lj_state.o +0 -0
  325. data/lua-hooks/ext/luajit/src/lj_state_dyn.o +0 -0
  326. data/lua-hooks/ext/luajit/src/lj_str.c +197 -0
  327. data/lua-hooks/ext/luajit/src/lj_str.h +27 -0
  328. data/lua-hooks/ext/luajit/src/lj_str.o +0 -0
  329. data/lua-hooks/ext/luajit/src/lj_str_dyn.o +0 -0
  330. data/lua-hooks/ext/luajit/src/lj_strfmt.c +554 -0
  331. data/lua-hooks/ext/luajit/src/lj_strfmt.h +125 -0
  332. data/lua-hooks/ext/luajit/src/lj_strfmt.o +0 -0
  333. data/lua-hooks/ext/luajit/src/lj_strfmt_dyn.o +0 -0
  334. data/lua-hooks/ext/luajit/src/lj_strscan.c +547 -0
  335. data/lua-hooks/ext/luajit/src/lj_strscan.h +39 -0
  336. data/lua-hooks/ext/luajit/src/lj_strscan.o +0 -0
  337. data/lua-hooks/ext/luajit/src/lj_strscan_dyn.o +0 -0
  338. data/lua-hooks/ext/luajit/src/lj_tab.c +666 -0
  339. data/lua-hooks/ext/luajit/src/lj_tab.h +73 -0
  340. data/lua-hooks/ext/luajit/src/lj_tab.o +0 -0
  341. data/lua-hooks/ext/luajit/src/lj_tab_dyn.o +0 -0
  342. data/lua-hooks/ext/luajit/src/lj_target.h +164 -0
  343. data/lua-hooks/ext/luajit/src/lj_target_arm.h +270 -0
  344. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +97 -0
  345. data/lua-hooks/ext/luajit/src/lj_target_mips.h +260 -0
  346. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +280 -0
  347. data/lua-hooks/ext/luajit/src/lj_target_x86.h +345 -0
  348. data/lua-hooks/ext/luajit/src/lj_trace.c +859 -0
  349. data/lua-hooks/ext/luajit/src/lj_trace.h +54 -0
  350. data/lua-hooks/ext/luajit/src/lj_trace.o +0 -0
  351. data/lua-hooks/ext/luajit/src/lj_trace_dyn.o +0 -0
  352. data/lua-hooks/ext/luajit/src/lj_traceerr.h +63 -0
  353. data/lua-hooks/ext/luajit/src/lj_udata.c +34 -0
  354. data/lua-hooks/ext/luajit/src/lj_udata.h +14 -0
  355. data/lua-hooks/ext/luajit/src/lj_udata.o +0 -0
  356. data/lua-hooks/ext/luajit/src/lj_udata_dyn.o +0 -0
  357. data/lua-hooks/ext/luajit/src/lj_vm.S +2730 -0
  358. data/lua-hooks/ext/luajit/src/lj_vm.h +114 -0
  359. data/lua-hooks/ext/luajit/src/lj_vm.o +0 -0
  360. data/lua-hooks/ext/luajit/src/lj_vm_dyn.o +0 -0
  361. data/lua-hooks/ext/luajit/src/lj_vmevent.c +58 -0
  362. data/lua-hooks/ext/luajit/src/lj_vmevent.h +59 -0
  363. data/lua-hooks/ext/luajit/src/lj_vmevent.o +0 -0
  364. data/lua-hooks/ext/luajit/src/lj_vmevent_dyn.o +0 -0
  365. data/lua-hooks/ext/luajit/src/lj_vmmath.c +152 -0
  366. data/lua-hooks/ext/luajit/src/lj_vmmath.o +0 -0
  367. data/lua-hooks/ext/luajit/src/lj_vmmath_dyn.o +0 -0
  368. data/lua-hooks/ext/luajit/src/ljamalg.c +96 -0
  369. data/lua-hooks/ext/{lua → luajit/src}/lua.h +12 -7
  370. data/lua-hooks/ext/luajit/src/lua.hpp +9 -0
  371. data/lua-hooks/ext/luajit/src/luaconf.h +156 -0
  372. data/lua-hooks/ext/luajit/src/luajit +0 -0
  373. data/lua-hooks/ext/luajit/src/luajit.c +570 -0
  374. data/lua-hooks/ext/luajit/src/luajit.h +79 -0
  375. data/lua-hooks/ext/luajit/src/luajit.o +0 -0
  376. data/lua-hooks/ext/luajit/src/lualib.h +43 -0
  377. data/lua-hooks/ext/luajit/src/msvcbuild.bat +114 -0
  378. data/lua-hooks/ext/luajit/src/ps4build.bat +103 -0
  379. data/lua-hooks/ext/luajit/src/psvitabuild.bat +93 -0
  380. data/lua-hooks/ext/luajit/src/vm_arm.dasc +4585 -0
  381. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +3764 -0
  382. data/lua-hooks/ext/luajit/src/vm_mips.dasc +4355 -0
  383. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +5252 -0
  384. data/lua-hooks/ext/luajit/src/vm_x64.dasc +4902 -0
  385. data/lua-hooks/ext/luajit/src/vm_x86.dasc +5710 -0
  386. data/lua-hooks/ext/luajit/src/xb1build.bat +101 -0
  387. data/lua-hooks/ext/luajit/src/xedkbuild.bat +92 -0
  388. data/lua-hooks/ext/luautf8/lutf8lib.c +3 -3
  389. data/lua-hooks/lib/boot.lua +37 -2
  390. metadata +372 -69
  391. data/lua-hooks/ext/bitop/README +0 -22
  392. data/lua-hooks/ext/bitop/bit.c +0 -189
  393. data/lua-hooks/ext/extconf.rb +0 -38
  394. data/lua-hooks/ext/lua/COPYRIGHT +0 -34
  395. data/lua-hooks/ext/lua/lapi.c +0 -1087
  396. data/lua-hooks/ext/lua/lapi.h +0 -16
  397. data/lua-hooks/ext/lua/lauxlib.c +0 -652
  398. data/lua-hooks/ext/lua/lbaselib.c +0 -659
  399. data/lua-hooks/ext/lua/lcode.c +0 -831
  400. data/lua-hooks/ext/lua/lcode.h +0 -76
  401. data/lua-hooks/ext/lua/ldblib.c +0 -398
  402. data/lua-hooks/ext/lua/ldebug.c +0 -638
  403. data/lua-hooks/ext/lua/ldebug.h +0 -33
  404. data/lua-hooks/ext/lua/ldo.c +0 -519
  405. data/lua-hooks/ext/lua/ldo.h +0 -57
  406. data/lua-hooks/ext/lua/ldump.c +0 -164
  407. data/lua-hooks/ext/lua/lfunc.c +0 -174
  408. data/lua-hooks/ext/lua/lfunc.h +0 -34
  409. data/lua-hooks/ext/lua/lgc.c +0 -710
  410. data/lua-hooks/ext/lua/lgc.h +0 -110
  411. data/lua-hooks/ext/lua/linit.c +0 -38
  412. data/lua-hooks/ext/lua/liolib.c +0 -556
  413. data/lua-hooks/ext/lua/llex.c +0 -463
  414. data/lua-hooks/ext/lua/llex.h +0 -81
  415. data/lua-hooks/ext/lua/llimits.h +0 -128
  416. data/lua-hooks/ext/lua/lmathlib.c +0 -263
  417. data/lua-hooks/ext/lua/lmem.c +0 -86
  418. data/lua-hooks/ext/lua/lmem.h +0 -49
  419. data/lua-hooks/ext/lua/loadlib.c +0 -705
  420. data/lua-hooks/ext/lua/loadlib_rel.c +0 -760
  421. data/lua-hooks/ext/lua/lobject.c +0 -214
  422. data/lua-hooks/ext/lua/lobject.h +0 -381
  423. data/lua-hooks/ext/lua/lopcodes.c +0 -102
  424. data/lua-hooks/ext/lua/lopcodes.h +0 -268
  425. data/lua-hooks/ext/lua/loslib.c +0 -243
  426. data/lua-hooks/ext/lua/lparser.c +0 -1339
  427. data/lua-hooks/ext/lua/lparser.h +0 -82
  428. data/lua-hooks/ext/lua/lstate.c +0 -214
  429. data/lua-hooks/ext/lua/lstate.h +0 -169
  430. data/lua-hooks/ext/lua/lstring.c +0 -111
  431. data/lua-hooks/ext/lua/lstring.h +0 -31
  432. data/lua-hooks/ext/lua/lstrlib.c +0 -871
  433. data/lua-hooks/ext/lua/ltable.c +0 -588
  434. data/lua-hooks/ext/lua/ltable.h +0 -40
  435. data/lua-hooks/ext/lua/ltablib.c +0 -287
  436. data/lua-hooks/ext/lua/ltm.c +0 -75
  437. data/lua-hooks/ext/lua/ltm.h +0 -54
  438. data/lua-hooks/ext/lua/lua.c +0 -392
  439. data/lua-hooks/ext/lua/lua.def +0 -131
  440. data/lua-hooks/ext/lua/lua.rc +0 -28
  441. data/lua-hooks/ext/lua/lua_dll.rc +0 -26
  442. data/lua-hooks/ext/lua/luac.c +0 -200
  443. data/lua-hooks/ext/lua/luac.rc +0 -1
  444. data/lua-hooks/ext/lua/luaconf.h +0 -763
  445. data/lua-hooks/ext/lua/luaconf.h.in +0 -724
  446. data/lua-hooks/ext/lua/luaconf.h.orig +0 -763
  447. data/lua-hooks/ext/lua/lualib.h +0 -53
  448. data/lua-hooks/ext/lua/lundump.c +0 -227
  449. data/lua-hooks/ext/lua/lundump.h +0 -36
  450. data/lua-hooks/ext/lua/lvm.c +0 -767
  451. data/lua-hooks/ext/lua/lvm.h +0 -36
  452. data/lua-hooks/ext/lua/lzio.c +0 -82
  453. data/lua-hooks/ext/lua/lzio.h +0 -67
  454. data/lua-hooks/ext/lua/print.c +0 -227
@@ -0,0 +1,689 @@
1
+ ----------------------------------------------------------------------------
2
+ -- LuaJIT ARM disassembler module.
3
+ --
4
+ -- Copyright (C) 2005-2015 Mike Pall. All rights reserved.
5
+ -- Released under the MIT license. See Copyright Notice in luajit.h
6
+ ----------------------------------------------------------------------------
7
+ -- This is a helper module used by the LuaJIT machine code dumper module.
8
+ --
9
+ -- It disassembles most user-mode ARMv7 instructions
10
+ -- NYI: Advanced SIMD and VFP instructions.
11
+ ------------------------------------------------------------------------------
12
+
13
+ local type = type
14
+ local sub, byte, format = string.sub, string.byte, string.format
15
+ local match, gmatch, gsub = string.match, string.gmatch, string.gsub
16
+ local concat = table.concat
17
+ local bit = require("bit")
18
+ local band, bor, ror, tohex = bit.band, bit.bor, bit.ror, bit.tohex
19
+ local lshift, rshift, arshift = bit.lshift, bit.rshift, bit.arshift
20
+
21
+ ------------------------------------------------------------------------------
22
+ -- Opcode maps
23
+ ------------------------------------------------------------------------------
24
+
25
+ local map_loadc = {
26
+ shift = 8, mask = 15,
27
+ [10] = {
28
+ shift = 20, mask = 1,
29
+ [0] = {
30
+ shift = 23, mask = 3,
31
+ [0] = "vmovFmDN", "vstmFNdr",
32
+ _ = {
33
+ shift = 21, mask = 1,
34
+ [0] = "vstrFdl",
35
+ { shift = 16, mask = 15, [13] = "vpushFdr", _ = "vstmdbFNdr", }
36
+ },
37
+ },
38
+ {
39
+ shift = 23, mask = 3,
40
+ [0] = "vmovFDNm",
41
+ { shift = 16, mask = 15, [13] = "vpopFdr", _ = "vldmFNdr", },
42
+ _ = {
43
+ shift = 21, mask = 1,
44
+ [0] = "vldrFdl", "vldmdbFNdr",
45
+ },
46
+ },
47
+ },
48
+ [11] = {
49
+ shift = 20, mask = 1,
50
+ [0] = {
51
+ shift = 23, mask = 3,
52
+ [0] = "vmovGmDN", "vstmGNdr",
53
+ _ = {
54
+ shift = 21, mask = 1,
55
+ [0] = "vstrGdl",
56
+ { shift = 16, mask = 15, [13] = "vpushGdr", _ = "vstmdbGNdr", }
57
+ },
58
+ },
59
+ {
60
+ shift = 23, mask = 3,
61
+ [0] = "vmovGDNm",
62
+ { shift = 16, mask = 15, [13] = "vpopGdr", _ = "vldmGNdr", },
63
+ _ = {
64
+ shift = 21, mask = 1,
65
+ [0] = "vldrGdl", "vldmdbGNdr",
66
+ },
67
+ },
68
+ },
69
+ _ = {
70
+ shift = 0, mask = 0 -- NYI ldc, mcrr, mrrc.
71
+ },
72
+ }
73
+
74
+ local map_vfps = {
75
+ shift = 6, mask = 0x2c001,
76
+ [0] = "vmlaF.dnm", "vmlsF.dnm",
77
+ [0x04000] = "vnmlsF.dnm", [0x04001] = "vnmlaF.dnm",
78
+ [0x08000] = "vmulF.dnm", [0x08001] = "vnmulF.dnm",
79
+ [0x0c000] = "vaddF.dnm", [0x0c001] = "vsubF.dnm",
80
+ [0x20000] = "vdivF.dnm",
81
+ [0x24000] = "vfnmsF.dnm", [0x24001] = "vfnmaF.dnm",
82
+ [0x28000] = "vfmaF.dnm", [0x28001] = "vfmsF.dnm",
83
+ [0x2c000] = "vmovF.dY",
84
+ [0x2c001] = {
85
+ shift = 7, mask = 0x1e01,
86
+ [0] = "vmovF.dm", "vabsF.dm",
87
+ [0x0200] = "vnegF.dm", [0x0201] = "vsqrtF.dm",
88
+ [0x0800] = "vcmpF.dm", [0x0801] = "vcmpeF.dm",
89
+ [0x0a00] = "vcmpzF.d", [0x0a01] = "vcmpzeF.d",
90
+ [0x0e01] = "vcvtG.dF.m",
91
+ [0x1000] = "vcvt.f32.u32Fdm", [0x1001] = "vcvt.f32.s32Fdm",
92
+ [0x1800] = "vcvtr.u32F.dm", [0x1801] = "vcvt.u32F.dm",
93
+ [0x1a00] = "vcvtr.s32F.dm", [0x1a01] = "vcvt.s32F.dm",
94
+ },
95
+ }
96
+
97
+ local map_vfpd = {
98
+ shift = 6, mask = 0x2c001,
99
+ [0] = "vmlaG.dnm", "vmlsG.dnm",
100
+ [0x04000] = "vnmlsG.dnm", [0x04001] = "vnmlaG.dnm",
101
+ [0x08000] = "vmulG.dnm", [0x08001] = "vnmulG.dnm",
102
+ [0x0c000] = "vaddG.dnm", [0x0c001] = "vsubG.dnm",
103
+ [0x20000] = "vdivG.dnm",
104
+ [0x24000] = "vfnmsG.dnm", [0x24001] = "vfnmaG.dnm",
105
+ [0x28000] = "vfmaG.dnm", [0x28001] = "vfmsG.dnm",
106
+ [0x2c000] = "vmovG.dY",
107
+ [0x2c001] = {
108
+ shift = 7, mask = 0x1e01,
109
+ [0] = "vmovG.dm", "vabsG.dm",
110
+ [0x0200] = "vnegG.dm", [0x0201] = "vsqrtG.dm",
111
+ [0x0800] = "vcmpG.dm", [0x0801] = "vcmpeG.dm",
112
+ [0x0a00] = "vcmpzG.d", [0x0a01] = "vcmpzeG.d",
113
+ [0x0e01] = "vcvtF.dG.m",
114
+ [0x1000] = "vcvt.f64.u32GdFm", [0x1001] = "vcvt.f64.s32GdFm",
115
+ [0x1800] = "vcvtr.u32FdG.m", [0x1801] = "vcvt.u32FdG.m",
116
+ [0x1a00] = "vcvtr.s32FdG.m", [0x1a01] = "vcvt.s32FdG.m",
117
+ },
118
+ }
119
+
120
+ local map_datac = {
121
+ shift = 24, mask = 1,
122
+ [0] = {
123
+ shift = 4, mask = 1,
124
+ [0] = {
125
+ shift = 8, mask = 15,
126
+ [10] = map_vfps,
127
+ [11] = map_vfpd,
128
+ -- NYI cdp, mcr, mrc.
129
+ },
130
+ {
131
+ shift = 8, mask = 15,
132
+ [10] = {
133
+ shift = 20, mask = 15,
134
+ [0] = "vmovFnD", "vmovFDn",
135
+ [14] = "vmsrD",
136
+ [15] = { shift = 12, mask = 15, [15] = "vmrs", _ = "vmrsD", },
137
+ },
138
+ },
139
+ },
140
+ "svcT",
141
+ }
142
+
143
+ local map_loadcu = {
144
+ shift = 0, mask = 0, -- NYI unconditional CP load/store.
145
+ }
146
+
147
+ local map_datacu = {
148
+ shift = 0, mask = 0, -- NYI unconditional CP data.
149
+ }
150
+
151
+ local map_simddata = {
152
+ shift = 0, mask = 0, -- NYI SIMD data.
153
+ }
154
+
155
+ local map_simdload = {
156
+ shift = 0, mask = 0, -- NYI SIMD load/store, preload.
157
+ }
158
+
159
+ local map_preload = {
160
+ shift = 0, mask = 0, -- NYI preload.
161
+ }
162
+
163
+ local map_media = {
164
+ shift = 20, mask = 31,
165
+ [0] = false,
166
+ { --01
167
+ shift = 5, mask = 7,
168
+ [0] = "sadd16DNM", "sasxDNM", "ssaxDNM", "ssub16DNM",
169
+ "sadd8DNM", false, false, "ssub8DNM",
170
+ },
171
+ { --02
172
+ shift = 5, mask = 7,
173
+ [0] = "qadd16DNM", "qasxDNM", "qsaxDNM", "qsub16DNM",
174
+ "qadd8DNM", false, false, "qsub8DNM",
175
+ },
176
+ { --03
177
+ shift = 5, mask = 7,
178
+ [0] = "shadd16DNM", "shasxDNM", "shsaxDNM", "shsub16DNM",
179
+ "shadd8DNM", false, false, "shsub8DNM",
180
+ },
181
+ false,
182
+ { --05
183
+ shift = 5, mask = 7,
184
+ [0] = "uadd16DNM", "uasxDNM", "usaxDNM", "usub16DNM",
185
+ "uadd8DNM", false, false, "usub8DNM",
186
+ },
187
+ { --06
188
+ shift = 5, mask = 7,
189
+ [0] = "uqadd16DNM", "uqasxDNM", "uqsaxDNM", "uqsub16DNM",
190
+ "uqadd8DNM", false, false, "uqsub8DNM",
191
+ },
192
+ { --07
193
+ shift = 5, mask = 7,
194
+ [0] = "uhadd16DNM", "uhasxDNM", "uhsaxDNM", "uhsub16DNM",
195
+ "uhadd8DNM", false, false, "uhsub8DNM",
196
+ },
197
+ { --08
198
+ shift = 5, mask = 7,
199
+ [0] = "pkhbtDNMU", false, "pkhtbDNMU",
200
+ { shift = 16, mask = 15, [15] = "sxtb16DMU", _ = "sxtab16DNMU", },
201
+ "pkhbtDNMU", "selDNM", "pkhtbDNMU",
202
+ },
203
+ false,
204
+ { --0a
205
+ shift = 5, mask = 7,
206
+ [0] = "ssatDxMu", "ssat16DxM", "ssatDxMu",
207
+ { shift = 16, mask = 15, [15] = "sxtbDMU", _ = "sxtabDNMU", },
208
+ "ssatDxMu", false, "ssatDxMu",
209
+ },
210
+ { --0b
211
+ shift = 5, mask = 7,
212
+ [0] = "ssatDxMu", "revDM", "ssatDxMu",
213
+ { shift = 16, mask = 15, [15] = "sxthDMU", _ = "sxtahDNMU", },
214
+ "ssatDxMu", "rev16DM", "ssatDxMu",
215
+ },
216
+ { --0c
217
+ shift = 5, mask = 7,
218
+ [3] = { shift = 16, mask = 15, [15] = "uxtb16DMU", _ = "uxtab16DNMU", },
219
+ },
220
+ false,
221
+ { --0e
222
+ shift = 5, mask = 7,
223
+ [0] = "usatDwMu", "usat16DwM", "usatDwMu",
224
+ { shift = 16, mask = 15, [15] = "uxtbDMU", _ = "uxtabDNMU", },
225
+ "usatDwMu", false, "usatDwMu",
226
+ },
227
+ { --0f
228
+ shift = 5, mask = 7,
229
+ [0] = "usatDwMu", "rbitDM", "usatDwMu",
230
+ { shift = 16, mask = 15, [15] = "uxthDMU", _ = "uxtahDNMU", },
231
+ "usatDwMu", "revshDM", "usatDwMu",
232
+ },
233
+ { --10
234
+ shift = 12, mask = 15,
235
+ [15] = {
236
+ shift = 5, mask = 7,
237
+ "smuadNMS", "smuadxNMS", "smusdNMS", "smusdxNMS",
238
+ },
239
+ _ = {
240
+ shift = 5, mask = 7,
241
+ [0] = "smladNMSD", "smladxNMSD", "smlsdNMSD", "smlsdxNMSD",
242
+ },
243
+ },
244
+ false, false, false,
245
+ { --14
246
+ shift = 5, mask = 7,
247
+ [0] = "smlaldDNMS", "smlaldxDNMS", "smlsldDNMS", "smlsldxDNMS",
248
+ },
249
+ { --15
250
+ shift = 5, mask = 7,
251
+ [0] = { shift = 12, mask = 15, [15] = "smmulNMS", _ = "smmlaNMSD", },
252
+ { shift = 12, mask = 15, [15] = "smmulrNMS", _ = "smmlarNMSD", },
253
+ false, false, false, false,
254
+ "smmlsNMSD", "smmlsrNMSD",
255
+ },
256
+ false, false,
257
+ { --18
258
+ shift = 5, mask = 7,
259
+ [0] = { shift = 12, mask = 15, [15] = "usad8NMS", _ = "usada8NMSD", },
260
+ },
261
+ false,
262
+ { --1a
263
+ shift = 5, mask = 3, [2] = "sbfxDMvw",
264
+ },
265
+ { --1b
266
+ shift = 5, mask = 3, [2] = "sbfxDMvw",
267
+ },
268
+ { --1c
269
+ shift = 5, mask = 3,
270
+ [0] = { shift = 0, mask = 15, [15] = "bfcDvX", _ = "bfiDMvX", },
271
+ },
272
+ { --1d
273
+ shift = 5, mask = 3,
274
+ [0] = { shift = 0, mask = 15, [15] = "bfcDvX", _ = "bfiDMvX", },
275
+ },
276
+ { --1e
277
+ shift = 5, mask = 3, [2] = "ubfxDMvw",
278
+ },
279
+ { --1f
280
+ shift = 5, mask = 3, [2] = "ubfxDMvw",
281
+ },
282
+ }
283
+
284
+ local map_load = {
285
+ shift = 21, mask = 9,
286
+ {
287
+ shift = 20, mask = 5,
288
+ [0] = "strtDL", "ldrtDL", [4] = "strbtDL", [5] = "ldrbtDL",
289
+ },
290
+ _ = {
291
+ shift = 20, mask = 5,
292
+ [0] = "strDL", "ldrDL", [4] = "strbDL", [5] = "ldrbDL",
293
+ }
294
+ }
295
+
296
+ local map_load1 = {
297
+ shift = 4, mask = 1,
298
+ [0] = map_load, map_media,
299
+ }
300
+
301
+ local map_loadm = {
302
+ shift = 20, mask = 1,
303
+ [0] = {
304
+ shift = 23, mask = 3,
305
+ [0] = "stmdaNR", "stmNR",
306
+ { shift = 16, mask = 63, [45] = "pushR", _ = "stmdbNR", }, "stmibNR",
307
+ },
308
+ {
309
+ shift = 23, mask = 3,
310
+ [0] = "ldmdaNR", { shift = 16, mask = 63, [61] = "popR", _ = "ldmNR", },
311
+ "ldmdbNR", "ldmibNR",
312
+ },
313
+ }
314
+
315
+ local map_data = {
316
+ shift = 21, mask = 15,
317
+ [0] = "andDNPs", "eorDNPs", "subDNPs", "rsbDNPs",
318
+ "addDNPs", "adcDNPs", "sbcDNPs", "rscDNPs",
319
+ "tstNP", "teqNP", "cmpNP", "cmnNP",
320
+ "orrDNPs", "movDPs", "bicDNPs", "mvnDPs",
321
+ }
322
+
323
+ local map_mul = {
324
+ shift = 21, mask = 7,
325
+ [0] = "mulNMSs", "mlaNMSDs", "umaalDNMS", "mlsDNMS",
326
+ "umullDNMSs", "umlalDNMSs", "smullDNMSs", "smlalDNMSs",
327
+ }
328
+
329
+ local map_sync = {
330
+ shift = 20, mask = 15, -- NYI: brackets around N. R(D+1) for ldrexd/strexd.
331
+ [0] = "swpDMN", false, false, false,
332
+ "swpbDMN", false, false, false,
333
+ "strexDMN", "ldrexDN", "strexdDN", "ldrexdDN",
334
+ "strexbDMN", "ldrexbDN", "strexhDN", "ldrexhDN",
335
+ }
336
+
337
+ local map_mulh = {
338
+ shift = 21, mask = 3,
339
+ [0] = { shift = 5, mask = 3,
340
+ [0] = "smlabbNMSD", "smlatbNMSD", "smlabtNMSD", "smlattNMSD", },
341
+ { shift = 5, mask = 3,
342
+ [0] = "smlawbNMSD", "smulwbNMS", "smlawtNMSD", "smulwtNMS", },
343
+ { shift = 5, mask = 3,
344
+ [0] = "smlalbbDNMS", "smlaltbDNMS", "smlalbtDNMS", "smlalttDNMS", },
345
+ { shift = 5, mask = 3,
346
+ [0] = "smulbbNMS", "smultbNMS", "smulbtNMS", "smulttNMS", },
347
+ }
348
+
349
+ local map_misc = {
350
+ shift = 4, mask = 7,
351
+ -- NYI: decode PSR bits of msr.
352
+ [0] = { shift = 21, mask = 1, [0] = "mrsD", "msrM", },
353
+ { shift = 21, mask = 3, "bxM", false, "clzDM", },
354
+ { shift = 21, mask = 3, "bxjM", },
355
+ { shift = 21, mask = 3, "blxM", },
356
+ false,
357
+ { shift = 21, mask = 3, [0] = "qaddDMN", "qsubDMN", "qdaddDMN", "qdsubDMN", },
358
+ false,
359
+ { shift = 21, mask = 3, "bkptK", },
360
+ }
361
+
362
+ local map_datar = {
363
+ shift = 4, mask = 9,
364
+ [9] = {
365
+ shift = 5, mask = 3,
366
+ [0] = { shift = 24, mask = 1, [0] = map_mul, map_sync, },
367
+ { shift = 20, mask = 1, [0] = "strhDL", "ldrhDL", },
368
+ { shift = 20, mask = 1, [0] = "ldrdDL", "ldrsbDL", },
369
+ { shift = 20, mask = 1, [0] = "strdDL", "ldrshDL", },
370
+ },
371
+ _ = {
372
+ shift = 20, mask = 25,
373
+ [16] = { shift = 7, mask = 1, [0] = map_misc, map_mulh, },
374
+ _ = {
375
+ shift = 0, mask = 0xffffffff,
376
+ [bor(0xe1a00000)] = "nop",
377
+ _ = map_data,
378
+ }
379
+ },
380
+ }
381
+
382
+ local map_datai = {
383
+ shift = 20, mask = 31, -- NYI: decode PSR bits of msr. Decode imm12.
384
+ [16] = "movwDW", [20] = "movtDW",
385
+ [18] = { shift = 0, mask = 0xf00ff, [0] = "nopv6", _ = "msrNW", },
386
+ [22] = "msrNW",
387
+ _ = map_data,
388
+ }
389
+
390
+ local map_branch = {
391
+ shift = 24, mask = 1,
392
+ [0] = "bB", "blB"
393
+ }
394
+
395
+ local map_condins = {
396
+ [0] = map_datar, map_datai, map_load, map_load1,
397
+ map_loadm, map_branch, map_loadc, map_datac
398
+ }
399
+
400
+ -- NYI: setend.
401
+ local map_uncondins = {
402
+ [0] = false, map_simddata, map_simdload, map_preload,
403
+ false, "blxB", map_loadcu, map_datacu,
404
+ }
405
+
406
+ ------------------------------------------------------------------------------
407
+
408
+ local map_gpr = {
409
+ [0] = "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
410
+ "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc",
411
+ }
412
+
413
+ local map_cond = {
414
+ [0] = "eq", "ne", "hs", "lo", "mi", "pl", "vs", "vc",
415
+ "hi", "ls", "ge", "lt", "gt", "le", "al",
416
+ }
417
+
418
+ local map_shift = { [0] = "lsl", "lsr", "asr", "ror", }
419
+
420
+ ------------------------------------------------------------------------------
421
+
422
+ -- Output a nicely formatted line with an opcode and operands.
423
+ local function putop(ctx, text, operands)
424
+ local pos = ctx.pos
425
+ local extra = ""
426
+ if ctx.rel then
427
+ local sym = ctx.symtab[ctx.rel]
428
+ if sym then
429
+ extra = "\t->"..sym
430
+ elseif band(ctx.op, 0x0e000000) ~= 0x0a000000 then
431
+ extra = "\t; 0x"..tohex(ctx.rel)
432
+ end
433
+ end
434
+ if ctx.hexdump > 0 then
435
+ ctx.out(format("%08x %s %-5s %s%s\n",
436
+ ctx.addr+pos, tohex(ctx.op), text, concat(operands, ", "), extra))
437
+ else
438
+ ctx.out(format("%08x %-5s %s%s\n",
439
+ ctx.addr+pos, text, concat(operands, ", "), extra))
440
+ end
441
+ ctx.pos = pos + 4
442
+ end
443
+
444
+ -- Fallback for unknown opcodes.
445
+ local function unknown(ctx)
446
+ return putop(ctx, ".long", { "0x"..tohex(ctx.op) })
447
+ end
448
+
449
+ -- Format operand 2 of load/store opcodes.
450
+ local function fmtload(ctx, op, pos)
451
+ local base = map_gpr[band(rshift(op, 16), 15)]
452
+ local x, ofs
453
+ local ext = (band(op, 0x04000000) == 0)
454
+ if not ext and band(op, 0x02000000) == 0 then
455
+ ofs = band(op, 4095)
456
+ if band(op, 0x00800000) == 0 then ofs = -ofs end
457
+ if base == "pc" then ctx.rel = ctx.addr + pos + 8 + ofs end
458
+ ofs = "#"..ofs
459
+ elseif ext and band(op, 0x00400000) ~= 0 then
460
+ ofs = band(op, 15) + band(rshift(op, 4), 0xf0)
461
+ if band(op, 0x00800000) == 0 then ofs = -ofs end
462
+ if base == "pc" then ctx.rel = ctx.addr + pos + 8 + ofs end
463
+ ofs = "#"..ofs
464
+ else
465
+ ofs = map_gpr[band(op, 15)]
466
+ if ext or band(op, 0xfe0) == 0 then
467
+ elseif band(op, 0xfe0) == 0x60 then
468
+ ofs = format("%s, rrx", ofs)
469
+ else
470
+ local sh = band(rshift(op, 7), 31)
471
+ if sh == 0 then sh = 32 end
472
+ ofs = format("%s, %s #%d", ofs, map_shift[band(rshift(op, 5), 3)], sh)
473
+ end
474
+ if band(op, 0x00800000) == 0 then ofs = "-"..ofs end
475
+ end
476
+ if ofs == "#0" then
477
+ x = format("[%s]", base)
478
+ elseif band(op, 0x01000000) == 0 then
479
+ x = format("[%s], %s", base, ofs)
480
+ else
481
+ x = format("[%s, %s]", base, ofs)
482
+ end
483
+ if band(op, 0x01200000) == 0x01200000 then x = x.."!" end
484
+ return x
485
+ end
486
+
487
+ -- Format operand 2 of vector load/store opcodes.
488
+ local function fmtvload(ctx, op, pos)
489
+ local base = map_gpr[band(rshift(op, 16), 15)]
490
+ local ofs = band(op, 255)*4
491
+ if band(op, 0x00800000) == 0 then ofs = -ofs end
492
+ if base == "pc" then ctx.rel = ctx.addr + pos + 8 + ofs end
493
+ if ofs == 0 then
494
+ return format("[%s]", base)
495
+ else
496
+ return format("[%s, #%d]", base, ofs)
497
+ end
498
+ end
499
+
500
+ local function fmtvr(op, vr, sh0, sh1)
501
+ if vr == "s" then
502
+ return format("s%d", 2*band(rshift(op, sh0), 15)+band(rshift(op, sh1), 1))
503
+ else
504
+ return format("d%d", band(rshift(op, sh0), 15)+band(rshift(op, sh1-4), 16))
505
+ end
506
+ end
507
+
508
+ -- Disassemble a single instruction.
509
+ local function disass_ins(ctx)
510
+ local pos = ctx.pos
511
+ local b0, b1, b2, b3 = byte(ctx.code, pos+1, pos+4)
512
+ local op = bor(lshift(b3, 24), lshift(b2, 16), lshift(b1, 8), b0)
513
+ local operands = {}
514
+ local suffix = ""
515
+ local last, name, pat
516
+ local vr
517
+ ctx.op = op
518
+ ctx.rel = nil
519
+
520
+ local cond = rshift(op, 28)
521
+ local opat
522
+ if cond == 15 then
523
+ opat = map_uncondins[band(rshift(op, 25), 7)]
524
+ else
525
+ if cond ~= 14 then suffix = map_cond[cond] end
526
+ opat = map_condins[band(rshift(op, 25), 7)]
527
+ end
528
+ while type(opat) ~= "string" do
529
+ if not opat then return unknown(ctx) end
530
+ opat = opat[band(rshift(op, opat.shift), opat.mask)] or opat._
531
+ end
532
+ name, pat = match(opat, "^([a-z0-9]*)(.*)")
533
+ if sub(pat, 1, 1) == "." then
534
+ local s2, p2 = match(pat, "^([a-z0-9.]*)(.*)")
535
+ suffix = suffix..s2
536
+ pat = p2
537
+ end
538
+
539
+ for p in gmatch(pat, ".") do
540
+ local x = nil
541
+ if p == "D" then
542
+ x = map_gpr[band(rshift(op, 12), 15)]
543
+ elseif p == "N" then
544
+ x = map_gpr[band(rshift(op, 16), 15)]
545
+ elseif p == "S" then
546
+ x = map_gpr[band(rshift(op, 8), 15)]
547
+ elseif p == "M" then
548
+ x = map_gpr[band(op, 15)]
549
+ elseif p == "d" then
550
+ x = fmtvr(op, vr, 12, 22)
551
+ elseif p == "n" then
552
+ x = fmtvr(op, vr, 16, 7)
553
+ elseif p == "m" then
554
+ x = fmtvr(op, vr, 0, 5)
555
+ elseif p == "P" then
556
+ if band(op, 0x02000000) ~= 0 then
557
+ x = ror(band(op, 255), 2*band(rshift(op, 8), 15))
558
+ else
559
+ x = map_gpr[band(op, 15)]
560
+ if band(op, 0xff0) ~= 0 then
561
+ operands[#operands+1] = x
562
+ local s = map_shift[band(rshift(op, 5), 3)]
563
+ local r = nil
564
+ if band(op, 0xf90) == 0 then
565
+ if s == "ror" then s = "rrx" else r = "#32" end
566
+ elseif band(op, 0x10) == 0 then
567
+ r = "#"..band(rshift(op, 7), 31)
568
+ else
569
+ r = map_gpr[band(rshift(op, 8), 15)]
570
+ end
571
+ if name == "mov" then name = s; x = r
572
+ elseif r then x = format("%s %s", s, r)
573
+ else x = s end
574
+ end
575
+ end
576
+ elseif p == "L" then
577
+ x = fmtload(ctx, op, pos)
578
+ elseif p == "l" then
579
+ x = fmtvload(ctx, op, pos)
580
+ elseif p == "B" then
581
+ local addr = ctx.addr + pos + 8 + arshift(lshift(op, 8), 6)
582
+ if cond == 15 then addr = addr + band(rshift(op, 23), 2) end
583
+ ctx.rel = addr
584
+ x = "0x"..tohex(addr)
585
+ elseif p == "F" then
586
+ vr = "s"
587
+ elseif p == "G" then
588
+ vr = "d"
589
+ elseif p == "." then
590
+ suffix = suffix..(vr == "s" and ".f32" or ".f64")
591
+ elseif p == "R" then
592
+ if band(op, 0x00200000) ~= 0 and #operands == 1 then
593
+ operands[1] = operands[1].."!"
594
+ end
595
+ local t = {}
596
+ for i=0,15 do
597
+ if band(rshift(op, i), 1) == 1 then t[#t+1] = map_gpr[i] end
598
+ end
599
+ x = "{"..concat(t, ", ").."}"
600
+ elseif p == "r" then
601
+ if band(op, 0x00200000) ~= 0 and #operands == 2 then
602
+ operands[1] = operands[1].."!"
603
+ end
604
+ local s = tonumber(sub(last, 2))
605
+ local n = band(op, 255)
606
+ if vr == "d" then n = rshift(n, 1) end
607
+ operands[#operands] = format("{%s-%s%d}", last, vr, s+n-1)
608
+ elseif p == "W" then
609
+ x = band(op, 0x0fff) + band(rshift(op, 4), 0xf000)
610
+ elseif p == "T" then
611
+ x = "#0x"..tohex(band(op, 0x00ffffff), 6)
612
+ elseif p == "U" then
613
+ x = band(rshift(op, 7), 31)
614
+ if x == 0 then x = nil end
615
+ elseif p == "u" then
616
+ x = band(rshift(op, 7), 31)
617
+ if band(op, 0x40) == 0 then
618
+ if x == 0 then x = nil else x = "lsl #"..x end
619
+ else
620
+ if x == 0 then x = "asr #32" else x = "asr #"..x end
621
+ end
622
+ elseif p == "v" then
623
+ x = band(rshift(op, 7), 31)
624
+ elseif p == "w" then
625
+ x = band(rshift(op, 16), 31)
626
+ elseif p == "x" then
627
+ x = band(rshift(op, 16), 31) + 1
628
+ elseif p == "X" then
629
+ x = band(rshift(op, 16), 31) - last + 1
630
+ elseif p == "Y" then
631
+ x = band(rshift(op, 12), 0xf0) + band(op, 0x0f)
632
+ elseif p == "K" then
633
+ x = "#0x"..tohex(band(rshift(op, 4), 0x0000fff0) + band(op, 15), 4)
634
+ elseif p == "s" then
635
+ if band(op, 0x00100000) ~= 0 then suffix = "s"..suffix end
636
+ else
637
+ assert(false)
638
+ end
639
+ if x then
640
+ last = x
641
+ if type(x) == "number" then x = "#"..x end
642
+ operands[#operands+1] = x
643
+ end
644
+ end
645
+
646
+ return putop(ctx, name..suffix, operands)
647
+ end
648
+
649
+ ------------------------------------------------------------------------------
650
+
651
+ -- Disassemble a block of code.
652
+ local function disass_block(ctx, ofs, len)
653
+ if not ofs then ofs = 0 end
654
+ local stop = len and ofs+len or #ctx.code
655
+ ctx.pos = ofs
656
+ ctx.rel = nil
657
+ while ctx.pos < stop do disass_ins(ctx) end
658
+ end
659
+
660
+ -- Extended API: create a disassembler context. Then call ctx:disass(ofs, len).
661
+ local function create(code, addr, out)
662
+ local ctx = {}
663
+ ctx.code = code
664
+ ctx.addr = addr or 0
665
+ ctx.out = out or io.write
666
+ ctx.symtab = {}
667
+ ctx.disass = disass_block
668
+ ctx.hexdump = 8
669
+ return ctx
670
+ end
671
+
672
+ -- Simple API: disassemble code (a string) at address and output via out.
673
+ local function disass(code, addr, out)
674
+ create(code, addr, out):disass()
675
+ end
676
+
677
+ -- Return register name for RID.
678
+ local function regname(r)
679
+ if r < 16 then return map_gpr[r] end
680
+ return "d"..(r-16)
681
+ end
682
+
683
+ -- Public module functions.
684
+ return {
685
+ create = create,
686
+ disass = disass,
687
+ regname = regname
688
+ }
689
+