Date: | Sun, 24 Apr 2016 16:43:19 -0400 |
---|---|
From: | Mohamed Elsabagh <melsabag@xxxxxxx> |
Subject: | [DynInst_API:] Slicing across blocks |
I am trying to slice on the last call in the snippet below, using the default predicate, but the returned slice only contains a single node (the call instruction itself): mov 0x804ba3, %ebx add 0x5, %ebx call foo() mov %eax, 0x1c(%esp) call *%ebx // backward slice from here The same exact slicing code is working fine on all other indirect calls in the binary. This particular call differs from the rest in that the dereferenced register (ebx) is in a different basic block than the call instruction. Are there any flags that I need to pass to the slicer to resolve this? Â I am invoking the slicer as follows:Â AssignmentConverter ac(true, false); vector<Assignment::Ptr> assigns; ac.convert(insn, insn_addr, func, block, assigns); Slicer slicer(assigns.back(), block, func); Slicer::Predicates defaultPredicates; GraphPtr graph = slicer.backwardSlice(defaultPredicates); Thanks, Mohamed |
[← Prev in Thread] | Current Thread | [Next in Thread→] |
---|---|---|
|
Previous by Date: | [DynInst_API:] [PATCH 2/2] fix more namespace pollution, Peter Foley |
---|---|
Next by Date: | Re: [DynInst_API:] Slicing across blocks, Mohamed Elsabagh |
Previous by Thread: | [DynInst_API:] Segfault on dyninstAPI_RT.dll loading., Florent Saudel |
Next by Thread: | Re: [DynInst_API:] Slicing across blocks, Mohamed Elsabagh |
Indexes: | [Date] [Thread] |