48 строки
1.1 KiB
JavaScript
48 строки
1.1 KiB
JavaScript
// stores
|
|
HEAP8[x] = 1;
|
|
HEAP16[x] = 2;
|
|
HEAP32[x] = 3;
|
|
HEAPU8[x] = 4;
|
|
HEAPU16[x] = 5;
|
|
HEAPU32[x] = 6;
|
|
HEAPF32[x] = 7;
|
|
HEAPF64[x] = 8;
|
|
|
|
// loads
|
|
a1 = HEAP8[x];
|
|
a2 = HEAP16[x];
|
|
a3 = HEAP32[x];
|
|
a4 = HEAPU8[x];
|
|
a5 = HEAPU16[x];
|
|
a6 = HEAPU32[x];
|
|
a7 = HEAPF32[x];
|
|
a8 = HEAPF64[x];
|
|
|
|
// store return value
|
|
foo = HEAPU8[1337] = 42;
|
|
|
|
// nesting
|
|
HEAP16[bar(HEAPF64[5])];
|
|
HEAPF32[x] = HEAP32[y];
|
|
|
|
// Ignore the special asan functions themselves. that is, any JS memory access
|
|
// will turn into a function call to _asan_js_load_1 etc., which then does
|
|
// the memory access for it. It either calls into wasm to get the proper
|
|
// asan-instrumented operation, or before the wasm is ready to be called into,
|
|
// we must do the access in JS, unsafely. We should not instrument a heap
|
|
// access in these functions, as then we'd get infinite recursion - this is
|
|
// where we do actually need to still do a HEAP8[..] etc. operation without
|
|
// any ASan instrumentation.
|
|
function _asan_js_load_1(ptr) {
|
|
return HEAP8[ptr];
|
|
}
|
|
|
|
// but do handle everything else
|
|
function somethingElse() {
|
|
return HEAP8[ptr];
|
|
}
|
|
|
|
// ignore a.X
|
|
HEAP8.length;
|
|
HEAP8[length];
|