x86-sok icon indicating copy to clipboard operation
x86-sok copied to clipboard

Having some trouble with the compareCFG.py script

Open AnjaliPare opened this issue 3 years ago • 1 comments

Hi,

I am having some trouble running the compareCFG script. The cfg edges in ground truth vs compared are significantly different and lead to a very low precision and recall. I am not sure what is wrong but just to double check I ran the compare script with the gtBlock_test_switch.pb both as the ground truth (-g file) and the compared (-c file). The cfg edges found in ground truth and compared do not match even if it is the same .pb file. I have noticed a similar behavior with other binaries in the test suite and other disassembler tools such as angr and ghidra. Below you will find the commands that I executed and the corresponding result. Any help would be appreciated. Thank you!

python3 compareCFG.py -b ../gt/test/test_switch -g /tmp/gtBlock_test_switch.pb -c /tmp/angr_blocks.pb2

INFO:root:[CFG Result]: All cfg edges in ground truth is 0 INFO:root:[CFG Result]: All cfg edges in compared is 21 INFO:root:[CFG Result]: False positive number is 21 INFO:root:[CFG Result]: False negative number is 0 INFO:root:[CFG Result]: Precision 0.000000 Traceback (most recent call last): File "compareCFG_orig.py", line 906, in compareCFG(edges_truth, edges_comp) File "compareCFG_orig.py", line 620, in compareCFG logging.info("[CFG Result]: Recall %f" % (true_pos / len(cfg_ground))) ZeroDivisionError: division by zero

AnjaliPare avatar Feb 18 '22 06:02 AnjaliPare

Hello, thanks for the reporting! I updated the script of comparing CFG. Note that our CFG do not split basic block at call site. That means we do not consider call site as the edge of CFG.

bin2415 avatar Feb 18 '22 08:02 bin2415