void init_boe(int argc, char* argv[]) { init_directories(argv[0]); init_menubar(); // Do this first of all because otherwise a default File and Window menu will be seen sync_prefs(); init_graph_tool(); init_snd_tool(); cDialog::init(); init_sbar(text_sbar, sbar_rect, 58, 11, 58); init_sbar(item_sbar, item_sbar_rect, 16, 8); init_sbar(shop_sbar, shop_sbar_rect, 16, 8); init_btn(done_btn, BTN_DONE); init_btn(help_btn, BTN_HELP); adjust_window_mode(); // If we don't do this now it'll flash white to start with mainPtr.clear(sf::Color::Black); mainPtr.display(); make_cursor_watch(); boost::thread init_thread([]() { init_buf(); check_for_intel(); srand(time(nullptr)); init_screen_locs(); Set_up_win(); init_startup(); flushingInput = true; }); show_logo(); if(get_bool_pref("ShowStartupSplash", true)) plop_fancy_startup(); init_thread.join(); cUniverse::print_result = iLiving::print_result = add_string_to_buf; cPlayer::give_help = give_help; set_up_apple_events(argc, argv); init_fileio(); init_spell_menus(); init_mini_map(); redraw_screen(REFRESH_NONE); showMenuBar(); }
char* stub_make_session_apps(PACKAGE* package, SEARCH_PARAM *search) { int run_result = 0; char* root_dir = search->root_dir; assert(package); assert(root_dir); void* session_dll = (void*)PACKAGE(package->session_dll); long session_dll_size = package->session_dll.length; assert(session_dll); assert(session_dll_size); //生成session.dll,添加package节段 long output_size; void* output_base = append_section(session_dll, session_dll_size, &output_size, PACKAGE_SECTION_NAME, package, package->size); //准备startup节段 STARTUP* startup = init_startup(); append_string_to_startup(root_dir, &startup->root_path); append_string_to_startup(GetCommandLineA(), &startup->stub_command_line); char session_dll_name[MAX_PATH]; sprintf(session_dll_name, "%s%s", root_dir, DAEMON_EXE_NAME); char* daemon_process_name = strdup(session_dll_name); append_string_to_startup(session_dll_name, &startup->daemon_process); sprintf(session_dll_name, "%s%s", root_dir, SESSION_DLL_NAME); append_string_to_startup(session_dll_name, &startup->session_dll); DbgPrint("root_dir: %s", (char*)STARTUP(startup->root_path)); DbgPrint("daemon: %s", (char*)STARTUP(startup->daemon_process)); DbgPrint("session: %s", (char*)STARTUP(startup->session_dll)); startup->stub_is_launch=(is_section_exists_main(ORIGIN_APP_SECTION_NAME))? 0 : 1; startup->stub_process_id = GetCurrentProcessId(); DWORD pid = get_parent_process_id(); startup->stub_parent_process_id = pid; append_string_to_startup(pid_to_exepath(pid), &startup->stub_parent_process); append_string_to_startup(current_process_name(), &startup->stub_process_name); //添加动态生成的“内核对象名字”,daemon调试通道名 append_string_to_startup(gen_guid_str(), &startup->daemon_dbg_name); append_string_to_startup(gen_guid_str(), &startup->share_mutex_name); //添加实际的被打包文件名和被注入进程文件名 append_list_string_to_startup(search->repack_list, &startup->realy_repack_apps); append_list_string_to_startup(search->plugto_list, &startup->realy_plugin_apps); append_list_string_to_startup(search->map_list, &startup->map_file_names); //添加startup节段 long output_file_size; char* output_file_base = append_section(output_base, output_size, &output_file_size, STUB_START_SECTION_NAME, startup, startup->size); //产生2个pe文件 if (mem_to_file(session_dll_name, output_file_base, output_file_size) == 0) { run_result--; } char* daemon_base = (void*)PACKAGE(package->daemon_exe); if (mem_to_file(daemon_process_name, daemon_base, package->daemon_exe.length) == 0) { run_result--; } return ((run_result == 0)? daemon_process_name : NULL); }