mirror of
https://github.com/pezkuwichain/wasm-instrument.git
synced 2026-06-09 20:11:06 +00:00
various samples and experiments
This commit is contained in:
+1
-1
@@ -35,7 +35,7 @@ fn main() {
|
||||
// Loading module
|
||||
let module = parity_wasm::deserialize_file(&args[1]).unwrap();
|
||||
|
||||
let replaced_funcs = vec!["_free", "_malloc"];
|
||||
let replaced_funcs = vec!["_free", "_malloc", "_storage_read", "_storage_write", "_storage_size"];
|
||||
|
||||
// Save import functions number for later
|
||||
let import_funcs_total = module
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
int data;
|
||||
|
||||
extern void log_event(void* ptr);
|
||||
|
||||
int main() {
|
||||
log_event(0);
|
||||
}
|
||||
|
||||
void call() {
|
||||
log_event(0);
|
||||
}
|
||||
|
||||
/* produces the following code (with gas counter and call optimization)
|
||||
(module
|
||||
(type (;0;) (func (param i32) (result i32)))
|
||||
(type (;1;) (func))
|
||||
(type (;2;) (func (param i32)))
|
||||
(import "env" "memoryBase" (global (;0;) i32))
|
||||
(import "env" "memory" (memory (;0;) 256))
|
||||
(import "env" "table" (table (;0;) 0 anyfunc))
|
||||
(import "env" "gas" (func (;0;) (type 2)))
|
||||
(func (;1;) (type 0) (param i32) (result i32)
|
||||
i32.const 2
|
||||
call 0
|
||||
block i32 ;; label = @1
|
||||
i32.const 13
|
||||
call 0
|
||||
get_global 0
|
||||
i32.const 5242880
|
||||
i32.add
|
||||
get_global 0
|
||||
i32.const 5242880
|
||||
i32.add
|
||||
i32.load
|
||||
get_local 0
|
||||
i32.load offset=4
|
||||
i32.add
|
||||
i32.store
|
||||
i32.const 0
|
||||
end)
|
||||
(export "_call" (func 1)))
|
||||
|
||||
*/
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
use std::slice;
|
||||
|
||||
#[link_args = "-s NO_EXIT_RUNTIME=1 -s NO_FILESYSTEM=1"]
|
||||
#[link_args = "-s NO_EXIT_RUNTIME=1 -s NO_FILESYSTEM=1 -s"]
|
||||
extern {}
|
||||
|
||||
/// Wrapper over storage read/write/size externs
|
||||
|
||||
@@ -1,33 +1,8 @@
|
||||
#![feature(link_args)]
|
||||
#![no_main]
|
||||
|
||||
// as it is experimental preamble
|
||||
#![allow(dead_code)]
|
||||
|
||||
#[link_args = "-s WASM=1 -s NO_EXIT_RUNTIME=1 -s NO_FILESYSTEM=1"]
|
||||
extern {}
|
||||
|
||||
static DATA: u32 = 0;
|
||||
|
||||
#[no_mangle]
|
||||
pub fn call(_descr: *mut u8) {
|
||||
let data_ptr = &DATA as *const u32 as *mut u32;
|
||||
unsafe { *data_ptr += 1; }
|
||||
extern {
|
||||
#[link(name="env")]
|
||||
fn log_event(id: *const u8);
|
||||
}
|
||||
|
||||
/* This produces the following code (after injecting gas counter & optimizing)
|
||||
(module
|
||||
(type (;0;) (func (param i32)))
|
||||
(type (;1;) (func (param i32)))
|
||||
(import "env" "memory" (memory (;0;) 256 256))
|
||||
(import "env" "table" (table (;0;) 0 0 anyfunc))
|
||||
(import "env" "gas" (func (;0;) (type 1)))
|
||||
(func (;1;) (type 0) (param i32)
|
||||
i32.const 4
|
||||
call 0
|
||||
i32.const 1268
|
||||
i32.const 1
|
||||
i32.store)
|
||||
(export "_call" (func 1))
|
||||
(data (i32.const 1212) " \05"))
|
||||
*/
|
||||
fn main() {
|
||||
unsafe { log_event(::std::ptr::null()); }
|
||||
}
|
||||
Reference in New Issue
Block a user