]>
git.siccegge.de Git - frida/frida.git/blob - src/bindings/Guile.cxx
4 SCM
handler (void*, SCM tag
, SCM throw_args
) {
5 scm_handle_by_message_noexit ((void*)"foo", tag
, throw_args
);
10 GuileInterpreter::GuileInterpreter() {
13 scm_internal_catch(SCM_BOOL_T
,
14 (SCM (*)(void *))scm_c_eval_string
,
15 (void*)"(use-modules (system repl server))",
17 scm_internal_catch(SCM_BOOL_T
,
18 (SCM (*)(void *))scm_c_eval_string
,
19 (void*)"(spawn-server)",
21 scm_internal_catch(SCM_BOOL_T
,
22 (SCM (*)(void *))scm_c_eval_string
,
23 (void*)"(load-extension \"libfrida-guile\" \"scm_init_frida_module\")",
26 guile_output_port
= scm_open_output_string();
27 guile_error_port
= scm_open_output_string();
28 scm_set_current_output_port(guile_output_port
);
29 scm_set_current_error_port(guile_error_port
);
32 int GuileInterpreter::evaluate(const std::string
& command
,
35 std::string
& result
) {
37 SCM result_obj
= scm_internal_catch(SCM_BOOL_T
,
38 (SCM (*)(void *))scm_c_eval_string
,
39 (void*)command
.c_str(),
42 SCM result_str
= scm_object_to_string(result_obj
, SCM_UNDEFINED
);
44 SCM output
= scm_get_output_string(guile_output_port
);
45 stdout
<< scm_to_locale_string(output
);
47 output
= scm_get_output_string(guile_error_port
);
48 stderr
<< scm_to_locale_string(output
);
50 result
= scm_to_locale_string(result_str
);
52 scm_truncate_file(guile_output_port
, scm_from_uint16(0));
53 scm_truncate_file(guile_error_port
, scm_from_uint16(0));
58 int GuileInterpreter::loadFile(const std::string
& filename
,
61 std::string
& result
) {
62 return evaluate("(load \"" + filename
+ "\")",
63 stdout
, stderr
, result
);