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
_______________________________________________
Dyninst-api mailing list
Dyninst-api@cs.wisc.edu
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api

Reply via email to