frida 16.2.1 → 16.2.2

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.
Files changed (386) hide show
  1. package/BSDmakefile +6 -0
  2. package/Makefile +16 -0
  3. package/README.md +14 -11
  4. package/configure +18 -0
  5. package/configure.bat +22 -0
  6. package/dist/native.js +0 -8
  7. package/lib/application.ts +98 -0
  8. package/lib/authentication.ts +3 -0
  9. package/lib/build.py +50 -0
  10. package/lib/bus.ts +30 -0
  11. package/lib/cancellable.ts +33 -0
  12. package/lib/child.ts +15 -0
  13. package/lib/crash.ts +11 -0
  14. package/lib/device.ts +329 -0
  15. package/lib/device_manager.ts +69 -0
  16. package/lib/endpoint_parameters.ts +56 -0
  17. package/lib/icon.ts +15 -0
  18. package/lib/index.ts +311 -0
  19. package/lib/iostream.ts +78 -0
  20. package/lib/meson.build +53 -0
  21. package/lib/native.ts +9 -0
  22. package/lib/portal_membership.ts +10 -0
  23. package/lib/portal_service.ts +105 -0
  24. package/lib/process.ts +57 -0
  25. package/lib/relay.ts +44 -0
  26. package/lib/script.ts +352 -0
  27. package/lib/session.ts +113 -0
  28. package/lib/signals.ts +45 -0
  29. package/lib/socket_address.ts +35 -0
  30. package/lib/spawn.ts +4 -0
  31. package/lib/system_parameters.ts +78 -0
  32. package/make.bat +23 -0
  33. package/meson.build +160 -0
  34. package/meson.options +11 -0
  35. package/package.json +27 -6
  36. package/releng/deps.py +1133 -0
  37. package/releng/deps.toml +391 -0
  38. package/releng/devkit-assets/frida-core-example-unix.c +188 -0
  39. package/releng/devkit-assets/frida-core-example-windows.c +197 -0
  40. package/releng/devkit-assets/frida-core-example.sln +28 -0
  41. package/releng/devkit-assets/frida-core-example.vcxproj +157 -0
  42. package/releng/devkit-assets/frida-core-example.vcxproj.filters +27 -0
  43. package/releng/devkit-assets/frida-gum-example-unix.c +122 -0
  44. package/releng/devkit-assets/frida-gum-example-windows.c +132 -0
  45. package/releng/devkit-assets/frida-gum-example.sln +28 -0
  46. package/releng/devkit-assets/frida-gum-example.vcxproj +157 -0
  47. package/releng/devkit-assets/frida-gum-example.vcxproj.filters +27 -0
  48. package/releng/devkit-assets/frida-gumjs-example-unix.c +84 -0
  49. package/releng/devkit-assets/frida-gumjs-example-windows.c +91 -0
  50. package/releng/devkit-assets/frida-gumjs-example.sln +28 -0
  51. package/releng/devkit-assets/frida-gumjs-example.vcxproj +157 -0
  52. package/releng/devkit-assets/frida-gumjs-example.vcxproj.filters +27 -0
  53. package/releng/devkit.py +535 -0
  54. package/releng/env.py +420 -0
  55. package/releng/env_android.py +150 -0
  56. package/releng/env_apple.py +176 -0
  57. package/releng/env_generic.py +373 -0
  58. package/releng/frida_version.py +69 -0
  59. package/releng/machine_file.py +44 -0
  60. package/releng/machine_spec.py +290 -0
  61. package/releng/meson/meson.py +27 -0
  62. package/releng/meson/mesonbuild/__init__.py +0 -0
  63. package/releng/meson/mesonbuild/_pathlib.py +63 -0
  64. package/releng/meson/mesonbuild/_typing.py +69 -0
  65. package/releng/meson/mesonbuild/arglist.py +321 -0
  66. package/releng/meson/mesonbuild/ast/__init__.py +23 -0
  67. package/releng/meson/mesonbuild/ast/interpreter.py +441 -0
  68. package/releng/meson/mesonbuild/ast/introspection.py +374 -0
  69. package/releng/meson/mesonbuild/ast/postprocess.py +109 -0
  70. package/releng/meson/mesonbuild/ast/printer.py +620 -0
  71. package/releng/meson/mesonbuild/ast/visitor.py +161 -0
  72. package/releng/meson/mesonbuild/backend/__init__.py +0 -0
  73. package/releng/meson/mesonbuild/backend/backends.py +2047 -0
  74. package/releng/meson/mesonbuild/backend/ninjabackend.py +3808 -0
  75. package/releng/meson/mesonbuild/backend/nonebackend.py +26 -0
  76. package/releng/meson/mesonbuild/backend/vs2010backend.py +2078 -0
  77. package/releng/meson/mesonbuild/backend/vs2012backend.py +35 -0
  78. package/releng/meson/mesonbuild/backend/vs2013backend.py +34 -0
  79. package/releng/meson/mesonbuild/backend/vs2015backend.py +35 -0
  80. package/releng/meson/mesonbuild/backend/vs2017backend.py +59 -0
  81. package/releng/meson/mesonbuild/backend/vs2019backend.py +54 -0
  82. package/releng/meson/mesonbuild/backend/vs2022backend.py +54 -0
  83. package/releng/meson/mesonbuild/backend/xcodebackend.py +1781 -0
  84. package/releng/meson/mesonbuild/build.py +3249 -0
  85. package/releng/meson/mesonbuild/cargo/__init__.py +5 -0
  86. package/releng/meson/mesonbuild/cargo/builder.py +238 -0
  87. package/releng/meson/mesonbuild/cargo/cfg.py +274 -0
  88. package/releng/meson/mesonbuild/cargo/interpreter.py +733 -0
  89. package/releng/meson/mesonbuild/cargo/manifest.py +227 -0
  90. package/releng/meson/mesonbuild/cargo/version.py +95 -0
  91. package/releng/meson/mesonbuild/cmake/__init__.py +28 -0
  92. package/releng/meson/mesonbuild/cmake/common.py +331 -0
  93. package/releng/meson/mesonbuild/cmake/data/__init__.py +0 -0
  94. package/releng/meson/mesonbuild/cmake/data/preload.cmake +82 -0
  95. package/releng/meson/mesonbuild/cmake/executor.py +241 -0
  96. package/releng/meson/mesonbuild/cmake/fileapi.py +324 -0
  97. package/releng/meson/mesonbuild/cmake/generator.py +186 -0
  98. package/releng/meson/mesonbuild/cmake/interpreter.py +1267 -0
  99. package/releng/meson/mesonbuild/cmake/toolchain.py +248 -0
  100. package/releng/meson/mesonbuild/cmake/traceparser.py +814 -0
  101. package/releng/meson/mesonbuild/cmake/tracetargets.py +161 -0
  102. package/releng/meson/mesonbuild/compilers/__init__.py +86 -0
  103. package/releng/meson/mesonbuild/compilers/asm.py +307 -0
  104. package/releng/meson/mesonbuild/compilers/c.py +788 -0
  105. package/releng/meson/mesonbuild/compilers/c_function_attributes.py +143 -0
  106. package/releng/meson/mesonbuild/compilers/compilers.py +1388 -0
  107. package/releng/meson/mesonbuild/compilers/cpp.py +1035 -0
  108. package/releng/meson/mesonbuild/compilers/cs.py +136 -0
  109. package/releng/meson/mesonbuild/compilers/cuda.py +806 -0
  110. package/releng/meson/mesonbuild/compilers/cython.py +91 -0
  111. package/releng/meson/mesonbuild/compilers/d.py +861 -0
  112. package/releng/meson/mesonbuild/compilers/detect.py +1396 -0
  113. package/releng/meson/mesonbuild/compilers/fortran.py +523 -0
  114. package/releng/meson/mesonbuild/compilers/java.py +113 -0
  115. package/releng/meson/mesonbuild/compilers/mixins/__init__.py +0 -0
  116. package/releng/meson/mesonbuild/compilers/mixins/arm.py +167 -0
  117. package/releng/meson/mesonbuild/compilers/mixins/ccrx.py +113 -0
  118. package/releng/meson/mesonbuild/compilers/mixins/clang.py +170 -0
  119. package/releng/meson/mesonbuild/compilers/mixins/clike.py +1330 -0
  120. package/releng/meson/mesonbuild/compilers/mixins/compcert.py +117 -0
  121. package/releng/meson/mesonbuild/compilers/mixins/elbrus.py +93 -0
  122. package/releng/meson/mesonbuild/compilers/mixins/emscripten.py +89 -0
  123. package/releng/meson/mesonbuild/compilers/mixins/gnu.py +629 -0
  124. package/releng/meson/mesonbuild/compilers/mixins/intel.py +167 -0
  125. package/releng/meson/mesonbuild/compilers/mixins/islinker.py +120 -0
  126. package/releng/meson/mesonbuild/compilers/mixins/metrowerks.py +279 -0
  127. package/releng/meson/mesonbuild/compilers/mixins/pgi.py +88 -0
  128. package/releng/meson/mesonbuild/compilers/mixins/ti.py +130 -0
  129. package/releng/meson/mesonbuild/compilers/mixins/visualstudio.py +458 -0
  130. package/releng/meson/mesonbuild/compilers/mixins/xc16.py +111 -0
  131. package/releng/meson/mesonbuild/compilers/objc.py +120 -0
  132. package/releng/meson/mesonbuild/compilers/objcpp.py +102 -0
  133. package/releng/meson/mesonbuild/compilers/rust.py +230 -0
  134. package/releng/meson/mesonbuild/compilers/swift.py +131 -0
  135. package/releng/meson/mesonbuild/compilers/vala.py +121 -0
  136. package/releng/meson/mesonbuild/coredata.py +1532 -0
  137. package/releng/meson/mesonbuild/dependencies/__init__.py +252 -0
  138. package/releng/meson/mesonbuild/dependencies/base.py +663 -0
  139. package/releng/meson/mesonbuild/dependencies/boost.py +1083 -0
  140. package/releng/meson/mesonbuild/dependencies/cmake.py +656 -0
  141. package/releng/meson/mesonbuild/dependencies/coarrays.py +80 -0
  142. package/releng/meson/mesonbuild/dependencies/configtool.py +163 -0
  143. package/releng/meson/mesonbuild/dependencies/cuda.py +295 -0
  144. package/releng/meson/mesonbuild/dependencies/data/CMakeLists.txt +102 -0
  145. package/releng/meson/mesonbuild/dependencies/data/CMakeListsLLVM.txt +204 -0
  146. package/releng/meson/mesonbuild/dependencies/data/CMakePathInfo.txt +31 -0
  147. package/releng/meson/mesonbuild/dependencies/data/__init__.py +0 -0
  148. package/releng/meson/mesonbuild/dependencies/detect.py +225 -0
  149. package/releng/meson/mesonbuild/dependencies/dev.py +707 -0
  150. package/releng/meson/mesonbuild/dependencies/dub.py +424 -0
  151. package/releng/meson/mesonbuild/dependencies/factory.py +146 -0
  152. package/releng/meson/mesonbuild/dependencies/framework.py +111 -0
  153. package/releng/meson/mesonbuild/dependencies/hdf5.py +168 -0
  154. package/releng/meson/mesonbuild/dependencies/misc.py +618 -0
  155. package/releng/meson/mesonbuild/dependencies/mpi.py +231 -0
  156. package/releng/meson/mesonbuild/dependencies/pkgconfig.py +570 -0
  157. package/releng/meson/mesonbuild/dependencies/platform.py +52 -0
  158. package/releng/meson/mesonbuild/dependencies/python.py +431 -0
  159. package/releng/meson/mesonbuild/dependencies/qt.py +484 -0
  160. package/releng/meson/mesonbuild/dependencies/scalapack.py +142 -0
  161. package/releng/meson/mesonbuild/dependencies/ui.py +281 -0
  162. package/releng/meson/mesonbuild/depfile.py +82 -0
  163. package/releng/meson/mesonbuild/envconfig.py +480 -0
  164. package/releng/meson/mesonbuild/environment.py +987 -0
  165. package/releng/meson/mesonbuild/interpreter/__init__.py +47 -0
  166. package/releng/meson/mesonbuild/interpreter/compiler.py +900 -0
  167. package/releng/meson/mesonbuild/interpreter/dependencyfallbacks.py +386 -0
  168. package/releng/meson/mesonbuild/interpreter/interpreter.py +3595 -0
  169. package/releng/meson/mesonbuild/interpreter/interpreterobjects.py +1096 -0
  170. package/releng/meson/mesonbuild/interpreter/kwargs.py +479 -0
  171. package/releng/meson/mesonbuild/interpreter/mesonmain.py +487 -0
  172. package/releng/meson/mesonbuild/interpreter/primitives/__init__.py +29 -0
  173. package/releng/meson/mesonbuild/interpreter/primitives/array.py +108 -0
  174. package/releng/meson/mesonbuild/interpreter/primitives/boolean.py +52 -0
  175. package/releng/meson/mesonbuild/interpreter/primitives/dict.py +88 -0
  176. package/releng/meson/mesonbuild/interpreter/primitives/integer.py +86 -0
  177. package/releng/meson/mesonbuild/interpreter/primitives/range.py +38 -0
  178. package/releng/meson/mesonbuild/interpreter/primitives/string.py +247 -0
  179. package/releng/meson/mesonbuild/interpreter/type_checking.py +853 -0
  180. package/releng/meson/mesonbuild/interpreterbase/__init__.py +126 -0
  181. package/releng/meson/mesonbuild/interpreterbase/_unholder.py +25 -0
  182. package/releng/meson/mesonbuild/interpreterbase/baseobjects.py +174 -0
  183. package/releng/meson/mesonbuild/interpreterbase/decorators.py +806 -0
  184. package/releng/meson/mesonbuild/interpreterbase/disabler.py +35 -0
  185. package/releng/meson/mesonbuild/interpreterbase/exceptions.py +22 -0
  186. package/releng/meson/mesonbuild/interpreterbase/helpers.py +67 -0
  187. package/releng/meson/mesonbuild/interpreterbase/interpreterbase.py +665 -0
  188. package/releng/meson/mesonbuild/interpreterbase/operator.py +32 -0
  189. package/releng/meson/mesonbuild/linkers/__init__.py +20 -0
  190. package/releng/meson/mesonbuild/linkers/base.py +39 -0
  191. package/releng/meson/mesonbuild/linkers/detect.py +229 -0
  192. package/releng/meson/mesonbuild/linkers/linkers.py +1614 -0
  193. package/releng/meson/mesonbuild/mcompile.py +380 -0
  194. package/releng/meson/mesonbuild/mconf.py +368 -0
  195. package/releng/meson/mesonbuild/mdevenv.py +234 -0
  196. package/releng/meson/mesonbuild/mdist.py +376 -0
  197. package/releng/meson/mesonbuild/mesondata.py +38 -0
  198. package/releng/meson/mesonbuild/mesonlib.py +23 -0
  199. package/releng/meson/mesonbuild/mesonmain.py +289 -0
  200. package/releng/meson/mesonbuild/minit.py +204 -0
  201. package/releng/meson/mesonbuild/minstall.py +864 -0
  202. package/releng/meson/mesonbuild/mintro.py +667 -0
  203. package/releng/meson/mesonbuild/mlog.py +542 -0
  204. package/releng/meson/mesonbuild/modules/__init__.py +270 -0
  205. package/releng/meson/mesonbuild/modules/cmake.py +442 -0
  206. package/releng/meson/mesonbuild/modules/cuda.py +377 -0
  207. package/releng/meson/mesonbuild/modules/dlang.py +117 -0
  208. package/releng/meson/mesonbuild/modules/external_project.py +306 -0
  209. package/releng/meson/mesonbuild/modules/fs.py +323 -0
  210. package/releng/meson/mesonbuild/modules/gnome.py +2215 -0
  211. package/releng/meson/mesonbuild/modules/hotdoc.py +487 -0
  212. package/releng/meson/mesonbuild/modules/i18n.py +405 -0
  213. package/releng/meson/mesonbuild/modules/icestorm.py +123 -0
  214. package/releng/meson/mesonbuild/modules/java.py +112 -0
  215. package/releng/meson/mesonbuild/modules/keyval.py +65 -0
  216. package/releng/meson/mesonbuild/modules/modtest.py +33 -0
  217. package/releng/meson/mesonbuild/modules/pkgconfig.py +744 -0
  218. package/releng/meson/mesonbuild/modules/python.py +556 -0
  219. package/releng/meson/mesonbuild/modules/python3.py +85 -0
  220. package/releng/meson/mesonbuild/modules/qt.py +621 -0
  221. package/releng/meson/mesonbuild/modules/qt4.py +23 -0
  222. package/releng/meson/mesonbuild/modules/qt5.py +23 -0
  223. package/releng/meson/mesonbuild/modules/qt6.py +22 -0
  224. package/releng/meson/mesonbuild/modules/rust.py +355 -0
  225. package/releng/meson/mesonbuild/modules/simd.py +114 -0
  226. package/releng/meson/mesonbuild/modules/sourceset.py +291 -0
  227. package/releng/meson/mesonbuild/modules/wayland.py +151 -0
  228. package/releng/meson/mesonbuild/modules/windows.py +207 -0
  229. package/releng/meson/mesonbuild/mparser.py +1114 -0
  230. package/releng/meson/mesonbuild/msetup.py +365 -0
  231. package/releng/meson/mesonbuild/msubprojects.py +764 -0
  232. package/releng/meson/mesonbuild/mtest.py +2201 -0
  233. package/releng/meson/mesonbuild/munstable_coredata.py +107 -0
  234. package/releng/meson/mesonbuild/optinterpreter.py +276 -0
  235. package/releng/meson/mesonbuild/programs.py +367 -0
  236. package/releng/meson/mesonbuild/rewriter.py +1075 -0
  237. package/releng/meson/mesonbuild/scripts/__init__.py +10 -0
  238. package/releng/meson/mesonbuild/scripts/clangformat.py +55 -0
  239. package/releng/meson/mesonbuild/scripts/clangtidy.py +30 -0
  240. package/releng/meson/mesonbuild/scripts/cleantrees.py +35 -0
  241. package/releng/meson/mesonbuild/scripts/cmake_run_ctgt.py +103 -0
  242. package/releng/meson/mesonbuild/scripts/cmd_or_ps.ps1 +17 -0
  243. package/releng/meson/mesonbuild/scripts/copy.py +19 -0
  244. package/releng/meson/mesonbuild/scripts/coverage.py +214 -0
  245. package/releng/meson/mesonbuild/scripts/delwithsuffix.py +27 -0
  246. package/releng/meson/mesonbuild/scripts/depfixer.py +495 -0
  247. package/releng/meson/mesonbuild/scripts/depscan.py +198 -0
  248. package/releng/meson/mesonbuild/scripts/dirchanger.py +20 -0
  249. package/releng/meson/mesonbuild/scripts/env2mfile.py +402 -0
  250. package/releng/meson/mesonbuild/scripts/externalproject.py +106 -0
  251. package/releng/meson/mesonbuild/scripts/gettext.py +86 -0
  252. package/releng/meson/mesonbuild/scripts/gtkdochelper.py +286 -0
  253. package/releng/meson/mesonbuild/scripts/hotdochelper.py +40 -0
  254. package/releng/meson/mesonbuild/scripts/itstool.py +77 -0
  255. package/releng/meson/mesonbuild/scripts/meson_exe.py +115 -0
  256. package/releng/meson/mesonbuild/scripts/msgfmthelper.py +29 -0
  257. package/releng/meson/mesonbuild/scripts/pycompile.py +54 -0
  258. package/releng/meson/mesonbuild/scripts/python_info.py +121 -0
  259. package/releng/meson/mesonbuild/scripts/regen_checker.py +55 -0
  260. package/releng/meson/mesonbuild/scripts/run_tool.py +58 -0
  261. package/releng/meson/mesonbuild/scripts/scanbuild.py +57 -0
  262. package/releng/meson/mesonbuild/scripts/symbolextractor.py +322 -0
  263. package/releng/meson/mesonbuild/scripts/tags.py +44 -0
  264. package/releng/meson/mesonbuild/scripts/test_loaded_modules.py +14 -0
  265. package/releng/meson/mesonbuild/scripts/uninstall.py +41 -0
  266. package/releng/meson/mesonbuild/scripts/vcstagger.py +35 -0
  267. package/releng/meson/mesonbuild/scripts/yasm.py +24 -0
  268. package/releng/meson/mesonbuild/templates/__init__.py +0 -0
  269. package/releng/meson/mesonbuild/templates/cpptemplates.py +143 -0
  270. package/releng/meson/mesonbuild/templates/cstemplates.py +90 -0
  271. package/releng/meson/mesonbuild/templates/ctemplates.py +126 -0
  272. package/releng/meson/mesonbuild/templates/cudatemplates.py +143 -0
  273. package/releng/meson/mesonbuild/templates/dlangtemplates.py +109 -0
  274. package/releng/meson/mesonbuild/templates/fortrantemplates.py +101 -0
  275. package/releng/meson/mesonbuild/templates/javatemplates.py +94 -0
  276. package/releng/meson/mesonbuild/templates/mesontemplates.py +70 -0
  277. package/releng/meson/mesonbuild/templates/objcpptemplates.py +126 -0
  278. package/releng/meson/mesonbuild/templates/objctemplates.py +126 -0
  279. package/releng/meson/mesonbuild/templates/rusttemplates.py +79 -0
  280. package/releng/meson/mesonbuild/templates/samplefactory.py +41 -0
  281. package/releng/meson/mesonbuild/templates/sampleimpl.py +160 -0
  282. package/releng/meson/mesonbuild/templates/valatemplates.py +82 -0
  283. package/releng/meson/mesonbuild/utils/__init__.py +0 -0
  284. package/releng/meson/mesonbuild/utils/core.py +166 -0
  285. package/releng/meson/mesonbuild/utils/platform.py +27 -0
  286. package/releng/meson/mesonbuild/utils/posix.py +32 -0
  287. package/releng/meson/mesonbuild/utils/universal.py +2445 -0
  288. package/releng/meson/mesonbuild/utils/vsenv.py +126 -0
  289. package/releng/meson/mesonbuild/utils/win32.py +29 -0
  290. package/releng/meson/mesonbuild/wrap/__init__.py +59 -0
  291. package/releng/meson/mesonbuild/wrap/wrap.py +846 -0
  292. package/releng/meson/mesonbuild/wrap/wraptool.py +198 -0
  293. package/releng/meson-scripts/BSDmakefile +6 -0
  294. package/releng/meson-scripts/Makefile +16 -0
  295. package/releng/meson-scripts/configure +18 -0
  296. package/releng/meson-scripts/configure.bat +22 -0
  297. package/releng/meson-scripts/make.bat +23 -0
  298. package/releng/meson_configure.py +506 -0
  299. package/releng/meson_make.py +131 -0
  300. package/releng/mkdevkit.py +107 -0
  301. package/releng/mkfatmacho.py +54 -0
  302. package/releng/post-process-oabi.py +97 -0
  303. package/releng/progress.py +14 -0
  304. package/releng/sync-from-upstream.py +185 -0
  305. package/releng/tomlkit/tomlkit/__init__.py +59 -0
  306. package/releng/tomlkit/tomlkit/_compat.py +22 -0
  307. package/releng/tomlkit/tomlkit/_types.py +83 -0
  308. package/releng/tomlkit/tomlkit/_utils.py +158 -0
  309. package/releng/tomlkit/tomlkit/api.py +308 -0
  310. package/releng/tomlkit/tomlkit/container.py +875 -0
  311. package/releng/tomlkit/tomlkit/exceptions.py +227 -0
  312. package/releng/tomlkit/tomlkit/items.py +1967 -0
  313. package/releng/tomlkit/tomlkit/parser.py +1141 -0
  314. package/releng/tomlkit/tomlkit/py.typed +0 -0
  315. package/releng/tomlkit/tomlkit/source.py +180 -0
  316. package/releng/tomlkit/tomlkit/toml_char.py +52 -0
  317. package/releng/tomlkit/tomlkit/toml_document.py +7 -0
  318. package/releng/tomlkit/tomlkit/toml_file.py +58 -0
  319. package/releng/winenv.py +140 -0
  320. package/scripts/adjust-version.py +19 -0
  321. package/scripts/detect-version.py +40 -0
  322. package/scripts/fetch-abi-bits.py +343 -0
  323. package/scripts/install.js +23 -0
  324. package/scripts/package.py +15 -0
  325. package/src/addon.cc +76 -0
  326. package/src/application.cc +148 -0
  327. package/src/application.h +31 -0
  328. package/src/authentication.cc +174 -0
  329. package/src/authentication.h +24 -0
  330. package/src/bus.cc +167 -0
  331. package/src/bus.h +33 -0
  332. package/src/cancellable.cc +117 -0
  333. package/src/cancellable.h +31 -0
  334. package/src/child.cc +150 -0
  335. package/src/child.h +32 -0
  336. package/src/crash.cc +122 -0
  337. package/src/crash.h +30 -0
  338. package/src/device.cc +1302 -0
  339. package/src/device.h +55 -0
  340. package/src/device_manager.cc +362 -0
  341. package/src/device_manager.h +35 -0
  342. package/src/endpoint_parameters.cc +171 -0
  343. package/src/endpoint_parameters.h +28 -0
  344. package/src/glib_context.cc +62 -0
  345. package/src/glib_context.h +29 -0
  346. package/src/glib_object.cc +25 -0
  347. package/src/glib_object.h +37 -0
  348. package/src/iostream.cc +247 -0
  349. package/src/iostream.h +30 -0
  350. package/src/meson.build +26 -0
  351. package/src/operation.h +94 -0
  352. package/src/portal_membership.cc +100 -0
  353. package/src/portal_membership.h +26 -0
  354. package/src/portal_service.cc +401 -0
  355. package/src/portal_service.h +40 -0
  356. package/src/process.cc +135 -0
  357. package/src/process.h +30 -0
  358. package/src/relay.cc +139 -0
  359. package/src/relay.h +31 -0
  360. package/src/runtime.cc +443 -0
  361. package/src/runtime.h +64 -0
  362. package/src/script.cc +301 -0
  363. package/src/script.h +36 -0
  364. package/src/session.cc +860 -0
  365. package/src/session.h +42 -0
  366. package/src/signals.cc +334 -0
  367. package/src/signals.h +47 -0
  368. package/src/spawn.cc +95 -0
  369. package/src/spawn.h +27 -0
  370. package/src/usage_monitor.h +117 -0
  371. package/src/uv_context.cc +118 -0
  372. package/src/uv_context.h +40 -0
  373. package/src/win_delay_load_hook.cc +63 -0
  374. package/subprojects/frida-core.wrap +8 -0
  375. package/subprojects/nan.wrap +9 -0
  376. package/subprojects/packagefiles/nan.patch +13 -0
  377. package/test/data/index.ts +13 -0
  378. package/test/data/unixvictim-linux-x86 +0 -0
  379. package/test/data/unixvictim-linux-x86_64 +0 -0
  380. package/test/data/unixvictim-macos +0 -0
  381. package/test/device.ts +27 -0
  382. package/test/device_manager.ts +16 -0
  383. package/test/labrat.ts +32 -0
  384. package/test/script.ts +176 -0
  385. package/test/session.ts +73 -0
  386. package/tsconfig.json +18 -0
@@ -0,0 +1,5 @@
1
+ __all__ = [
2
+ 'interpret'
3
+ ]
4
+
5
+ from .interpreter import interpret
@@ -0,0 +1,238 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright © 2022-2023 Intel Corporation
3
+
4
+ """Provides helpers for building AST
5
+
6
+ This is meant to make building Meson AST from foreign (largely declarative)
7
+ build descriptions easier.
8
+ """
9
+
10
+ from __future__ import annotations
11
+ import dataclasses
12
+ import typing as T
13
+
14
+ from .. import mparser
15
+
16
+ if T.TYPE_CHECKING:
17
+ import builtins
18
+
19
+
20
+ @dataclasses.dataclass
21
+ class Builder:
22
+
23
+ filename: str
24
+
25
+ def _token(self, tid: str, value: mparser.TV_TokenTypes) -> mparser.Token[mparser.TV_TokenTypes]:
26
+ """Create a Token object, but with the line numbers stubbed out.
27
+
28
+ :param tid: the token id (such as string, number, etc)
29
+ :param filename: the filename that the token was generated from
30
+ :param value: the value of the token
31
+ :return: A Token object
32
+ """
33
+ return mparser.Token(tid, self.filename, -1, -1, -1, (-1, -1), value)
34
+
35
+ def _symbol(self, val: str) -> mparser.SymbolNode:
36
+ return mparser.SymbolNode(self._token('', val))
37
+
38
+ def assign(self, value: mparser.BaseNode, varname: str) -> mparser.AssignmentNode:
39
+ return mparser.AssignmentNode(self.identifier(varname), self._symbol('='), value)
40
+
41
+ def string(self, value: str) -> mparser.StringNode:
42
+ """Build A StringNode
43
+
44
+ :param value: the value of the string
45
+ :return: A StringNode
46
+ """
47
+ return mparser.StringNode(self._token('string', value))
48
+
49
+ def number(self, value: int) -> mparser.NumberNode:
50
+ """Build A NumberNode
51
+
52
+ :param value: the value of the number
53
+ :return: A NumberNode
54
+ """
55
+ return mparser.NumberNode(self._token('number', str(value)))
56
+
57
+ def bool(self, value: builtins.bool) -> mparser.BooleanNode:
58
+ """Build A BooleanNode
59
+
60
+ :param value: the value of the boolean
61
+ :return: A BooleanNode
62
+ """
63
+ return mparser.BooleanNode(self._token('bool', value))
64
+
65
+ def array(self, value: T.List[mparser.BaseNode]) -> mparser.ArrayNode:
66
+ """Build an Array Node
67
+
68
+ :param value: A list of nodes to insert into the array
69
+ :return: An ArrayNode built from the arguments
70
+ """
71
+ args = mparser.ArgumentNode(self._token('array', 'unused'))
72
+ args.arguments = value
73
+ return mparser.ArrayNode(self._symbol('['), args, self._symbol(']'))
74
+
75
+ def dict(self, value: T.Dict[mparser.BaseNode, mparser.BaseNode]) -> mparser.DictNode:
76
+ """Build an Dictionary Node
77
+
78
+ :param value: A dict of nodes to insert into the dictionary
79
+ :return: An DictNode built from the arguments
80
+ """
81
+ args = mparser.ArgumentNode(self._token('dict', 'unused'))
82
+ for key, val in value.items():
83
+ args.set_kwarg_no_check(key, val)
84
+ return mparser.DictNode(self._symbol('{'), args, self._symbol('}'))
85
+
86
+ def identifier(self, value: str) -> mparser.IdNode:
87
+ """Build A IdNode
88
+
89
+ :param value: the value of the boolean
90
+ :return: A BooleanNode
91
+ """
92
+ return mparser.IdNode(self._token('id', value))
93
+
94
+ def method(self, name: str, id_: mparser.BaseNode,
95
+ pos: T.Optional[T.List[mparser.BaseNode]] = None,
96
+ kw: T.Optional[T.Mapping[str, mparser.BaseNode]] = None,
97
+ ) -> mparser.MethodNode:
98
+ """Create a method call.
99
+
100
+ :param name: the name of the method
101
+ :param id_: the object to call the method of
102
+ :param pos: a list of positional arguments, defaults to None
103
+ :param kw: a dictionary of keyword arguments, defaults to None
104
+ :return: a method call object
105
+ """
106
+ args = mparser.ArgumentNode(self._token('array', 'unused'))
107
+ if pos is not None:
108
+ args.arguments = pos
109
+ if kw is not None:
110
+ args.kwargs = {self.identifier(k): v for k, v in kw.items()}
111
+ return mparser.MethodNode(id_, self._symbol('.'), self.identifier(name), self._symbol('('), args, self._symbol(')'))
112
+
113
+ def function(self, name: str,
114
+ pos: T.Optional[T.List[mparser.BaseNode]] = None,
115
+ kw: T.Optional[T.Mapping[str, mparser.BaseNode]] = None,
116
+ ) -> mparser.FunctionNode:
117
+ """Create a function call.
118
+
119
+ :param name: the name of the function
120
+ :param pos: a list of positional arguments, defaults to None
121
+ :param kw: a dictionary of keyword arguments, defaults to None
122
+ :return: a method call object
123
+ """
124
+ args = mparser.ArgumentNode(self._token('array', 'unused'))
125
+ if pos is not None:
126
+ args.arguments = pos
127
+ if kw is not None:
128
+ args.kwargs = {self.identifier(k): v for k, v in kw.items()}
129
+ return mparser.FunctionNode(self.identifier(name), self._symbol('('), args, self._symbol(')'))
130
+
131
+ def equal(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ComparisonNode:
132
+ """Create an equality operation
133
+
134
+ :param lhs: The left hand side of the equal
135
+ :param rhs: the right hand side of the equal
136
+ :return: A compraison node
137
+ """
138
+ return mparser.ComparisonNode('==', lhs, self._symbol('=='), rhs)
139
+
140
+ def not_equal(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ComparisonNode:
141
+ """Create an inequality operation
142
+
143
+ :param lhs: The left hand side of the "!="
144
+ :param rhs: the right hand side of the "!="
145
+ :return: A compraison node
146
+ """
147
+ return mparser.ComparisonNode('!=', lhs, self._symbol('!='), rhs)
148
+
149
+ def in_(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ComparisonNode:
150
+ """Create an "in" operation
151
+
152
+ :param lhs: The left hand side of the "in"
153
+ :param rhs: the right hand side of the "in"
154
+ :return: A compraison node
155
+ """
156
+ return mparser.ComparisonNode('in', lhs, self._symbol('in'), rhs)
157
+
158
+ def not_in(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ComparisonNode:
159
+ """Create an "not in" operation
160
+
161
+ :param lhs: The left hand side of the "not in"
162
+ :param rhs: the right hand side of the "not in"
163
+ :return: A compraison node
164
+ """
165
+ return mparser.ComparisonNode('notin', lhs, self._symbol('not in'), rhs)
166
+
167
+ def or_(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.OrNode:
168
+ """Create and OrNode
169
+
170
+ :param lhs: The Left of the Node
171
+ :param rhs: The Right of the Node
172
+ :return: The OrNode
173
+ """
174
+ return mparser.OrNode(lhs, self._symbol('or'), rhs)
175
+
176
+ def and_(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.AndNode:
177
+ """Create an AndNode
178
+
179
+ :param lhs: The left of the And
180
+ :param rhs: The right of the And
181
+ :return: The AndNode
182
+ """
183
+ return mparser.AndNode(lhs, self._symbol('and'), rhs)
184
+
185
+ def not_(self, value: mparser.BaseNode) -> mparser.NotNode:
186
+ """Create a not node
187
+
188
+ :param value: The value to negate
189
+ :return: The NotNode
190
+ """
191
+ return mparser.NotNode(self._token('not', ''), self._symbol('not'), value)
192
+
193
+ def block(self, lines: T.List[mparser.BaseNode]) -> mparser.CodeBlockNode:
194
+ block = mparser.CodeBlockNode(self._token('node', ''))
195
+ block.lines = lines
196
+ return block
197
+
198
+ def plus(self, lhs: mparser.BaseNode, rhs: mparser.BaseNode) -> mparser.ArithmeticNode:
199
+ """Create an addition node
200
+
201
+ :param lhs: The left of the addition
202
+ :param rhs: The right of the addition
203
+ :return: The ArithmeticNode
204
+ """
205
+ return mparser.ArithmeticNode('add', lhs, self._symbol('+'), rhs)
206
+
207
+ def plusassign(self, value: mparser.BaseNode, varname: str) -> mparser.PlusAssignmentNode:
208
+ """Create a "+=" node
209
+
210
+ :param value: The value to add
211
+ :param varname: The variable to assign
212
+ :return: The PlusAssignmentNode
213
+ """
214
+ return mparser.PlusAssignmentNode(self.identifier(varname), self._symbol('+='), value)
215
+
216
+ def if_(self, condition: mparser.BaseNode, block: mparser.CodeBlockNode) -> mparser.IfClauseNode:
217
+ """Create a "if" block
218
+
219
+ :param condition: The condition
220
+ :param block: Lines inside the condition
221
+ :return: The IfClauseNode
222
+ """
223
+ clause = mparser.IfClauseNode(condition)
224
+ clause.ifs.append(mparser.IfNode(clause, self._symbol('if'), condition, block))
225
+ clause.elseblock = mparser.EmptyNode(-1, -1, self.filename)
226
+ return clause
227
+
228
+ def foreach(self, varnames: T.List[str], items: mparser.BaseNode, block: mparser.CodeBlockNode) -> mparser.ForeachClauseNode:
229
+ """Create a "foreach" loop
230
+
231
+ :param varnames: Iterator variable names (one for list, two for dict).
232
+ :param items: The list of dict to iterate
233
+ :param block: Lines inside the loop
234
+ :return: The ForeachClauseNode
235
+ """
236
+ varids = [self.identifier(i) for i in varnames]
237
+ commas = [self._symbol(',') for i in range(len(varnames) - 1)]
238
+ return mparser.ForeachClauseNode(self._symbol('foreach'), varids, commas, self._symbol(':'), items, block, self._symbol('endforeach'))
@@ -0,0 +1,274 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright © 2022-2023 Intel Corporation
3
+
4
+ """Rust CFG parser.
5
+
6
+ Rust uses its `cfg()` format in cargo.
7
+
8
+ This may have the following functions:
9
+ - all()
10
+ - any()
11
+ - not()
12
+
13
+ And additionally is made up of `identifier [ = str]`. Where the str is optional,
14
+ so you could have examples like:
15
+ ```
16
+ [target.`cfg(unix)`.dependencies]
17
+ [target.'cfg(target_arch = "x86_64")'.dependencies]
18
+ [target.'cfg(all(target_arch = "x86_64", target_arch = "x86"))'.dependencies]
19
+ ```
20
+ """
21
+
22
+ from __future__ import annotations
23
+ import dataclasses
24
+ import enum
25
+ import functools
26
+ import typing as T
27
+
28
+
29
+ from . import builder
30
+ from .. import mparser
31
+ from ..mesonlib import MesonBugException
32
+
33
+ if T.TYPE_CHECKING:
34
+ _T = T.TypeVar('_T')
35
+ _LEX_TOKEN = T.Tuple['TokenType', T.Optional[str]]
36
+ _LEX_STREAM = T.Iterable[_LEX_TOKEN]
37
+ _LEX_STREAM_AH = T.Iterator[T.Tuple[_LEX_TOKEN, T.Optional[_LEX_TOKEN]]]
38
+
39
+
40
+ class TokenType(enum.Enum):
41
+
42
+ LPAREN = enum.auto()
43
+ RPAREN = enum.auto()
44
+ STRING = enum.auto()
45
+ IDENTIFIER = enum.auto()
46
+ ALL = enum.auto()
47
+ ANY = enum.auto()
48
+ NOT = enum.auto()
49
+ COMMA = enum.auto()
50
+ EQUAL = enum.auto()
51
+
52
+
53
+ def lexer(raw: str) -> _LEX_STREAM:
54
+ """Lex a cfg() expression.
55
+
56
+ :param raw: The raw cfg() expression
57
+ :return: An iterable of tokens
58
+ """
59
+ buffer: T.List[str] = []
60
+ is_string: bool = False
61
+ for s in raw:
62
+ if s.isspace() or s in {')', '(', ',', '='} or (s == '"' and buffer):
63
+ val = ''.join(buffer)
64
+ buffer.clear()
65
+ if is_string:
66
+ yield (TokenType.STRING, val)
67
+ elif val == 'any':
68
+ yield (TokenType.ANY, None)
69
+ elif val == 'all':
70
+ yield (TokenType.ALL, None)
71
+ elif val == 'not':
72
+ yield (TokenType.NOT, None)
73
+ elif val:
74
+ yield (TokenType.IDENTIFIER, val)
75
+
76
+ if s == '(':
77
+ yield (TokenType.LPAREN, None)
78
+ continue
79
+ elif s == ')':
80
+ yield (TokenType.RPAREN, None)
81
+ continue
82
+ elif s == ',':
83
+ yield (TokenType.COMMA, None)
84
+ continue
85
+ elif s == '=':
86
+ yield (TokenType.EQUAL, None)
87
+ continue
88
+ elif s.isspace():
89
+ continue
90
+
91
+ if s == '"':
92
+ is_string = not is_string
93
+ else:
94
+ buffer.append(s)
95
+ if buffer:
96
+ # This should always be an identifier
97
+ yield (TokenType.IDENTIFIER, ''.join(buffer))
98
+
99
+
100
+ def lookahead(iter: T.Iterator[_T]) -> T.Iterator[T.Tuple[_T, T.Optional[_T]]]:
101
+ """Get the current value of the iterable, and the next if possible.
102
+
103
+ :param iter: The iterable to look into
104
+ :yield: A tuple of the current value, and, if possible, the next
105
+ :return: nothing
106
+ """
107
+ current: _T
108
+ next_: T.Optional[_T]
109
+ try:
110
+ next_ = next(iter)
111
+ except StopIteration:
112
+ # This is an empty iterator, there's nothing to look ahead to
113
+ return
114
+
115
+ while True:
116
+ current = next_
117
+ try:
118
+ next_ = next(iter)
119
+ except StopIteration:
120
+ next_ = None
121
+
122
+ yield current, next_
123
+
124
+ if next_ is None:
125
+ break
126
+
127
+
128
+ @dataclasses.dataclass
129
+ class IR:
130
+
131
+ """Base IR node for Cargo CFG."""
132
+
133
+
134
+ @dataclasses.dataclass
135
+ class String(IR):
136
+
137
+ value: str
138
+
139
+
140
+ @dataclasses.dataclass
141
+ class Identifier(IR):
142
+
143
+ value: str
144
+
145
+
146
+ @dataclasses.dataclass
147
+ class Equal(IR):
148
+
149
+ lhs: IR
150
+ rhs: IR
151
+
152
+
153
+ @dataclasses.dataclass
154
+ class Any(IR):
155
+
156
+ args: T.List[IR]
157
+
158
+
159
+ @dataclasses.dataclass
160
+ class All(IR):
161
+
162
+ args: T.List[IR]
163
+
164
+
165
+ @dataclasses.dataclass
166
+ class Not(IR):
167
+
168
+ value: IR
169
+
170
+
171
+ def _parse(ast: _LEX_STREAM_AH) -> IR:
172
+ (token, value), n_stream = next(ast)
173
+ if n_stream is not None:
174
+ ntoken, _ = n_stream
175
+ else:
176
+ ntoken, _ = (None, None)
177
+
178
+ stream: T.List[_LEX_TOKEN]
179
+ if token is TokenType.IDENTIFIER:
180
+ if ntoken is TokenType.EQUAL:
181
+ return Equal(Identifier(value), _parse(ast))
182
+ if token is TokenType.STRING:
183
+ return String(value)
184
+ if token is TokenType.EQUAL:
185
+ # In this case the previous caller already has handled the equal
186
+ return _parse(ast)
187
+ if token in {TokenType.ANY, TokenType.ALL}:
188
+ type_ = All if token is TokenType.ALL else Any
189
+ assert ntoken is TokenType.LPAREN
190
+ next(ast) # advance the iterator to get rid of the LPAREN
191
+ stream = []
192
+ args: T.List[IR] = []
193
+ while token is not TokenType.RPAREN:
194
+ (token, value), _ = next(ast)
195
+ if token is TokenType.COMMA:
196
+ args.append(_parse(lookahead(iter(stream))))
197
+ stream.clear()
198
+ else:
199
+ stream.append((token, value))
200
+ if stream:
201
+ args.append(_parse(lookahead(iter(stream))))
202
+ return type_(args)
203
+ if token is TokenType.NOT:
204
+ next(ast) # advance the iterator to get rid of the LPAREN
205
+ stream = []
206
+ # Mypy can't figure out that token is overridden inside the while loop
207
+ while token is not TokenType.RPAREN: # type: ignore
208
+ (token, value), _ = next(ast)
209
+ stream.append((token, value))
210
+ return Not(_parse(lookahead(iter(stream))))
211
+
212
+ raise MesonBugException(f'Unhandled Cargo token: {token}')
213
+
214
+
215
+ def parse(ast: _LEX_STREAM) -> IR:
216
+ """Parse the tokenized list into Meson AST.
217
+
218
+ :param ast: An iterable of Tokens
219
+ :return: An mparser Node to be used as a conditional
220
+ """
221
+ ast_i: _LEX_STREAM_AH = lookahead(iter(ast))
222
+ return _parse(ast_i)
223
+
224
+
225
+ @functools.singledispatch
226
+ def ir_to_meson(ir: T.Any, build: builder.Builder) -> mparser.BaseNode:
227
+ raise NotImplementedError
228
+
229
+
230
+ @ir_to_meson.register
231
+ def _(ir: String, build: builder.Builder) -> mparser.BaseNode:
232
+ return build.string(ir.value)
233
+
234
+
235
+ @ir_to_meson.register
236
+ def _(ir: Identifier, build: builder.Builder) -> mparser.BaseNode:
237
+ host_machine = build.identifier('host_machine')
238
+ if ir.value == "target_arch":
239
+ return build.method('cpu_family', host_machine)
240
+ elif ir.value in {"target_os", "target_family"}:
241
+ return build.method('system', host_machine)
242
+ elif ir.value == "target_endian":
243
+ return build.method('endian', host_machine)
244
+ raise MesonBugException(f"Unhandled Cargo identifier: {ir.value}")
245
+
246
+
247
+ @ir_to_meson.register
248
+ def _(ir: Equal, build: builder.Builder) -> mparser.BaseNode:
249
+ return build.equal(ir_to_meson(ir.lhs, build), ir_to_meson(ir.rhs, build))
250
+
251
+
252
+ @ir_to_meson.register
253
+ def _(ir: Not, build: builder.Builder) -> mparser.BaseNode:
254
+ return build.not_(ir_to_meson(ir.value, build))
255
+
256
+
257
+ @ir_to_meson.register
258
+ def _(ir: Any, build: builder.Builder) -> mparser.BaseNode:
259
+ args = iter(reversed(ir.args))
260
+ last = next(args)
261
+ cur = build.or_(ir_to_meson(next(args), build), ir_to_meson(last, build))
262
+ for a in args:
263
+ cur = build.or_(ir_to_meson(a, build), cur)
264
+ return cur
265
+
266
+
267
+ @ir_to_meson.register
268
+ def _(ir: All, build: builder.Builder) -> mparser.BaseNode:
269
+ args = iter(reversed(ir.args))
270
+ last = next(args)
271
+ cur = build.and_(ir_to_meson(next(args), build), ir_to_meson(last, build))
272
+ for a in args:
273
+ cur = build.and_(ir_to_meson(a, build), cur)
274
+ return cur