diff --git a/src/windows-emulator/windows_emulator.cpp b/src/windows-emulator/windows_emulator.cpp index 3ad6a62d..bdb64243 100644 --- a/src/windows-emulator/windows_emulator.cpp +++ b/src/windows-emulator/windows_emulator.cpp @@ -720,9 +720,10 @@ windows_emulator::windows_emulator(const emulator_settings& settings, std::unique_ptr emu) : windows_emulator(std::move(emu)) { + this->silent_until_main = settings.silent_until_main && !settings.disable_logging; this->stdout_callback_ = std::move(settings.stdout_callback); this->use_relative_time_ = settings.use_relative_time; - this->logger.disable_output(settings.disable_logging); + this->logger.disable_output(settings.disable_logging || this->silent_until_main); this->setup_process(settings); } @@ -893,6 +894,12 @@ void windows_emulator::setup_hooks() } else if (address == binary->entry_point) { + if (this->silent_until_main && binary == this->process_.executable) + { + this->silent_until_main = false; + this->logger.disable_output(true); + } + logger.print(is_interesting_call ? color::yellow : color::gray, "Executing entry point: %s (0x%llX)\n", binary->name.c_str(), diff --git a/src/windows-emulator/windows_emulator.hpp b/src/windows-emulator/windows_emulator.hpp index a31f39f5..a62c47d5 100644 --- a/src/windows-emulator/windows_emulator.hpp +++ b/src/windows-emulator/windows_emulator.hpp @@ -18,6 +18,7 @@ struct emulator_settings std::vector arguments{}; std::function stdout_callback{}; bool disable_logging{false}; + bool silent_until_main{false}; bool use_relative_time{false}; }; @@ -102,6 +103,7 @@ public: bool buffer_stdout{false}; bool fuzzing{false}; bool switch_thread{false}; + bool silent_until_main{false}; void yield_thread(); void perform_thread_switch();