frida 16.2.0 → 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,367 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2013-2020 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ """Representations and logic for External and Internal Programs."""
7
+
8
+ import functools
9
+ import os
10
+ import shutil
11
+ import stat
12
+ import sys
13
+ import re
14
+ import typing as T
15
+ from pathlib import Path
16
+
17
+ from . import mesonlib
18
+ from . import mlog
19
+ from .mesonlib import MachineChoice, OrderedSet
20
+
21
+ if T.TYPE_CHECKING:
22
+ from .environment import Environment
23
+ from .interpreter import Interpreter
24
+
25
+
26
+ class ExternalProgram(mesonlib.HoldableObject):
27
+
28
+ """A program that is found on the system."""
29
+
30
+ windows_exts = ('exe', 'msc', 'com', 'bat', 'cmd')
31
+ for_machine = MachineChoice.BUILD
32
+
33
+ def __init__(self, name: str, command: T.Optional[T.List[str]] = None,
34
+ silent: bool = False, search_dir: T.Optional[str] = None,
35
+ extra_search_dirs: T.Optional[T.List[str]] = None):
36
+ self.name = name
37
+ self.path: T.Optional[str] = None
38
+ self.cached_version: T.Optional[str] = None
39
+ if command is not None:
40
+ self.command = mesonlib.listify(command)
41
+ if mesonlib.is_windows():
42
+ cmd = self.command[0]
43
+ args = self.command[1:]
44
+ # Check whether the specified cmd is a path to a script, in
45
+ # which case we need to insert the interpreter. If not, try to
46
+ # use it as-is.
47
+ ret = self._shebang_to_cmd(cmd)
48
+ if ret:
49
+ self.command = ret + args
50
+ else:
51
+ self.command = [cmd] + args
52
+ else:
53
+ all_search_dirs = [search_dir]
54
+ if extra_search_dirs:
55
+ all_search_dirs += extra_search_dirs
56
+ for d in all_search_dirs:
57
+ self.command = self._search(name, d)
58
+ if self.found():
59
+ break
60
+
61
+ if self.found():
62
+ # Set path to be the last item that is actually a file (in order to
63
+ # skip options in something like ['python', '-u', 'file.py']. If we
64
+ # can't find any components, default to the last component of the path.
65
+ for arg in reversed(self.command):
66
+ if arg is not None and os.path.isfile(arg):
67
+ self.path = arg
68
+ break
69
+ else:
70
+ self.path = self.command[-1]
71
+
72
+ if not silent:
73
+ # ignore the warning because derived classes never call this __init__
74
+ # method, and thus only the found() method of this class is ever executed
75
+ if self.found(): # lgtm [py/init-calls-subclass]
76
+ mlog.log('Program', mlog.bold(name), 'found:', mlog.green('YES'),
77
+ '(%s)' % ' '.join(self.command))
78
+ else:
79
+ mlog.log('Program', mlog.bold(name), 'found:', mlog.red('NO'))
80
+
81
+ def summary_value(self) -> T.Union[str, mlog.AnsiDecorator]:
82
+ if not self.found():
83
+ return mlog.red('NO')
84
+ return self.path
85
+
86
+ def __repr__(self) -> str:
87
+ r = '<{} {!r} -> {!r}>'
88
+ return r.format(self.__class__.__name__, self.name, self.command)
89
+
90
+ def description(self) -> str:
91
+ '''Human friendly description of the command'''
92
+ return ' '.join(self.command)
93
+
94
+ def get_version(self, interpreter: T.Optional['Interpreter'] = None) -> str:
95
+ if not self.cached_version:
96
+ raw_cmd = self.get_command() + ['--version']
97
+ if interpreter:
98
+ res = interpreter.run_command_impl((self, ['--version']),
99
+ {'capture': True,
100
+ 'check': True,
101
+ 'env': mesonlib.EnvironmentVariables()},
102
+ True)
103
+ o, e = res.stdout, res.stderr
104
+ else:
105
+ p, o, e = mesonlib.Popen_safe(raw_cmd)
106
+ if p.returncode != 0:
107
+ cmd_str = mesonlib.join_args(raw_cmd)
108
+ raise mesonlib.MesonException(f'Command {cmd_str!r} failed with status {p.returncode}.')
109
+ output = o.strip()
110
+ if not output:
111
+ output = e.strip()
112
+ match = re.search(r'([0-9][0-9\.]+)', output)
113
+ if not match:
114
+ raise mesonlib.MesonException(f'Could not find a version number in output of {raw_cmd!r}')
115
+ self.cached_version = match.group(1)
116
+ return self.cached_version
117
+
118
+ @classmethod
119
+ def from_bin_list(cls, env: 'Environment', for_machine: MachineChoice, name: str) -> 'ExternalProgram':
120
+ # There is a static `for_machine` for this class because the binary
121
+ # always runs on the build platform. (It's host platform is our build
122
+ # platform.) But some external programs have a target platform, so this
123
+ # is what we are specifying here.
124
+ command = env.lookup_binary_entry(for_machine, name)
125
+ if command is None:
126
+ return NonExistingExternalProgram()
127
+ return cls.from_entry(name, command)
128
+
129
+ @staticmethod
130
+ @functools.lru_cache(maxsize=None)
131
+ def _windows_sanitize_path(path: str) -> str:
132
+ # Ensure that we use USERPROFILE even when inside MSYS, MSYS2, Cygwin, etc.
133
+ if 'USERPROFILE' not in os.environ:
134
+ return path
135
+ # The WindowsApps directory is a bit of a problem. It contains
136
+ # some zero-sized .exe files which have "reparse points", that
137
+ # might either launch an installed application, or might open
138
+ # a page in the Windows Store to download the application.
139
+ #
140
+ # To handle the case where the python interpreter we're
141
+ # running on came from the Windows Store, if we see the
142
+ # WindowsApps path in the search path, replace it with
143
+ # dirname(sys.executable).
144
+ appstore_dir = Path(os.environ['USERPROFILE']) / 'AppData' / 'Local' / 'Microsoft' / 'WindowsApps'
145
+ paths = []
146
+ for each in path.split(os.pathsep):
147
+ if Path(each) != appstore_dir:
148
+ paths.append(each)
149
+ elif 'WindowsApps' in sys.executable:
150
+ paths.append(os.path.dirname(sys.executable))
151
+ return os.pathsep.join(paths)
152
+
153
+ @staticmethod
154
+ def from_entry(name: str, command: T.Union[str, T.List[str]]) -> 'ExternalProgram':
155
+ if isinstance(command, list):
156
+ if len(command) == 1:
157
+ command = command[0]
158
+ # We cannot do any searching if the command is a list, and we don't
159
+ # need to search if the path is an absolute path.
160
+ if isinstance(command, list) or os.path.isabs(command):
161
+ if isinstance(command, str):
162
+ command = [command]
163
+ return ExternalProgram(name, command=command, silent=True)
164
+ assert isinstance(command, str)
165
+ # Search for the command using the specified string!
166
+ return ExternalProgram(command, silent=True)
167
+
168
+ @staticmethod
169
+ def _shebang_to_cmd(script: str) -> T.Optional[T.List[str]]:
170
+ """
171
+ Check if the file has a shebang and manually parse it to figure out
172
+ the interpreter to use. This is useful if the script is not executable
173
+ or if we're on Windows (which does not understand shebangs).
174
+ """
175
+ try:
176
+ with open(script, encoding='utf-8') as f:
177
+ first_line = f.readline().strip()
178
+ if first_line.startswith('#!'):
179
+ # In a shebang, everything before the first space is assumed to
180
+ # be the command to run and everything after the first space is
181
+ # the single argument to pass to that command. So we must split
182
+ # exactly once.
183
+ commands = first_line[2:].split('#')[0].strip().split(maxsplit=1)
184
+ if mesonlib.is_windows():
185
+ # Windows does not have UNIX paths so remove them,
186
+ # but don't remove Windows paths
187
+ if commands[0].startswith('/'):
188
+ commands[0] = commands[0].split('/')[-1]
189
+ if len(commands) > 0 and commands[0] == 'env':
190
+ commands = commands[1:]
191
+ # Windows does not ship python3.exe, but we know the path to it
192
+ if len(commands) > 0 and commands[0] == 'python3':
193
+ commands = mesonlib.python_command + commands[1:]
194
+ elif mesonlib.is_haiku():
195
+ # Haiku does not have /usr, but a lot of scripts assume that
196
+ # /usr/bin/env always exists. Detect that case and run the
197
+ # script with the interpreter after it.
198
+ if commands[0] == '/usr/bin/env':
199
+ commands = commands[1:]
200
+ # We know what python3 is, we're running on it
201
+ if len(commands) > 0 and commands[0] == 'python3':
202
+ commands = mesonlib.python_command + commands[1:]
203
+ else:
204
+ # Replace python3 with the actual python3 that we are using
205
+ if commands[0] == '/usr/bin/env' and commands[1] == 'python3':
206
+ commands = mesonlib.python_command + commands[2:]
207
+ elif commands[0].split('/')[-1] == 'python3':
208
+ commands = mesonlib.python_command + commands[1:]
209
+ return commands + [script]
210
+ except Exception as e:
211
+ mlog.debug(str(e))
212
+ mlog.debug(f'Unusable script {script!r}')
213
+ return None
214
+
215
+ def _is_executable(self, path: str) -> bool:
216
+ suffix = os.path.splitext(path)[-1].lower()[1:]
217
+ execmask = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
218
+ if mesonlib.is_windows():
219
+ if suffix in self.windows_exts:
220
+ return True
221
+ elif os.stat(path).st_mode & execmask:
222
+ return not os.path.isdir(path)
223
+ return False
224
+
225
+ def _search_dir(self, name: str, search_dir: T.Optional[str]) -> T.Optional[list]:
226
+ if search_dir is None:
227
+ return None
228
+ trial = os.path.join(search_dir, name)
229
+ if os.path.exists(trial):
230
+ if self._is_executable(trial):
231
+ return [trial]
232
+ # Now getting desperate. Maybe it is a script file that is
233
+ # a) not chmodded executable, or
234
+ # b) we are on windows so they can't be directly executed.
235
+ return self._shebang_to_cmd(trial)
236
+ else:
237
+ if mesonlib.is_windows():
238
+ for ext in self.windows_exts:
239
+ trial_ext = f'{trial}.{ext}'
240
+ if os.path.exists(trial_ext):
241
+ return [trial_ext]
242
+ return None
243
+
244
+ def _search_windows_special_cases(self, name: str, command: str) -> T.List[T.Optional[str]]:
245
+ '''
246
+ Lots of weird Windows quirks:
247
+ 1. PATH search for @name returns files with extensions from PATHEXT,
248
+ but only self.windows_exts are executable without an interpreter.
249
+ 2. @name might be an absolute path to an executable, but without the
250
+ extension. This works inside MinGW so people use it a lot.
251
+ 3. The script is specified without an extension, in which case we have
252
+ to manually search in PATH.
253
+ 4. More special-casing for the shebang inside the script.
254
+ '''
255
+ if command:
256
+ # On Windows, even if the PATH search returned a full path, we can't be
257
+ # sure that it can be run directly if it's not a native executable.
258
+ # For instance, interpreted scripts sometimes need to be run explicitly
259
+ # with an interpreter if the file association is not done properly.
260
+ name_ext = os.path.splitext(command)[1]
261
+ if name_ext[1:].lower() in self.windows_exts:
262
+ # Good, it can be directly executed
263
+ return [command]
264
+ # Try to extract the interpreter from the shebang
265
+ commands = self._shebang_to_cmd(command)
266
+ if commands:
267
+ return commands
268
+ return [None]
269
+ # Maybe the name is an absolute path to a native Windows
270
+ # executable, but without the extension. This is technically wrong,
271
+ # but many people do it because it works in the MinGW shell.
272
+ if os.path.isabs(name):
273
+ for ext in self.windows_exts:
274
+ command = f'{name}.{ext}'
275
+ if os.path.exists(command):
276
+ return [command]
277
+ # On Windows, interpreted scripts must have an extension otherwise they
278
+ # cannot be found by a standard PATH search. So we do a custom search
279
+ # where we manually search for a script with a shebang in PATH.
280
+ search_dirs = self._windows_sanitize_path(os.environ.get('PATH', '')).split(';')
281
+ for search_dir in search_dirs:
282
+ commands = self._search_dir(name, search_dir)
283
+ if commands:
284
+ return commands
285
+ return [None]
286
+
287
+ def _search(self, name: str, search_dir: T.Optional[str]) -> T.List[T.Optional[str]]:
288
+ '''
289
+ Search in the specified dir for the specified executable by name
290
+ and if not found search in PATH
291
+ '''
292
+ commands = self._search_dir(name, search_dir)
293
+ if commands:
294
+ return commands
295
+ # If there is a directory component, do not look in PATH
296
+ if os.path.dirname(name) and not os.path.isabs(name):
297
+ return [None]
298
+ # Do a standard search in PATH
299
+ path = os.environ.get('PATH', None)
300
+ if mesonlib.is_windows() and path:
301
+ path = self._windows_sanitize_path(path)
302
+ command = shutil.which(name, path=path)
303
+ if mesonlib.is_windows():
304
+ return self._search_windows_special_cases(name, command)
305
+ # On UNIX-like platforms, shutil.which() is enough to find
306
+ # all executables whether in PATH or with an absolute path
307
+ return [command]
308
+
309
+ def found(self) -> bool:
310
+ return self.command[0] is not None
311
+
312
+ def get_command(self) -> T.List[str]:
313
+ return self.command[:]
314
+
315
+ def get_path(self) -> T.Optional[str]:
316
+ return self.path
317
+
318
+ def get_name(self) -> str:
319
+ return self.name
320
+
321
+
322
+ class NonExistingExternalProgram(ExternalProgram): # lgtm [py/missing-call-to-init]
323
+ "A program that will never exist"
324
+
325
+ def __init__(self, name: str = 'nonexistingprogram') -> None:
326
+ self.name = name
327
+ self.command = [None]
328
+ self.path = None
329
+
330
+ def __repr__(self) -> str:
331
+ r = '<{} {!r} -> {!r}>'
332
+ return r.format(self.__class__.__name__, self.name, self.command)
333
+
334
+ def found(self) -> bool:
335
+ return False
336
+
337
+
338
+ class OverrideProgram(ExternalProgram):
339
+
340
+ """A script overriding a program."""
341
+
342
+
343
+ def find_external_program(env: 'Environment', for_machine: MachineChoice, name: str,
344
+ display_name: str, default_names: T.List[str],
345
+ allow_default_for_cross: bool = True) -> T.Generator['ExternalProgram', None, None]:
346
+ """Find an external program, checking the cross file plus any default options."""
347
+ potential_names = OrderedSet(default_names)
348
+ potential_names.add(name)
349
+ # Lookup in cross or machine file.
350
+ for potential_name in potential_names:
351
+ potential_cmd = env.lookup_binary_entry(for_machine, potential_name)
352
+ if potential_cmd is not None:
353
+ mlog.debug(f'{display_name} binary for {for_machine} specified from cross file, native file, '
354
+ f'or env var as {potential_cmd}')
355
+ yield ExternalProgram.from_entry(potential_name, potential_cmd)
356
+ # We never fallback if the user-specified option is no good, so
357
+ # stop returning options.
358
+ return
359
+ mlog.debug(f'{display_name} binary missing from cross or native file, or env var undefined.')
360
+ # Fallback on hard-coded defaults, if a default binary is allowed for use
361
+ # with cross targets, or if this is not a cross target
362
+ if allow_default_for_cross or not (for_machine is MachineChoice.HOST and env.is_cross_build(for_machine)):
363
+ for potential_path in default_names:
364
+ mlog.debug(f'Trying a default {display_name} fallback at', potential_path)
365
+ yield ExternalProgram(potential_path, silent=True)
366
+ else:
367
+ mlog.debug('Default target is not allowed for cross use')