示例#1
0
VOID Trace(TRACE trace, VOID *v)
{
    for (BBL bbl = TRACE_BblTail(trace); BBL_Valid(bbl); bbl = BBL_Next(bbl)) {
        if (BBL_HasFallThrough(bbl)) {
            INS ins = BBL_InsTail(bbl);
            TEST(INS_HasFallThrough(ins), "BBL_HasFallThrough or INS_HasFallThrough failed");
        }
    }
}
示例#2
0
VOID Trace(TRACE trace, VOID *v)
{
    const INS beginIns = BBL_InsHead(TRACE_BblHead(trace));
    const INS endIns = BBL_InsTail(TRACE_BblTail(trace));
    const ADDRINT beginAddr = INS_Address(beginIns);
    const ADDRINT endAddr = INS_Address(endIns) + INS_Size(endIns) - 1;

    sandbox.CheckAddressRange(reinterpret_cast<const char *>(beginAddr), reinterpret_cast<const char *>(endAddr));
}
示例#3
0
VOID Trace(TRACE trace, VOID *v)
{
    //DumpTrace("Before", trace);
    
    BOOL live[REGCOUNT];
    for (INT32 i = 0; i < REGCOUNT; i++)
    {
        live[i] = false;
    }
    
    for (BBL bbl = TRACE_BblTail(trace); BBL_Valid(bbl); bbl = BBL_Prev(bbl))
    {
        for (INS ins = BBL_InsTail(bbl); INS_Valid(ins); ins = INS_Prev(ins))
        {
            WriteShadows(ins, live);
            
            RewriteBases(ins, live);
        }
    }

    WriteLiveShadows(trace, live);
    //DumpTrace("After", trace);
}
示例#4
0
int trace_bbl_tail (lua_State *L) {
  TRACE* v1 = check_trace(L,1);
  BBL_to_lua(L, TRACE_BblTail(*v1));
  return 1;
}