CasperSecurity

Current Path : /usr/share/doc/nodejs/api/
Upload File :
Current File : //usr/share/doc/nodejs/api/wasi.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <meta name="nodejs.org:node-version" content="v12.22.9">
  <title>WebAssembly System Interface (WASI) | Node.js v12.22.9 Documentation</title>
  <link rel="stylesheet" href="assets/style.css">
  <link rel="stylesheet" href="assets/hljs.css">
  <link rel="canonical" href="wasi.html">
</head>
<body class="alt apidoc" id="api-section-wasi">
  <div id="content" class="clearfix">
    <div id="column2" class="interior">
      <div id="intro" class="interior">
        <a href="/" title="Go back to the home page">
          Node.js
        </a>
      </div>
      <ul>
<li><a class="nav-documentation" href="documentation.html">About this documentation</a></li>
<li><a class="nav-synopsis" href="synopsis.html">Usage and example</a></li>
</ul>
<hr class="line"/>

<ul>
<li><a class="nav-assert" href="assert.html">Assertion testing</a></li>
<li><a class="nav-async_hooks" href="async_hooks.html">Async hooks</a></li>
<li><a class="nav-buffer" href="buffer.html">Buffer</a></li>
<li><a class="nav-addons" href="addons.html">C++ Addons</a></li>
<li><a class="nav-n-api" href="n-api.html">C/C++ Addons with N-API</a></li>
<li><a class="nav-embedding" href="embedding.html">C++ Embedder API</a></li>
<li><a class="nav-child_process" href="child_process.html">Child Processes</a></li>
<li><a class="nav-cluster" href="cluster.html">Cluster</a></li>
<li><a class="nav-cli" href="cli.html">Command line options</a></li>
<li><a class="nav-console" href="console.html">Console</a></li>
<li><a class="nav-crypto" href="crypto.html">Crypto</a></li>
<li><a class="nav-debugger" href="debugger.html">Debugger</a></li>
<li><a class="nav-deprecations" href="deprecations.html">Deprecated APIs</a></li>
<li><a class="nav-dns" href="dns.html">DNS</a></li>
<li><a class="nav-domain" href="domain.html">Domain</a></li>
<li><a class="nav-errors" href="errors.html">Errors</a></li>
<li><a class="nav-events" href="events.html">Events</a></li>
<li><a class="nav-fs" href="fs.html">File system</a></li>
<li><a class="nav-globals" href="globals.html">Globals</a></li>
<li><a class="nav-http" href="http.html">HTTP</a></li>
<li><a class="nav-http2" href="http2.html">HTTP/2</a></li>
<li><a class="nav-https" href="https.html">HTTPS</a></li>
<li><a class="nav-inspector" href="inspector.html">Inspector</a></li>
<li><a class="nav-intl" href="intl.html">Internationalization</a></li>
<li><a class="nav-modules" href="modules.html">Modules: CommonJS modules</a></li>
<li><a class="nav-esm" href="esm.html">Modules: ECMAScript modules</a></li>
<li><a class="nav-module" href="module.html">Modules: <code>module</code> API</a></li>
<li><a class="nav-packages" href="packages.html">Modules: Packages</a></li>
<li><a class="nav-net" href="net.html">Net</a></li>
<li><a class="nav-os" href="os.html">OS</a></li>
<li><a class="nav-path" href="path.html">Path</a></li>
<li><a class="nav-perf_hooks" href="perf_hooks.html">Performance hooks</a></li>
<li><a class="nav-policy" href="policy.html">Policies</a></li>
<li><a class="nav-process" href="process.html">Process</a></li>
<li><a class="nav-punycode" href="punycode.html">Punycode</a></li>
<li><a class="nav-querystring" href="querystring.html">Query strings</a></li>
<li><a class="nav-readline" href="readline.html">Readline</a></li>
<li><a class="nav-repl" href="repl.html">REPL</a></li>
<li><a class="nav-report" href="report.html">Report</a></li>
<li><a class="nav-stream" href="stream.html">Stream</a></li>
<li><a class="nav-string_decoder" href="string_decoder.html">String decoder</a></li>
<li><a class="nav-timers" href="timers.html">Timers</a></li>
<li><a class="nav-tls" href="tls.html">TLS/SSL</a></li>
<li><a class="nav-tracing" href="tracing.html">Trace events</a></li>
<li><a class="nav-tty" href="tty.html">TTY</a></li>
<li><a class="nav-dgram" href="dgram.html">UDP/datagram</a></li>
<li><a class="nav-url" href="url.html">URL</a></li>
<li><a class="nav-util" href="util.html">Utilities</a></li>
<li><a class="nav-v8" href="v8.html">V8</a></li>
<li><a class="nav-vm" href="vm.html">VM</a></li>
<li><a class="nav-wasi active" href="wasi.html">WASI</a></li>
<li><a class="nav-worker_threads" href="worker_threads.html">Worker threads</a></li>
<li><a class="nav-zlib" href="zlib.html">Zlib</a></li>
</ul>
<hr class="line"/>

<ul>
<li><a class="nav-https-github-com-nodejs-node" href="https://github.com/nodejs/node">Code repository and issue tracker</a></li>
</ul>

    </div>

    <div id="column1" data-id="wasi" class="interior">
      <header>
        <h1>Node.js v12.22.9 Documentation</h1>
        <div id="gtoc">
          <ul>
            <li>
              <a href="index.html">Index</a>
            </li>
            <li>
              <a href="all.html">View on single page</a>
            </li>
            <li>
              <a href="wasi.json">View as JSON</a>
            </li>
            
            <li class="edit_on_github"><a href="https://github.com/nodejs/node/edit/master/doc/api/wasi.md"><span class="github_icon"><svg height="16" width="16" viewBox="0 0 16.1 16.1" fill="currentColor"><path d="M8 0a8 8 0 0 0-2.5 15.6c.4 0 .5-.2.5-.4v-1.5c-2 .4-2.5-.5-2.7-1 0-.1-.5-.9-.8-1-.3-.2-.7-.6 0-.6.6 0 1 .6 1.2.8.7 1.2 1.9 1 2.4.7 0-.5.2-.9.5-1-1.8-.3-3.7-1-3.7-4 0-.9.3-1.6.8-2.2 0-.2-.3-1 .1-2 0 0 .7-.3 2.2.7a7.4 7.4 0 0 1 4 0c1.5-1 2.2-.8 2.2-.8.5 1.1.2 2 .1 2.1.5.6.8 1.3.8 2.2 0 3-1.9 3.7-3.6 4 .3.2.5.7.5 1.4v2.2c0 .2.1.5.5.4A8 8 0 0 0 16 8a8 8 0 0 0-8-8z"/></svg></span>Edit on GitHub</a></li>
          </ul>
        </div>
        <hr>
      </header>

      <div id="toc">
        <h2>Table of Contents</h2>
        <ul>
<li><a href="#wasi_webassembly_system_interface_wasi">WebAssembly System Interface (WASI)</a><ul>
<li><a href="#wasi_class_wasi">Class: <code>WASI</code></a><ul>
<li><a href="#wasi_new_wasi_options"><code>new WASI([options])</code></a></li>
<li><a href="#wasi_wasi_start_instance"><code>wasi.start(instance)</code></a></li>
<li><a href="#wasi_wasi_initialize_instance"><code>wasi.initialize(instance)</code></a></li>
<li><a href="#wasi_wasi_wasiimport"><code>wasi.wasiImport</code></a></li>
</ul>
</li>
</ul>
</li>
</ul>

      </div>

      <div id="apicontent">
        <h1>WebAssembly System Interface (WASI)<span><a class="mark" href="#wasi_webassembly_system_interface_wasi" id="wasi_webassembly_system_interface_wasi">#</a></span></h1>
<!--introduced_in=v12.16.0-->

<blockquote>
<p>Stability: 1 - Experimental</p>
</blockquote>
<!-- source_link=lib/wasi.js -->

<p>The WASI API provides an implementation of the <a href="https://wasi.dev/">WebAssembly System Interface</a>
specification. WASI gives sandboxed WebAssembly applications access to the
underlying operating system via a collection of POSIX-like functions.</p>
<pre><code class="language-js">&#39;use strict&#39;;
const fs = require(&#39;fs&#39;);
const { WASI } = require(&#39;wasi&#39;);
const wasi = new WASI({
  args: process.argv,
  env: process.env,
  preopens: {
    &#39;/sandbox&#39;: &#39;/some/real/path/that/wasm/can/access&#39;
  }
});
const importObject = { wasi_snapshot_preview1: wasi.wasiImport };

(async () =&gt; {
  const wasm = await WebAssembly.compile(fs.readFileSync(&#39;./demo.wasm&#39;));
  const instance = await WebAssembly.instantiate(wasm, importObject);

  wasi.start(instance);
})();
</code></pre>
<p>To run the above example, create a new WebAssembly text format file named
<code>demo.wat</code>:</p>
<pre><code class="language-text">(module
    ;; Import the required fd_write WASI function which will write the given io vectors to stdout
    ;; The function signature for fd_write is:
    ;; (File Descriptor, *iovs, iovs_len, nwritten) -&gt; Returns number of bytes written
    (import &quot;wasi_snapshot_preview1&quot; &quot;fd_write&quot; (func $fd_write (param i32 i32 i32 i32) (result i32)))

    (memory 1)
    (export &quot;memory&quot; (memory 0))

    ;; Write &#39;hello world\n&#39; to memory at an offset of 8 bytes
    ;; Note the trailing newline which is required for the text to appear
    (data (i32.const 8) &quot;hello world\n&quot;)

    (func $main (export &quot;_start&quot;)
        ;; Creating a new io vector within linear memory
        (i32.store (i32.const 0) (i32.const 8))  ;; iov.iov_base - This is a pointer to the start of the &#39;hello world\n&#39; string
        (i32.store (i32.const 4) (i32.const 12))  ;; iov.iov_len - The length of the &#39;hello world\n&#39; string

        (call $fd_write
            (i32.const 1) ;; file_descriptor - 1 for stdout
            (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0
            (i32.const 1) ;; iovs_len - We&#39;re printing 1 string stored in an iov - so one.
            (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written
        )
        drop ;; Discard the number of bytes written from the top of the stack
    )
)
</code></pre>
<p>Use <a href="https://github.com/WebAssembly/wabt">wabt</a> to compile <code>.wat</code> to <code>.wasm</code></p>
<pre><code class="language-console">$ wat2wasm demo.wat
</code></pre>
<p>The <code>--experimental-wasi-unstable-preview1</code> and <code>--experimental-wasm-bigint</code>
CLI arguments are needed for this example to run.</p>
<h2>Class: <code>WASI</code><span><a class="mark" href="#wasi_class_wasi" id="wasi_class_wasi">#</a></span></h2>
<div class="api_metadata">
<span>Added in: v12.16.0</span>
</div><p>The <code>WASI</code> class provides the WASI system call API and additional convenience
methods for working with WASI-based applications. Each <code>WASI</code> instance
represents a distinct sandbox environment. For security purposes, each <code>WASI</code>
instance must have its command line arguments, environment variables, and
sandbox directory structure configured explicitly.</p>
<h3><code>new WASI([options])</code><span><a class="mark" href="#wasi_new_wasi_options" id="wasi_new_wasi_options">#</a></span></h3>
<div class="api_metadata">
<span>Added in: v12.16.0</span>
</div><ul>
<li><code>options</code> {Object}<ul>
<li><code>args</code> {Array} An array of strings that the WebAssembly application will
see as command line arguments. The first argument is the virtual path to the
WASI command itself. <strong>Default:</strong> <code>[]</code>.</li>
<li><code>env</code> {Object} An object similar to <code>process.env</code> that the WebAssembly
application will see as its environment. <strong>Default:</strong> <code>{}</code>.</li>
<li><code>preopens</code> {Object} This object represents the WebAssembly application&#39;s
sandbox directory structure. The string keys of <code>preopens</code> are treated as
directories within the sandbox. The corresponding values in <code>preopens</code> are
the real paths to those directories on the host machine.</li>
<li><code>returnOnExit</code> {boolean} By default, WASI applications terminate the Node.js
process via the <code>__wasi_proc_exit()</code> function. Setting this option to <code>true</code>
causes <code>wasi.start()</code> to return the exit code rather than terminate the
process. <strong>Default:</strong> <code>false</code>.</li>
<li><code>stdin</code> {integer} The file descriptor used as standard input in the
WebAssembly application. <strong>Default:</strong> <code>0</code>.</li>
<li><code>stdout</code> {integer} The file descriptor used as standard output in the
WebAssembly application. <strong>Default:</strong> <code>1</code>.</li>
<li><code>stderr</code> {integer} The file descriptor used as standard error in the
WebAssembly application. <strong>Default:</strong> <code>2</code>.</li>
</ul>
</li>
</ul>
<h3><code>wasi.start(instance)</code><span><a class="mark" href="#wasi_wasi_start_instance" id="wasi_wasi_start_instance">#</a></span></h3>
<div class="api_metadata">
<span>Added in: v12.16.0</span>
</div><ul>
<li><code>instance</code> {WebAssembly.Instance}</li>
</ul>
<p>Attempt to begin execution of <code>instance</code> as a WASI command by invoking its
<code>_start()</code> export. If <code>instance</code> does not contain a <code>_start()</code> export, or if
<code>instance</code> contains an <code>_initialize()</code> export, then an exception is thrown.</p>
<p><code>start()</code> requires that <code>instance</code> exports a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory"><code>WebAssembly.Memory</code></a> named
<code>memory</code>. If <code>instance</code> does not have a <code>memory</code> export an exception is thrown.</p>
<p>If <code>start()</code> is called more than once, an exception is thrown.</p>
<h3><code>wasi.initialize(instance)</code><span><a class="mark" href="#wasi_wasi_initialize_instance" id="wasi_wasi_initialize_instance">#</a></span></h3>
<div class="api_metadata">
<span>Added in: v12.19.0</span>
</div><ul>
<li><code>instance</code> {WebAssembly.Instance}</li>
</ul>
<p>Attempt to initialize <code>instance</code> as a WASI reactor by invoking its
<code>_initialize()</code> export, if it is present. If <code>instance</code> contains a <code>_start()</code>
export, then an exception is thrown.</p>
<p><code>initialize()</code> requires that <code>instance</code> exports a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory"><code>WebAssembly.Memory</code></a> named
<code>memory</code>. If <code>instance</code> does not have a <code>memory</code> export an exception is thrown.</p>
<p>If <code>initialize()</code> is called more than once, an exception is thrown.</p>
<h3><code>wasi.wasiImport</code><span><a class="mark" href="#wasi_wasi_wasiimport" id="wasi_wasi_wasiimport">#</a></span></h3>
<div class="api_metadata">
<span>Added in: v12.16.0</span>
</div><ul>
<li>{Object}</li>
</ul>
<p><code>wasiImport</code> is an object that implements the WASI system call API. This object
should be passed as the <code>wasi_snapshot_preview1</code> import during the instantiation
of a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance"><code>WebAssembly.Instance</code></a>.</p>

        <!-- API END -->
      </div>
    </div>
  </div>
</body>
</html>

Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY