GumDukCpuContext * _gum_duk_push_cpu_context (duk_context * ctx, GumCpuContext * handle, GumDukCpuContextAccess access, GumDukCore * core) { GumDukCpuContext * scc; scc = g_slice_new (GumDukCpuContext); duk_push_heapptr (ctx, core->cpu_context); duk_new (ctx, 0); _gum_duk_put_data (ctx, -1, scc); scc->object = duk_require_heapptr (ctx, -1); if (access == GUM_CPU_CONTEXT_READWRITE) { scc->handle = handle; } else { memcpy (&scc->storage, handle, sizeof (GumCpuContext)); scc->handle = &scc->storage; } scc->access = access; return scc; }
void _gum_duk_process_init (GumDukProcess * self, GumDukCore * core) { GumDukScope scope = GUM_DUK_SCOPE_INIT (core); duk_context * ctx = scope.ctx; self->core = core; duk_push_c_function (ctx, gumjs_process_construct, 0); duk_push_object (ctx); duk_put_function_list (ctx, -1, gumjs_process_functions); duk_push_string (ctx, GUM_SCRIPT_ARCH); duk_put_prop_string (ctx, -2, "arch"); duk_push_string (ctx, GUM_SCRIPT_PLATFORM); duk_put_prop_string (ctx, -2, "platform"); duk_push_uint (ctx, gum_query_page_size ()); duk_put_prop_string (ctx, -2, "pageSize"); duk_push_uint (ctx, GLIB_SIZEOF_VOID_P); duk_put_prop_string (ctx, -2, "pointerSize"); duk_put_prop_string (ctx, -2, "prototype"); duk_new (ctx, 0); _gum_duk_put_data (ctx, -1, self); duk_put_global_string (ctx, "Process"); }
void _gum_duk_stalker_init (GumDukStalker * self, GumDukCore * core) { duk_context * ctx = core->ctx; self->core = core; self->stalker = NULL; self->queue_capacity = 16384; self->queue_drain_interval = 250; duk_push_c_function (ctx, gumjs_stalker_construct, 0); duk_push_object (ctx); duk_put_function_list (ctx, -1, gumjs_stalker_functions); duk_put_prop_string (ctx, -2, "prototype"); duk_new (ctx, 0); _gum_duk_put_data (ctx, -1, self); _gum_duk_add_properties_to_class_by_heapptr (ctx, duk_require_heapptr (ctx, -1), gumjs_stalker_values); duk_put_global_string (ctx, "Stalker"); }