@@ -869,7 +869,7 @@ void win_syscalls::register_parsers()
869869
870870 // name based parsers
871871 m_name_parsers[" ProcessHandle" ] = [](
872- syscalls_base* base, fmt_args_t & extra_args, const syscalls_ns::syscall_t * sc,
872+ syscalls_base* base, fmt_args_t & original_args, fmt_args_t & extra_args, const syscalls_ns::syscall_t * sc,
873873 const syscalls_ns::arg_t & arg, drakvuf_trap_info_t * info, uint64_t value,
874874 const std::vector<uint64_t >& all_args)
875875 {
@@ -897,7 +897,7 @@ void win_syscalls::register_parsers()
897897 };
898898
899899 m_name_parsers[" ThreadHandle" ] = [](
900- syscalls_base* base, fmt_args_t & extra_args, const syscalls_ns::syscall_t * sc,
900+ syscalls_base* base, fmt_args_t & original_args, fmt_args_t & extra_args, const syscalls_ns::syscall_t * sc,
901901 const syscalls_ns::arg_t & arg, drakvuf_trap_info_t * info, uint64_t value,
902902 const std::vector<uint64_t >& all_args)
903903 {
@@ -929,48 +929,48 @@ void win_syscalls::register_parsers()
929929 };
930930
931931 m_name_parsers[" FileHandle" ] = [](
932- syscalls_base* base, fmt_args_t & extra_args, const auto * sc,
932+ syscalls_base* base, fmt_args_t & original_args, fmt_args_t & extra_args, const auto * sc,
933933 const auto & arg, auto * info, uint64_t value, const auto & all_args)
934934 {
935935 if (value == 0 ) return ;
936936 char * cstr = drakvuf_get_filename_from_handle (base->drakvuf , info, value);
937937 if (cstr)
938938 {
939- extra_args. push_back ( keyval ( std::string (arg.name ) + " _Path " , fmt::Estr (std::string (cstr) )));
939+ find_replace_arg (original_args, std::string (arg.name ), fmt::Estr (std::string (cstr)));
940940 g_free (cstr);
941941 }
942942 };
943943
944944 // type based parsers
945945 m_type_parsers[PUNICODE_STRING] = [](
946- syscalls_base* base, fmt_args_t & extra_args, const auto * sc,
946+ syscalls_base* base, fmt_args_t & original_args, fmt_args_t & extra_args, const auto * sc,
947947 const auto & arg, auto * info, uint64_t value, const auto & all_args)
948948 {
949949 if (value == 0 ) return ;
950950 unicode_string_t * us = drakvuf_read_unicode (base->drakvuf , info, value);
951951 if (us)
952952 {
953- extra_args. push_back ( keyval ( std::string (arg.name ), fmt::Estr (std::string ((char *)us->contents ) )));
953+ find_replace_arg (original_args, std::string (arg.name ), fmt::Estr (std::string ((char *)us->contents )));
954954 vmi_free_unicode_str (us);
955955 }
956956 };
957957
958958 m_type_parsers[POBJECT_ATTRIBUTES] = [](
959- syscalls_base* base, fmt_args_t & extra_args, const auto * sc,
959+ syscalls_base* base, fmt_args_t & original_args, fmt_args_t & extra_args, const auto * sc,
960960 const auto & arg, auto * info, uint64_t value, const auto & all_args)
961961 {
962962 if (value == 0 ) return ;
963963 char * cstr = drakvuf_get_filename_from_object_attributes (base->drakvuf , info, value);
964964 if (cstr)
965965 {
966- extra_args. push_back ( keyval ( std::string (arg.name ), fmt::Estr (std::string (cstr) )));
966+ find_replace_arg (original_args, std::string (arg.name ), fmt::Estr (std::string (cstr)));
967967 g_free (cstr);
968968 }
969969 };
970970
971971 // resolve registers commonly used in process injection from context parameter
972972 m_type_parsers[PCONTEXT] = [](
973- syscalls_base* base, fmt_args_t & extra_args, const auto * sc,
973+ syscalls_base* base, fmt_args_t & original_args, fmt_args_t & extra_args, const auto * sc,
974974 const auto & arg, auto * info, uint64_t value, const auto & all_args)
975975 {
976976 if (value == 0 ) return ;
@@ -1005,7 +1005,7 @@ void win_syscalls::register_parsers()
10051005 // syscall name + arg name based parsers
10061006 m_syscall_arg_parsers[ {" NtSetInformationThread" , " ThreadInformation" }] =
10071007 [](
1008- syscalls_base* base, fmt_args_t & extra_args, const syscalls_ns::syscall_t * sc,
1008+ syscalls_base* base, fmt_args_t & original_args, fmt_args_t & extra_args, const syscalls_ns::syscall_t * sc,
10091009 const syscalls_ns::arg_t & arg_to_parse, drakvuf_trap_info_t * info,
10101010 uint64_t value_to_parse, const std::vector<uint64_t >& all_args)
10111011 {
0 commit comments