Beispiel #1
0
int
RSIM_Simulator::loadSpecimen(const std::vector<std::string> &args, int existingPid/*=-1*/)
{
    ASSERT_require2(exeArgs_.empty(), "specimen cannot be loaded twice");
    ASSERT_forbid2(args.empty(), "we must at least have an executable name");

    // Save arguments
    exeName_ = args[0];
    exeArgs_ = args;

    create_process();

    if (int error = process->load(existingPid))
        return error;
    SgAsmGenericHeader *fhdr = process->mainHeader();
    entry_va = process->entryPointOriginalVa();

    RSIM_Thread *mainThread = process->get_main_thread();
    initializeStackArch(mainThread, fhdr);

    process->binary_trace_start();

    if ((process->tracingFlags() & tracingFacilityBit(TRACE_MMAP))) {
        fprintf(process->tracingFile(), "memory map after program load:\n");
        process->get_memory().dump(process->tracingFile(), "  ");
    }

    mainThread->tracing(TRACE_STATE) <<"Initial state:\n"
                                     <<*mainThread->operators()->currentState()->registerState();

    return 0;
}