Beispiel #1
0
bool update_params_in_peb(bool isWow64, PPEB myPeb, wchar_t *targetPath)
{
    PPEB64 pebWow64 = nullptr;
    if (isWow64) {
        PROCESS_BASIC_INFORMATION_WOW64 pbi64 = { 0 };
        pebWow64 = get_peb64(GetCurrentProcess(), pbi64);
        if (pebWow64 == nullptr) {
            std::cerr << "Fetching PEB64 failed!" << std::endl;
            return false;
        }
        PRTL_USER_PROCESS_PARAMETERS64 params64 = pebWow64->ProcessParameters;
        if (!overwrite_params<PRTL_USER_PROCESS_PARAMETERS64>(params64, targetPath)) {
            return -1;
        }
        if (!update_my_peb(pebWow64, params64)) {
            return false;
        }
    }
    PRTL_USER_PROCESS_PARAMETERS params = myPeb->ProcessParameters;
    if (!overwrite_params<PRTL_USER_PROCESS_PARAMETERS>(params, targetPath)) {
        return -1;
    }
    if (!update_my_peb(myPeb, params)) {
        return false;
    }
    if (!set_module_name(params->ImagePathName)) {
        return false;
    }
    return true;
}
Beispiel #2
0
int   main (int argc, char *argv[])
#endif
{
    parsed_symbol symbol;
    int count = 0;

    globals.mode = NONE;
    globals.forward_dll = NULL;
    globals.input_name = NULL;
    globals.dumpsect = NULL;

    parse_options (argv);

    memset (&symbol, 0, sizeof (parsed_symbol));

    switch (globals.mode)
    {
    case DMGL:
        VERBOSE = TRUE;

        if (globals.input_name == NULL)
            fatal("No symbol name has been given\n");
        printf("%s\n", get_symbol_str(globals.input_name));
	break;

    case SPEC:
        if (globals.input_name == NULL)
            fatal("No file name has been given\n");
        set_module_name(TRUE);
	if (!dll_open (globals.input_name))
            break;

	output_spec_preamble ();
	output_header_preamble ();
	output_c_preamble ();

        while (dll_next_symbol (&symbol))
	{
	    count++;

	    if (NORMAL)
		printf ("Export %3d - '%s' ...%c", count, symbol.symbol,
			VERBOSE ? '\n' : ' ');

	    if (globals.do_code && symbol_searched(count, symbol.symbol))
	    {
		/* Attempt to get information about the symbol */
                BOOL result = symbol_demangle (&symbol) || symbol_search(&symbol);

                if (result && symbol.function_name)
		    /* Clean up the prototype */
		    symbol_clean_string (symbol.function_name);

		if (NORMAL)
                    puts (result ? "[OK]" : "[Not Found]");
	    }
	    else if (NORMAL)
		puts ("[Ignoring]");

	    output_spec_symbol (&symbol);
	    output_header_symbol (&symbol);
	    output_c_symbol (&symbol);

	    symbol_clear (&symbol);
	}

	output_makefile ();

	if (VERBOSE)
	    puts ("Finished, Cleaning up...");
        if (symbol_finish())
            return 1;
	break;
    case NONE:
	do_usage(0);
	break;
    case DUMP:
        if (globals.input_name == NULL)
            fatal("No file name has been given\n");
        set_module_name(FALSE);
	dump_file(globals.input_name);
	break;
    }

    return 0;
}