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"); } } }
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)); }
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); }
int trace_bbl_tail (lua_State *L) { TRACE* v1 = check_trace(L,1); BBL_to_lua(L, TRACE_BblTail(*v1)); return 1; }