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
package/lib/device.ts ADDED
@@ -0,0 +1,329 @@
1
+ import { Application } from "./application";
2
+ import { Bus } from "./bus";
3
+ import { Cancellable } from "./cancellable";
4
+ import { Child } from "./child";
5
+ import { Crash } from "./crash";
6
+ import { Icon } from "./icon";
7
+ import { IOStream } from "./iostream";
8
+ import { Process } from "./process";
9
+ import { Session } from "./session";
10
+ import { Signal } from "./signals";
11
+ import { Spawn } from "./spawn";
12
+ import { SystemParameters } from "./system_parameters";
13
+
14
+ import { Minimatch } from "minimatch";
15
+ import { inspect } from "util";
16
+
17
+ export class Device {
18
+ spawnAdded: Signal<SpawnAddedHandler>;
19
+ spawnRemoved: Signal<SpawnRemovedHandler>;
20
+ childAdded: Signal<ChildAddedHandler>;
21
+ childRemoved: Signal<ChildRemovedHandler>;
22
+ processCrashed: Signal<ProcessCrashedHandler>;
23
+ output: Signal<OutputHandler>;
24
+ uninjected: Signal<UninjectedHandler>;
25
+ lost: Signal<DeviceLostHandler>;
26
+
27
+ bus: Bus;
28
+
29
+ constructor(private impl: any) {
30
+ this.bus = new Bus(impl.bus);
31
+
32
+ const { signals } = impl;
33
+ this.spawnAdded = new Signal<SpawnAddedHandler>(signals, "spawn-added");
34
+ this.spawnRemoved = new Signal<SpawnRemovedHandler>(signals, "spawn-removed");
35
+ this.childAdded = new Signal<ChildAddedHandler>(signals, "child-added");
36
+ this.childRemoved = new Signal<ChildRemovedHandler>(signals, "child-removed");
37
+ this.processCrashed = new Signal<ProcessCrashedHandler>(signals, "process-crashed");
38
+ this.output = new Signal<OutputHandler>(signals, "output");
39
+ this.uninjected = new Signal<UninjectedHandler>(signals, "uninjected");
40
+ this.lost = new Signal<DeviceLostHandler>(signals, "lost");
41
+ }
42
+
43
+ get id(): string {
44
+ return this.impl.id;
45
+ }
46
+
47
+ get name(): string {
48
+ return this.impl.name;
49
+ }
50
+
51
+ get icon(): Icon | null {
52
+ return this.impl.icon;
53
+ }
54
+
55
+ get type(): DeviceType {
56
+ return this.impl.type;
57
+ }
58
+
59
+ get isLost(): boolean {
60
+ return this.impl.isLost;
61
+ }
62
+
63
+ querySystemParameters(cancellable?: Cancellable): Promise<SystemParameters> {
64
+ return this.impl.querySystemParameters(cancellable);
65
+ }
66
+
67
+ getFrontmostApplication(options: FrontmostQueryOptions = {}, cancellable?: Cancellable): Promise<Application | null> {
68
+ const {
69
+ scope = null,
70
+ } = options;
71
+ return this.impl.getFrontmostApplication(scope, cancellable);
72
+ }
73
+
74
+ enumerateApplications(options: ApplicationQueryOptions = {}, cancellable?: Cancellable): Promise<Application[]> {
75
+ const {
76
+ identifiers = [],
77
+ scope = null,
78
+ } = options;
79
+ return this.impl.enumerateApplications(identifiers, scope, cancellable);
80
+ }
81
+
82
+ enumerateProcesses(options: ProcessQueryOptions = {}, cancellable?: Cancellable): Promise<Process[]> {
83
+ const {
84
+ pids = [],
85
+ scope = null,
86
+ } = options;
87
+ return this.impl.enumerateProcesses(pids, scope, cancellable);
88
+ }
89
+
90
+ async getProcess(name: string, options: ProcessMatchOptions = {}, cancellable?: Cancellable): Promise<Process> {
91
+ const {
92
+ scope = Scope.Minimal,
93
+ } = options;
94
+ const processes = await this.enumerateProcesses({ scope }, cancellable);
95
+ const mm = new Minimatch(name.toLowerCase());
96
+ const matching = processes.filter(process => mm.match(process.name.toLowerCase()));
97
+ if (matching.length === 1) {
98
+ return matching[0];
99
+ } else if (matching.length > 1) {
100
+ throw new Error("Ambiguous name; it matches: " + matching.map(process => `${process.name} (pid: ${process.pid})`).join(", "));
101
+ } else {
102
+ throw new Error("Process not found");
103
+ }
104
+ }
105
+
106
+ enableSpawnGating(cancellable?: Cancellable): Promise<void> {
107
+ return this.impl.enableSpawnGating(cancellable);
108
+ }
109
+
110
+ disableSpawnGating(cancellable?: Cancellable): Promise<void> {
111
+ return this.impl.disableSpawnGating(cancellable);
112
+ }
113
+
114
+ enumeratePendingSpawn(cancellable?: Cancellable): Promise<Spawn[]> {
115
+ return this.impl.enumeratePendingSpawn(cancellable);
116
+ }
117
+
118
+ enumeratePendingChildren(cancellable?: Cancellable): Promise<Child[]> {
119
+ return this.impl.enumeratePendingChildren(cancellable);
120
+ }
121
+
122
+ spawn(program: string | string[], options: SpawnOptions = {}, cancellable?: Cancellable): Promise<ProcessID> {
123
+ const pendingOptions = Object.assign({}, options);
124
+
125
+ let argv = consumeOption("argv");
126
+ if (typeof program !== "string") {
127
+ argv = program;
128
+ program = argv[0];
129
+ if (argv.length === 1) {
130
+ argv = null;
131
+ }
132
+ }
133
+ const envp = consumeOption("envp");
134
+ const env = consumeOption("env");
135
+ const cwd = consumeOption("cwd");
136
+ const stdio = consumeOption("stdio");
137
+ const aux = pendingOptions;
138
+
139
+ return this.impl.spawn(program, argv, envp, env, cwd, stdio, aux, cancellable);
140
+
141
+ function consumeOption(name) {
142
+ const value = pendingOptions[name];
143
+ if (value === undefined) {
144
+ return null;
145
+ }
146
+ delete pendingOptions[name];
147
+ return value;
148
+ }
149
+ }
150
+
151
+ async input(target: TargetProcess, data: Buffer, cancellable?: Cancellable): Promise<void> {
152
+ const pid = await this.getPid(target, cancellable);
153
+ return this.impl.input(pid, data, cancellable);
154
+ }
155
+
156
+ async resume(target: TargetProcess, cancellable?: Cancellable): Promise<void> {
157
+ const pid = await this.getPid(target, cancellable);
158
+ return this.impl.resume(pid, cancellable);
159
+ }
160
+
161
+ async kill(target: TargetProcess, cancellable?: Cancellable): Promise<void> {
162
+ const pid = await this.getPid(target, cancellable);
163
+ return this.impl.kill(pid, cancellable);
164
+ }
165
+
166
+ async attach(target: TargetProcess, options: SessionOptions = {}, cancellable?: Cancellable): Promise<Session> {
167
+ const {
168
+ realm = null,
169
+ persistTimeout = null,
170
+ } = options;
171
+
172
+ const pid = await this.getPid(target, cancellable);
173
+
174
+ return new Session(await this.impl.attach(pid, realm, persistTimeout, cancellable));
175
+ }
176
+
177
+ async injectLibraryFile(target: TargetProcess, path: string, entrypoint: string, data: string,
178
+ cancellable?: Cancellable): Promise<InjecteeID> {
179
+ const pid = await this.getPid(target, cancellable);
180
+ return this.impl.injectLibraryFile(pid, path, entrypoint, data, cancellable);
181
+ }
182
+
183
+ async injectLibraryBlob(target: TargetProcess, blob: Buffer, entrypoint: string, data: string,
184
+ cancellable?: Cancellable): Promise<InjecteeID> {
185
+ const pid = await this.getPid(target, cancellable);
186
+ return this.impl.injectLibraryBlob(pid, blob, entrypoint, data, cancellable);
187
+ }
188
+
189
+ async openChannel(address: string, cancellable?: Cancellable): Promise<IOStream> {
190
+ return new IOStream(await this.impl.openChannel(address, cancellable));
191
+ }
192
+
193
+ async unpair(cancellable?: Cancellable): Promise<void> {
194
+ await this.impl.unpair(cancellable);
195
+ }
196
+
197
+ private async getPid(target: TargetProcess, cancellable?: Cancellable): Promise<ProcessID> {
198
+ if (typeof target === "number") {
199
+ return target;
200
+ }
201
+
202
+ const process = await this.getProcess(target, {}, cancellable);
203
+ return process.pid;
204
+ }
205
+
206
+ [inspect.custom](depth, options) {
207
+ return "Device " + inspect({
208
+ id: this.id,
209
+ name: this.name,
210
+ icon: this.icon,
211
+ type: this.type
212
+ }, options);
213
+ }
214
+ }
215
+
216
+ export type ProcessID = number;
217
+ export type ProcessName = string;
218
+ export type InjecteeID = number;
219
+ export type FileDescriptor = number;
220
+
221
+ export type SpawnAddedHandler = (spawn: Spawn) => void;
222
+ export type SpawnRemovedHandler = (spawn: Spawn) => void;
223
+ export type ChildAddedHandler = (child: Child) => void;
224
+ export type ChildRemovedHandler = (child: Child) => void;
225
+ export type ProcessCrashedHandler = (crash: Crash) => void;
226
+ export type OutputHandler = (pid: ProcessID, fd: FileDescriptor, data: Buffer) => void;
227
+ export type UninjectedHandler = (id: InjecteeID) => void;
228
+ export type DeviceLostHandler = () => void;
229
+
230
+ export enum DeviceType {
231
+ Local = "local",
232
+ Remote = "remote",
233
+ Usb = "usb"
234
+ }
235
+
236
+ export interface FrontmostQueryOptions {
237
+ /**
238
+ * How much data to collect about the frontmost application. The default is `Scope.Minimal`,
239
+ * which means no parameters will be collected. Specify `Scope.Metadata` to collect all
240
+ * parameters except icons, which can be included by specifying `Scope.Full`.
241
+ */
242
+ scope?: Scope;
243
+ }
244
+
245
+ export interface ApplicationQueryOptions {
246
+ /**
247
+ * Limit enumeration to one or more application IDs only. Typically used to fetch additional
248
+ * details about a subset, e.g. based on user interaction.
249
+ */
250
+ identifiers?: string[];
251
+
252
+ /**
253
+ * How much data to collect about each application. The default is `Scope.Minimal`, which
254
+ * means no parameters will be collected. Specify `Scope.Metadata` to collect all parameters
255
+ * except icons, which can be included by specifying `Scope.Full`.
256
+ */
257
+ scope?: Scope;
258
+ }
259
+
260
+ export interface ProcessQueryOptions {
261
+ /**
262
+ * Limit enumeration to one or more process IDs only. Typically used to fetch additional
263
+ * details about a subset, e.g. based on user interaction.
264
+ */
265
+ pids?: number[];
266
+
267
+ /**
268
+ * How much data to collect about each process. The default is `Scope.Minimal`, which
269
+ * means no parameters will be collected. Specify `Scope.Metadata` to collect all
270
+ * parameters except icons, which can be included by specifying `Scope.Full`.
271
+ */
272
+ scope?: Scope;
273
+ }
274
+
275
+ export interface ProcessMatchOptions {
276
+ /**
277
+ * How much data to collect about the matching process. The default is `Scope.Minimal`,
278
+ * which means no parameters will be collected. Specify `Scope.Metadata` to collect all
279
+ * parameters except icons, which can be included by specifying `Scope.Full`.
280
+ */
281
+ scope?: Scope;
282
+ }
283
+
284
+ /**
285
+ * How much data to collect about a given application or process.
286
+ */
287
+ export enum Scope {
288
+ /**
289
+ * Don't collect any parameters. This is the default.
290
+ */
291
+ Minimal = "minimal",
292
+
293
+ /**
294
+ * Collect all parameters except icons.
295
+ */
296
+ Metadata = "metadata",
297
+
298
+ /**
299
+ * Collect all parameters, including icons.
300
+ */
301
+ Full = "full"
302
+ }
303
+
304
+ export interface SpawnOptions {
305
+ argv?: string[];
306
+ envp?: { [name: string]: string };
307
+ env?: { [name: string]: string };
308
+ cwd?: string;
309
+ stdio?: Stdio;
310
+
311
+ [name: string]: any;
312
+ }
313
+
314
+ export enum Stdio {
315
+ Inherit = "inherit",
316
+ Pipe = "pipe"
317
+ }
318
+
319
+ export type TargetProcess = ProcessID | ProcessName;
320
+
321
+ export interface SessionOptions {
322
+ realm?: Realm;
323
+ persistTimeout?: number;
324
+ }
325
+
326
+ export enum Realm {
327
+ Native = "native",
328
+ Emulated = "emulated",
329
+ }
@@ -0,0 +1,69 @@
1
+ import { Cancellable } from "./cancellable";
2
+ import { Device } from "./device";
3
+ import { binding } from "./native";
4
+ import { Signals, Signal, SignalHandler, SignalAdapter } from "./signals";
5
+
6
+ import { inspect } from "util";
7
+
8
+ export class DeviceManager {
9
+ private impl = new binding.DeviceManager();
10
+
11
+ added: Signal<DeviceAddedHandler>;
12
+ removed: Signal<DeviceRemovedHandler>;
13
+ changed: Signal<DevicesChangedHandler>;
14
+
15
+ constructor() {
16
+ const signals = new DeviceManagerSignals(this.impl.signals);
17
+ this.added = new Signal<DeviceAddedHandler>(signals, "added");
18
+ this.removed = new Signal<DeviceRemovedHandler>(signals, "removed");
19
+ this.changed = new Signal<DevicesChangedHandler>(signals, "changed");
20
+ }
21
+
22
+ async enumerateDevices(cancellable?: Cancellable): Promise<Device[]> {
23
+ const devices: any[] = await this.impl.enumerateDevices(cancellable);
24
+ return devices.map(impl => new Device(impl));
25
+ }
26
+
27
+ async addRemoteDevice(address: string, options: RemoteDeviceOptions = {}, cancellable?: Cancellable): Promise<Device> {
28
+ const {
29
+ certificate = null,
30
+ origin = null,
31
+ token = null,
32
+ keepaliveInterval = null,
33
+ } = options;
34
+ return new Device(await this.impl.addRemoteDevice(address, certificate, origin, token, keepaliveInterval, cancellable));
35
+ }
36
+
37
+ removeRemoteDevice(address: string, cancellable?: Cancellable): Promise<void> {
38
+ return this.impl.removeRemoteDevice(address, cancellable);
39
+ }
40
+
41
+ [inspect.custom]() {
42
+ return "DeviceManager {}";
43
+ }
44
+ }
45
+
46
+ export interface RemoteDeviceOptions {
47
+ certificate?: string;
48
+ origin?: string;
49
+ token?: string;
50
+ keepaliveInterval?: number;
51
+ }
52
+
53
+ export type DeviceAddedHandler = (device: Device) => void;
54
+ export type DeviceRemovedHandler = (device: Device) => void;
55
+ export type DevicesChangedHandler = () => void;
56
+
57
+ class DeviceManagerSignals extends SignalAdapter {
58
+ constructor(signals: Signals) {
59
+ super(signals);
60
+ }
61
+
62
+ protected getProxy(name: string, userHandler: SignalHandler): SignalHandler | null {
63
+ if (name === "added" || name === "removed") {
64
+ return impl => userHandler(new Device(impl));
65
+ }
66
+
67
+ return null;
68
+ }
69
+ }
@@ -0,0 +1,56 @@
1
+ import { AuthenticatedSessionInfo } from "./authentication";
2
+ import { binding } from "./native";
3
+
4
+ import { inspect } from "util";
5
+
6
+ export class EndpointParameters {
7
+ private impl: any;
8
+
9
+ constructor({
10
+ address = null,
11
+ port = null,
12
+ certificate = null,
13
+ origin = null,
14
+ authentication = null,
15
+ assetRoot = null,
16
+ }: EndpointParametersSubset = {}) {
17
+ let authToken: string | null = null;
18
+ let authCallback: AuthenticationCallback | null = null;
19
+ if (authentication !== null) {
20
+ if (authentication.scheme === "token") {
21
+ authToken = authentication.token;
22
+ } else {
23
+ authCallback = authentication.callback;
24
+ }
25
+ }
26
+
27
+ this.impl = new binding.EndpointParameters(address, port, certificate, origin, authToken, authCallback, assetRoot);
28
+ }
29
+
30
+ [inspect.custom]() {
31
+ return "EndpointParameters {}";
32
+ }
33
+ }
34
+
35
+ export interface EndpointParametersSubset {
36
+ address?: string;
37
+ port?: number;
38
+ certificate?: string;
39
+ origin?: string;
40
+ authentication?: AuthenticationScheme;
41
+ assetRoot?: string;
42
+ }
43
+
44
+ export type AuthenticationScheme = TokenAuthenticationScheme | CallbackAuthenticationScheme;
45
+
46
+ export interface TokenAuthenticationScheme {
47
+ scheme: "token";
48
+ token: string;
49
+ }
50
+
51
+ export interface CallbackAuthenticationScheme {
52
+ scheme: "callback";
53
+ callback: AuthenticationCallback;
54
+ }
55
+
56
+ export type AuthenticationCallback = (token: string) => Promise<AuthenticatedSessionInfo>;
package/lib/icon.ts ADDED
@@ -0,0 +1,15 @@
1
+ export type Icon = RGBAIcon | PNGIcon;
2
+
3
+ export interface RGBAIcon {
4
+ format: "rgba";
5
+ width: number;
6
+ height: number;
7
+ image: Buffer;
8
+ }
9
+
10
+ export interface PNGIcon {
11
+ format: "png";
12
+ width?: number;
13
+ height?: number;
14
+ image: Buffer;
15
+ }