987 lines
84 KiB
Text
987 lines
84 KiB
Text
NAME=rz-diff distance comparison (leven)
|
||
TOOL=rz-diff
|
||
ARGS=-d leven bins/java/Main.java.1.7.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
similarity: 0.637
|
||
distance: 529
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff distance comparison (leven) JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jd leven bins/java/Main.java.1.7.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
{"similarity":0.636676,"distance":529}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff distance comparison (leven) QUIET
|
||
TOOL=rz-diff
|
||
ARGS=-qd leven bins/java/Main.java.1.7.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
0.637
|
||
529
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff distance comparison (myers)
|
||
TOOL=rz-diff
|
||
ARGS=-d myers bins/java/Main.java.1.7.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
similarity: 0.769
|
||
distance: 602
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff distance comparison (myers) JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jd myers bins/java/Main.java.1.7.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
{"similarity":0.768995,"distance":602}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff distance comparison (myers) QUIET
|
||
TOOL=rz-diff
|
||
ARGS=-qd myers bins/java/Main.java.1.7.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
0.769
|
||
602
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff similarity comparison (ssdeep)
|
||
TOOL=rz-diff
|
||
ARGS=-i -d ssdeep 384:2rOP+jOA3orMecdFpCAFRa5FZiqboYOCE:CwqVCA/IFZiqboYOC 384:lrOPfSTZjOA3orMecdFpu1FFl5bZiqboVOCX:zTZwqVu1fXbZiqboVOC
|
||
EXPECT=<<EOF
|
||
similarity: 0.696
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff similarity comparison (ssdeep) json
|
||
TOOL=rz-diff
|
||
ARGS=-j -i -d ssdeep 384:2rOP+jOA3orMecdFpCAFRa5FZiqboYOCE:CwqVCA/IFZiqboYOC 384:lrOPfSTZjOA3orMecdFpu1FFl5bZiqboVOCX:zTZwqVu1fXbZiqboVOC
|
||
EXPECT=<<EOF
|
||
{"similarity":0.695652}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff similarity comparison (ssdeep) QUIET
|
||
TOOL=rz-diff
|
||
ARGS=-q -i -d ssdeep 384:2rOP+jOA3orMecdFpCAFRa5FZiqboYOCE:CwqVCA/IFZiqboYOC 384:lrOPfSTZjOA3orMecdFpu1FFl5bZiqboVOCX:zTZwqVu1fXbZiqboVOC
|
||
EXPECT=<<EOF
|
||
0.696
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff bytes comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t bytes bins/other/rz-diff/rz-diff_c_1 bins/other/rz-diff/rz-diff_c_2
|
||
EXPECT=<<EOF
|
||
--- bins/other/rz-diff/rz-diff_c_1
|
||
+++ bins/other/rz-diff/rz-diff_c_2
|
||
@@ -1,1 +1,1 @@
|
||
-91
|
||
+90
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff bytes comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt bytes bins/other/rz-diff/rz-diff_c_1 bins/other/rz-diff/rz-diff_c_2
|
||
EXPECT=<<EOF
|
||
{"from":"bins/other/rz-diff/rz-diff_c_1","to":"bins/other/rz-diff/rz-diff_c_2","diff":[{"from":[1,1],"to":[1,1],"ops":[{"op":"delete","value":"91"},{"op":"insert","value":"90"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff strings comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t strings bins/elf/elf_one_symbol_shdr bins/elf/elf_one_symbol_shdr1
|
||
EXPECT=<<EOF
|
||
--- bins/elf/elf_one_symbol_shdr
|
||
+++ bins/elf/elf_one_symbol_shdr1
|
||
@@ -1,1 +1,1 @@
|
||
-Hello world!
|
||
+AAAAo world!
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff strings comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt strings bins/elf/elf_one_symbol_shdr bins/elf/elf_one_symbol_shdr1
|
||
EXPECT=<<EOF
|
||
{"from":"bins/elf/elf_one_symbol_shdr","to":"bins/elf/elf_one_symbol_shdr1","diff":[{"from":[1,1],"to":[1,1],"ops":[{"op":"delete","value":"Hello world!\n"},{"op":"insert","value":"AAAAo world!\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff strings comparison with addresses
|
||
TOOL=rz-diff
|
||
ARGS=-At strings bins/elf/elf_one_symbol_shdr bins/elf/elf_one_symbol_shdr1
|
||
EXPECT=<<EOF
|
||
--- bins/elf/elf_one_symbol_shdr
|
||
+++ bins/elf/elf_one_symbol_shdr1
|
||
@@ -1,1 +1,1 @@
|
||
-virt: 0x00000000080484b0 phys: 0x00000000000004b0 Hello world!
|
||
+virt: 0x00000000080484b0 phys: 0x00000000000004b0 AAAAo world!
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff strings comparison with addresses JSON
|
||
TOOL=rz-diff
|
||
ARGS=-Ajt strings bins/elf/elf_one_symbol_shdr bins/elf/elf_one_symbol_shdr1
|
||
EXPECT=<<EOF
|
||
{"from":"bins/elf/elf_one_symbol_shdr","to":"bins/elf/elf_one_symbol_shdr1","diff":[{"from":[1,1],"to":[1,1],"ops":[{"op":"delete","value":"virt: 0x00000000080484b0 phys: 0x00000000000004b0 Hello world!\n"},{"op":"insert","value":"virt: 0x00000000080484b0 phys: 0x00000000000004b0 AAAAo world!\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff functions comparison
|
||
TOOL=rz-diff
|
||
ARGS=-q -t functions -e flirt.sigdb.load.system=false -e flirt.sigdb.load.home=false bins/other/rz-diff/true bins/other/rz-diff/false
|
||
EXPECT=<<EOF
|
||
fcn.00401050 26 0x00401050 COMPLETE 1.000000 0x00401050 26 fcn.00401050
|
||
sym.imp.__uflow 6 0x00401080 COMPLETE 1.000000 0x00401080 6 sym.imp.__uflow
|
||
sym.imp.getenv 6 0x00401090 COMPLETE 1.000000 0x00401090 6 sym.imp.getenv
|
||
sym.imp.free 6 0x004010a0 COMPLETE 1.000000 0x004010a0 6 sym.imp.free
|
||
sym.imp.abort 6 0x004010b0 COMPLETE 1.000000 0x004010b0 6 sym.imp.abort
|
||
sym.imp.__errno_location 6 0x004010c0 COMPLETE 1.000000 0x004010c0 6 sym.imp.__errno_location
|
||
sym.imp.strncmp 6 0x004010d0 COMPLETE 1.000000 0x004010d0 6 sym.imp.strncmp
|
||
sym.imp._exit 6 0x004010e0 COMPLETE 1.000000 0x004010e0 6 sym.imp._exit
|
||
sym.imp.strcpy 6 0x004010f0 COMPLETE 1.000000 0x004010f0 6 sym.imp.strcpy
|
||
sym.imp.__fpending 6 0x00401100 COMPLETE 1.000000 0x00401100 6 sym.imp.__fpending
|
||
sym.imp.textdomain 6 0x00401110 COMPLETE 1.000000 0x00401110 6 sym.imp.textdomain
|
||
sym.imp.fclose 6 0x00401120 COMPLETE 1.000000 0x00401120 6 sym.imp.fclose
|
||
sym.imp.bindtextdomain 6 0x00401130 COMPLETE 1.000000 0x00401130 6 sym.imp.bindtextdomain
|
||
sym.imp.dcgettext 6 0x00401140 COMPLETE 1.000000 0x00401140 6 sym.imp.dcgettext
|
||
sym.imp.__ctype_get_mb_cur_max 6 0x00401150 COMPLETE 1.000000 0x00401150 6 sym.imp.__ctype_get_mb_cur_max
|
||
sym.imp.strlen 6 0x00401160 COMPLETE 1.000000 0x00401160 6 sym.imp.strlen
|
||
sym.imp.__stack_chk_fail 6 0x00401170 COMPLETE 1.000000 0x00401170 6 sym.imp.__stack_chk_fail
|
||
sym.imp.strrchr 6 0x00401190 COMPLETE 1.000000 0x00401190 6 sym.imp.strrchr
|
||
sym.imp.lseek 6 0x004011a0 COMPLETE 1.000000 0x004011a0 6 sym.imp.lseek
|
||
sym.imp.memset 6 0x004011b0 COMPLETE 1.000000 0x004011b0 6 sym.imp.memset
|
||
sym.imp.fscanf 6 0x004011c0 COMPLETE 1.000000 0x004011c0 6 sym.imp.fscanf
|
||
sym.imp.close 6 0x004011d0 COMPLETE 1.000000 0x004011d0 6 sym.imp.close
|
||
sym.imp.__libc_start_main 6 0x004011e0 COMPLETE 1.000000 0x004011e0 6 sym.imp.__libc_start_main
|
||
sym.imp.memcmp 6 0x004011f0 COMPLETE 1.000000 0x004011f0 6 sym.imp.memcmp
|
||
sym.imp.fputs_unlocked 6 0x00401200 COMPLETE 1.000000 0x00401200 6 sym.imp.fputs_unlocked
|
||
sym.imp.calloc 6 0x00401210 COMPLETE 1.000000 0x00401210 6 sym.imp.calloc
|
||
sym.imp.strcmp 6 0x00401220 COMPLETE 1.000000 0x00401220 6 sym.imp.strcmp
|
||
loc.imp.__gmon_start 6 0x00401230 COMPLETE 1.000000 0x00401230 6 loc.imp.__gmon_start
|
||
sym.imp.memcpy 6 0x00401240 COMPLETE 1.000000 0x00401240 6 sym.imp.memcpy
|
||
sym.imp.fileno 6 0x00401250 COMPLETE 1.000000 0x00401250 6 sym.imp.fileno
|
||
sym.imp.malloc 6 0x00401260 COMPLETE 1.000000 0x00401260 6 sym.imp.malloc
|
||
sym.imp.nl_langinfo 6 0x00401280 COMPLETE 1.000000 0x00401280 6 sym.imp.nl_langinfo
|
||
sym.imp.ungetc 6 0x00401290 COMPLETE 1.000000 0x00401290 6 sym.imp.ungetc
|
||
sym.imp.__freading 6 0x004012a0 COMPLETE 1.000000 0x004012a0 6 sym.imp.__freading
|
||
sym.imp.realloc 6 0x004012b0 COMPLETE 1.000000 0x004012b0 6 sym.imp.realloc
|
||
sym.imp.fdopen 6 0x004012c0 COMPLETE 1.000000 0x004012c0 6 sym.imp.fdopen
|
||
sym.imp.setlocale 6 0x004012d0 COMPLETE 1.000000 0x004012d0 6 sym.imp.setlocale
|
||
sym.imp.__printf_chk 6 0x004012e0 COMPLETE 1.000000 0x004012e0 6 sym.imp.__printf_chk
|
||
sym.imp.error 6 0x004012f0 COMPLETE 1.000000 0x004012f0 6 sym.imp.error
|
||
sym.imp.open 6 0x00401300 COMPLETE 1.000000 0x00401300 6 sym.imp.open
|
||
sym.imp.exit 6 0x00401330 COMPLETE 1.000000 0x00401330 6 sym.imp.exit
|
||
sym.imp.fwrite 6 0x00401340 COMPLETE 1.000000 0x00401340 6 sym.imp.fwrite
|
||
sym.imp.__fprintf_chk 6 0x00401350 COMPLETE 1.000000 0x00401350 6 sym.imp.__fprintf_chk
|
||
sym.imp.mbsinit 6 0x00401360 COMPLETE 1.000000 0x00401360 6 sym.imp.mbsinit
|
||
sym.imp.iswprint 6 0x00401370 COMPLETE 1.000000 0x00401370 6 sym.imp.iswprint
|
||
sym.imp.__ctype_b_loc 6 0x00401380 COMPLETE 1.000000 0x00401380 6 sym.imp.__ctype_b_loc
|
||
fcn.00401460 41 0x00401460 COMPLETE 1.000000 0x00401470 41 fcn.00401470
|
||
fcn.00401530 745 0x00401530 PARTIAL 0.879195 0x00401540 745 fcn.00401540
|
||
fcn.004018f0 147 0x004018f0 PARTIAL 0.931973 0x00401900 147 fcn.00401900
|
||
fcn.00401990 137 0x00401990 PARTIAL 0.985401 0x004019a0 137 fcn.004019a0
|
||
fcn.00401a20 162 0x00401a20 COMPLETE 1.000000 0x00401a30 162 fcn.00401a30
|
||
fcn.00401ae0 228 0x00401ae0 PARTIAL 0.964912 0x00401af0 228 fcn.00401af0
|
||
fcn.00401be0 2728 0x00401be0 PARTIAL 0.991569 0x00401bf0 2728 fcn.00401bf0
|
||
fcn.00402730 425 0x00402730 PARTIAL 0.971765 0x00402740 425 fcn.00402740
|
||
fcn.004029a0 50 0x004029a0 PARTIAL 0.980000 0x004029b0 50 fcn.004029b0
|
||
fcn.00402e20 204 0x00402e20 PARTIAL 0.960784 0x00402e30 204 fcn.00402e30
|
||
fcn.00402fc0 944 0x00402fc0 PARTIAL 0.952331 0x00402fd0 944 fcn.00402fd0
|
||
fcn.004033d0 131 0x004033d0 PARTIAL 0.992366 0x004033e0 131 fcn.004033e0
|
||
fcn.00403460 167 0x00403460 PARTIAL 0.994012 0x00403470 167 fcn.00403470
|
||
fcn.00403590 26 0x00403590 PARTIAL 0.961538 0x004035a0 26 fcn.004035a0
|
||
fcn.004035e0 48 0x004035e0 PARTIAL 0.958333 0x004035f0 48 fcn.004035f0
|
||
fcn.00403750 40 0x00403750 PARTIAL 0.975000 0x00403760 40 fcn.00403760
|
||
fcn.004037a0 49 0x004037a0 PARTIAL 0.857143 0x004037b0 49 fcn.004037b0
|
||
fcn.004037e0 35 0x004037e0 PARTIAL 0.914286 0x004037f0 35 fcn.004037f0
|
||
fcn.00403810 67 0x00403810 COMPLETE 1.000000 0x00403820 67 fcn.00403820
|
||
fcn.00403860 108 0x00403860 PARTIAL 0.972222 0x00403870 108 fcn.00403870
|
||
fcn.004038e0 1015 0x004038e0 PARTIAL 0.958621 0x004038f0 1015 fcn.004038f0
|
||
fcn.00403cf0 118 0x00403cf0 PARTIAL 0.932203 0x00403d00 118 fcn.00403d00
|
||
fcn.00403d70 59 0x00403d70 PARTIAL 0.949153 0x00403d80 59 fcn.00403d80
|
||
fcn.00403db0 86 0x00403db0 PARTIAL 0.965116 0x00403dc0 86 fcn.00403dc0
|
||
fcn.00403e90 26 0x00403e90 PARTIAL 0.923077 0x00403ea0 26 fcn.00403ea0
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff functions comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt functions -e flirt.sigdb.load.system=false -e flirt.sigdb.load.home=false bins/other/rz-diff/true bins/other/rz-diff/false
|
||
EXPECT=<<EOF
|
||
[{"similarity":1.000000,"type":"COMPLETE","original":{"name":"fcn.00401050","addr":4198480,"size":26},"modified":{"name":"fcn.00401050","addr":4198480,"size":26}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__uflow","addr":4198528,"size":6},"modified":{"name":"sym.imp.__uflow","addr":4198528,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.getenv","addr":4198544,"size":6},"modified":{"name":"sym.imp.getenv","addr":4198544,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.free","addr":4198560,"size":6},"modified":{"name":"sym.imp.free","addr":4198560,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.abort","addr":4198576,"size":6},"modified":{"name":"sym.imp.abort","addr":4198576,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__errno_location","addr":4198592,"size":6},"modified":{"name":"sym.imp.__errno_location","addr":4198592,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.strncmp","addr":4198608,"size":6},"modified":{"name":"sym.imp.strncmp","addr":4198608,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp._exit","addr":4198624,"size":6},"modified":{"name":"sym.imp._exit","addr":4198624,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.strcpy","addr":4198640,"size":6},"modified":{"name":"sym.imp.strcpy","addr":4198640,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__fpending","addr":4198656,"size":6},"modified":{"name":"sym.imp.__fpending","addr":4198656,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.textdomain","addr":4198672,"size":6},"modified":{"name":"sym.imp.textdomain","addr":4198672,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.fclose","addr":4198688,"size":6},"modified":{"name":"sym.imp.fclose","addr":4198688,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.bindtextdomain","addr":4198704,"size":6},"modified":{"name":"sym.imp.bindtextdomain","addr":4198704,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.dcgettext","addr":4198720,"size":6},"modified":{"name":"sym.imp.dcgettext","addr":4198720,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__ctype_get_mb_cur_max","addr":4198736,"size":6},"modified":{"name":"sym.imp.__ctype_get_mb_cur_max","addr":4198736,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.strlen","addr":4198752,"size":6},"modified":{"name":"sym.imp.strlen","addr":4198752,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__stack_chk_fail","addr":4198768,"size":6},"modified":{"name":"sym.imp.__stack_chk_fail","addr":4198768,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.strrchr","addr":4198800,"size":6},"modified":{"name":"sym.imp.strrchr","addr":4198800,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.lseek","addr":4198816,"size":6},"modified":{"name":"sym.imp.lseek","addr":4198816,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.memset","addr":4198832,"size":6},"modified":{"name":"sym.imp.memset","addr":4198832,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.fscanf","addr":4198848,"size":6},"modified":{"name":"sym.imp.fscanf","addr":4198848,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.close","addr":4198864,"size":6},"modified":{"name":"sym.imp.close","addr":4198864,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__libc_start_main","addr":4198880,"size":6},"modified":{"name":"sym.imp.__libc_start_main","addr":4198880,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.memcmp","addr":4198896,"size":6},"modified":{"name":"sym.imp.memcmp","addr":4198896,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.fputs_unlocked","addr":4198912,"size":6},"modified":{"name":"sym.imp.fputs_unlocked","addr":4198912,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.calloc","addr":4198928,"size":6},"modified":{"name":"sym.imp.calloc","addr":4198928,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.strcmp","addr":4198944,"size":6},"modified":{"name":"sym.imp.strcmp","addr":4198944,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"loc.imp.__gmon_start","addr":4198960,"size":6},"modified":{"name":"loc.imp.__gmon_start","addr":4198960,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.memcpy","addr":4198976,"size":6},"modified":{"name":"sym.imp.memcpy","addr":4198976,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.fileno","addr":4198992,"size":6},"modified":{"name":"sym.imp.fileno","addr":4198992,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.malloc","addr":4199008,"size":6},"modified":{"name":"sym.imp.malloc","addr":4199008,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.nl_langinfo","addr":4199040,"size":6},"modified":{"name":"sym.imp.nl_langinfo","addr":4199040,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.ungetc","addr":4199056,"size":6},"modified":{"name":"sym.imp.ungetc","addr":4199056,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__freading","addr":4199072,"size":6},"modified":{"name":"sym.imp.__freading","addr":4199072,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.realloc","addr":4199088,"size":6},"modified":{"name":"sym.imp.realloc","addr":4199088,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.fdopen","addr":4199104,"size":6},"modified":{"name":"sym.imp.fdopen","addr":4199104,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.setlocale","addr":4199120,"size":6},"modified":{"name":"sym.imp.setlocale","addr":4199120,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__printf_chk","addr":4199136,"size":6},"modified":{"name":"sym.imp.__printf_chk","addr":4199136,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.error","addr":4199152,"size":6},"modified":{"name":"sym.imp.error","addr":4199152,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.open","addr":4199168,"size":6},"modified":{"name":"sym.imp.open","addr":4199168,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.exit","addr":4199216,"size":6},"modified":{"name":"sym.imp.exit","addr":4199216,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.fwrite","addr":4199232,"size":6},"modified":{"name":"sym.imp.fwrite","addr":4199232,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__fprintf_chk","addr":4199248,"size":6},"modified":{"name":"sym.imp.__fprintf_chk","addr":4199248,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.mbsinit","addr":4199264,"size":6},"modified":{"name":"sym.imp.mbsinit","addr":4199264,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.iswprint","addr":4199280,"size":6},"modified":{"name":"sym.imp.iswprint","addr":4199280,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"sym.imp.__ctype_b_loc","addr":4199296,"size":6},"modified":{"name":"sym.imp.__ctype_b_loc","addr":4199296,"size":6}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"fcn.00401460","addr":4199520,"size":41},"modified":{"name":"fcn.00401470","addr":4199536,"size":41}},{"similarity":0.879195,"type":"PARTIAL","original":{"name":"fcn.00401530","addr":4199728,"size":745},"modified":{"name":"fcn.00401540","addr":4199744,"size":745}},{"similarity":0.931973,"type":"PARTIAL","original":{"name":"fcn.004018f0","addr":4200688,"size":147},"modified":{"name":"fcn.00401900","addr":4200704,"size":147}},{"similarity":0.985401,"type":"PARTIAL","original":{"name":"fcn.00401990","addr":4200848,"size":137},"modified":{"name":"fcn.004019a0","addr":4200864,"size":137}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"fcn.00401a20","addr":4200992,"size":162},"modified":{"name":"fcn.00401a30","addr":4201008,"size":162}},{"similarity":0.964912,"type":"PARTIAL","original":{"name":"fcn.00401ae0","addr":4201184,"size":228},"modified":{"name":"fcn.00401af0","addr":4201200,"size":228}},{"similarity":0.991569,"type":"PARTIAL","original":{"name":"fcn.00401be0","addr":4201440,"size":2728},"modified":{"name":"fcn.00401bf0","addr":4201456,"size":2728}},{"similarity":0.971765,"type":"PARTIAL","original":{"name":"fcn.00402730","addr":4204336,"size":425},"modified":{"name":"fcn.00402740","addr":4204352,"size":425}},{"similarity":0.980000,"type":"PARTIAL","original":{"name":"fcn.004029a0","addr":4204960,"size":50},"modified":{"name":"fcn.004029b0","addr":4204976,"size":50}},{"similarity":0.960784,"type":"PARTIAL","original":{"name":"fcn.00402e20","addr":4206112,"size":204},"modified":{"name":"fcn.00402e30","addr":4206128,"size":204}},{"similarity":0.952331,"type":"PARTIAL","original":{"name":"fcn.00402fc0","addr":4206528,"size":944},"modified":{"name":"fcn.00402fd0","addr":4206544,"size":944}},{"similarity":0.992366,"type":"PARTIAL","original":{"name":"fcn.004033d0","addr":4207568,"size":131},"modified":{"name":"fcn.004033e0","addr":4207584,"size":131}},{"similarity":0.994012,"type":"PARTIAL","original":{"name":"fcn.00403460","addr":4207712,"size":167},"modified":{"name":"fcn.00403470","addr":4207728,"size":167}},{"similarity":0.961538,"type":"PARTIAL","original":{"name":"fcn.00403590","addr":4208016,"size":26},"modified":{"name":"fcn.004035a0","addr":4208032,"size":26}},{"similarity":0.958333,"type":"PARTIAL","original":{"name":"fcn.004035e0","addr":4208096,"size":48},"modified":{"name":"fcn.004035f0","addr":4208112,"size":48}},{"similarity":0.975000,"type":"PARTIAL","original":{"name":"fcn.00403750","addr":4208464,"size":40},"modified":{"name":"fcn.00403760","addr":4208480,"size":40}},{"similarity":0.857143,"type":"PARTIAL","original":{"name":"fcn.004037a0","addr":4208544,"size":49},"modified":{"name":"fcn.004037b0","addr":4208560,"size":49}},{"similarity":0.914286,"type":"PARTIAL","original":{"name":"fcn.004037e0","addr":4208608,"size":35},"modified":{"name":"fcn.004037f0","addr":4208624,"size":35}},{"similarity":1.000000,"type":"COMPLETE","original":{"name":"fcn.00403810","addr":4208656,"size":67},"modified":{"name":"fcn.00403820","addr":4208672,"size":67}},{"similarity":0.972222,"type":"PARTIAL","original":{"name":"fcn.00403860","addr":4208736,"size":108},"modified":{"name":"fcn.00403870","addr":4208752,"size":108}},{"similarity":0.958621,"type":"PARTIAL","original":{"name":"fcn.004038e0","addr":4208864,"size":1015},"modified":{"name":"fcn.004038f0","addr":4208880,"size":1015}},{"similarity":0.932203,"type":"PARTIAL","original":{"name":"fcn.00403cf0","addr":4209904,"size":118},"modified":{"name":"fcn.00403d00","addr":4209920,"size":118}},{"similarity":0.949153,"type":"PARTIAL","original":{"name":"fcn.00403d70","addr":4210032,"size":59},"modified":{"name":"fcn.00403d80","addr":4210048,"size":59}},{"similarity":0.965116,"type":"PARTIAL","original":{"name":"fcn.00403db0","addr":4210096,"size":86},"modified":{"name":"fcn.00403dc0","addr":4210112,"size":86}},{"similarity":0.923077,"type":"PARTIAL","original":{"name":"fcn.00403e90","addr":4210320,"size":26},"modified":{"name":"fcn.00403ea0","addr":4210336,"size":26}}]
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff graphs comparison with addresses
|
||
TOOL=rz-diff
|
||
ARGS=-t graphs -0 0x401ae0 -1 0x401af0 bins/other/rz-diff/true bins/other/rz-diff/false
|
||
EXPECT=<<EOF
|
||
digraph code {
|
||
graph [bgcolor=azure fontsize=8 fontname="Courier" splines="ortho"];
|
||
node [fillcolor=gray style=filled shape=box];
|
||
edge [arrowhead="normal"];
|
||
"0x00401ae0" [fillcolor="yellow",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ -1,4 +1,4 @@\l-fcn.00401ae0(int64_t arg1, int64_t arg2);\l+fcn.00401af0(int64_t arg1, int64_t arg2);\l ; arg int64_t arg1 @ rdi\l ; arg int64_t arg2 @ rsi\l push r12\l@@ -12,4 +12,4 @@\l call sym.imp.dcgettext\l cmp rax, rbp\l mov rbx, rax\l- jz 0x401b10\l+ jz 0x401b20\l", URL="fcn.00401ae0/0x00401ae0"]
|
||
"0x00401b01" [fillcolor="lightgray",color="black", fontname="Courier", label=" mov rax, rbx\l pop rbx\l pop rbp\l pop r12\l ret\l", URL="fcn.00401ae0/0x00401b01"]
|
||
"0x00401b10" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ -1,5 +1,5 @@\l- call fcn.004038e0\l+ call fcn.004038f0\l movzx edx, byte [rax]\l and edx, 0xffffffdf\l cmp dl, 0x55\l- jnz 0x401b78\l+ jnz 0x401b88\l", URL="fcn.00401ae0/0x00401b10"]
|
||
"0x00401b20" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ -1,4 +1,4 @@\l movzx edx, byte [rax+0x01]\l and edx, 0xffffffdf\l cmp dl, 0x54\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b20"]
|
||
"0x00401b2c" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ -1,4 +1,4 @@\l movzx edx, byte [rax+0x02]\l and edx, 0xffffffdf\l cmp dl, 0x46\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b2c"]
|
||
"0x00401b38" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp byte [rax+0x03], 0x2d\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b38"]
|
||
"0x00401b3e" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp byte [rax+0x04], 0x38\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b3e"]
|
||
"0x00401b44" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp byte [rax+0x05], 0x00\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b44"]
|
||
"0x00401b4a" [fillcolor="yellow",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,7 +-1,7 @@\l cmp byte [rbx], 0x60\l- mov eax, 0x404253\l- mov ebx, 0x404247\l+ mov eax, 0x404293\l+ mov ebx, 0x404287\l cmovz rbx, rax\l- jmp 0x401b01\l+ jmp 0x401b11\l", URL="fcn.00401ae0/0x00401b4a"]
|
||
"0x00401b60" [fillcolor="yellow",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ -1,5 +1,5 @@\l- cmp r12d, 0x07\l- mov ebx, 0x40424b\l- mov eax, 0x40424d\l+ cmp byte [rbx], 0x60\l+ mov eax, 0x404293\l+ mov ebx, 0x404287\l cmovz rbx, rax\l- jmp 0x401b01\l+ jmp 0x401b11\l", URL="fcn.00401ae0/0x00401b60"]
|
||
"0x00401b78" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp dl, 0x47\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b78"]
|
||
"0x00401b7d" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ -1,4 +1,4 @@\l movzx edx, byte [rax+0x01]\l and edx, 0xffffffdf\l cmp dl, 0x42\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b7d"]
|
||
"0x00401b89" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp byte [rax+0x02], 0x31\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b89"]
|
||
"0x00401b8f" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp byte [rax+0x03], 0x38\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b8f"]
|
||
"0x00401b95" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp byte [rax+0x04], 0x30\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b95"]
|
||
"0x00401b9b" [fillcolor="lightgray",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,4 +-1,4 @@\l cmp byte [rax+0x05], 0x33\l- jnz 0x401b60\l+ jnz 0x401b70\l", URL="fcn.00401ae0/0x00401b9b"]
|
||
"0x00401ba1" [fillcolor="yellow",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ -3,6 +3,6 @@\l mov edx, 0x30\l mov esi, str.GB18030\l mov rdi, rax\l- call fcn.00401a20\l+ call fcn.00401a30\l test eax, eax\l- jz 0x401b60\l+ jz 0x401b70\l", URL="fcn.00401ae0/0x00401ba1"]
|
||
"0x00401bbc" [fillcolor="yellow",color="black", fontname="Courier", label="--- fcn.00401ae0\l+++ fcn.00401af0\l@@ --1,7 +-1,7 @@\l cmp byte [rbx], 0x60\l- mov eax, 0x40424f\l- mov ebx, 0x404244\l+ mov eax, 0x404293\l+ mov ebx, 0x404287\l cmovz rbx, rax\l- jmp 0x401b01\l+ jmp 0x401b11\l", URL="fcn.00401ae0/0x00401bbc"]
|
||
"0x00401ae0" -> "0x00401b10" [color="#13a10e"];
|
||
"0x00401ae0" -> "0x00401b01" [color="#c50f1f"];
|
||
"0x00401b10" -> "0x00401b78" [color="#13a10e"];
|
||
"0x00401b10" -> "0x00401b20" [color="#c50f1f"];
|
||
"0x00401b78" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b78" -> "0x00401b7d" [color="#c50f1f"];
|
||
"0x00401b60" -> "0x00401b01" [color="#0037da"];
|
||
"0x00401b7d" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b7d" -> "0x00401b89" [color="#c50f1f"];
|
||
"0x00401b89" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b89" -> "0x00401b8f" [color="#c50f1f"];
|
||
"0x00401b8f" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b8f" -> "0x00401b95" [color="#c50f1f"];
|
||
"0x00401b95" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b95" -> "0x00401b9b" [color="#c50f1f"];
|
||
"0x00401b9b" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b9b" -> "0x00401ba1" [color="#c50f1f"];
|
||
"0x00401ba1" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401ba1" -> "0x00401bbc" [color="#c50f1f"];
|
||
"0x00401bbc" -> "0x00401b01" [color="#0037da"];
|
||
"0x00401b20" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b20" -> "0x00401b2c" [color="#c50f1f"];
|
||
"0x00401b2c" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b2c" -> "0x00401b38" [color="#c50f1f"];
|
||
"0x00401b38" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b38" -> "0x00401b3e" [color="#c50f1f"];
|
||
"0x00401b3e" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b3e" -> "0x00401b44" [color="#c50f1f"];
|
||
"0x00401b44" -> "0x00401b60" [color="#13a10e"];
|
||
"0x00401b44" -> "0x00401b4a" [color="#c50f1f"];
|
||
"0x00401b4a" -> "0x00401b01" [color="#0037da"];
|
||
}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff graphs comparison with addresses JSON
|
||
TOOL=rz-diff
|
||
ARGS=-e analysis.jmp.cref=true -j -t graphs -0 0x401ae0 -1 0x401af0 bins/other/rz-diff/true bins/other/rz-diff/false
|
||
EXPECT=<<EOF
|
||
{"source":{"name":"fcn.00401ae0","offset":4201184,"ninstr":73,"nargs":2,"nlocals":0,"size":242,"stack":24,"type":"fcn"},"match":{"name":"fcn.00401ae0","offset":4201184,"ninstr":73,"nargs":2,"nlocals":0,"size":242,"stack":24,"type":"fcn"},"result":[{"pair":{"source":{"address":4201184,"jump":4201232,"fail":4201217},"match":{"address":4201200,"jump":4201248,"fail":4201233}},"similarity":{"type":"PARTIAL","score":0.969697},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ -1,4 +1,4 @@\n-fcn.00401ae0(int64_t arg1, int64_t arg2);\n+fcn.00401af0(int64_t arg1, int64_t arg2);\n ; arg int64_t arg1 @ rdi\n ; arg int64_t arg2 @ rsi\n push r12\n@@ -12,4 +12,4 @@\n call sym.imp.dcgettext\n cmp rax, rbp\n mov rbx, rax\n- jz 0x401b10\n+ jz 0x401b20\n"},{"pair":{"source":{"address":4201217},"match":{"address":4201233}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":" mov rax, rbx\n pop rbx\n pop rbp\n pop r12\n ret\n"},{"pair":{"source":{"address":4201232,"jump":4201336,"fail":4201248},"match":{"address":4201248,"jump":4201352,"fail":4201264}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ -1,5 +1,5 @@\n- call fcn.004038e0\n+ call fcn.004038f0\n movzx edx, byte [rax]\n and edx, 0xffffffdf\n cmp dl, 0x55\n- jnz 0x401b78\n+ jnz 0x401b88\n"},{"pair":{"source":{"address":4201248,"jump":4201312,"fail":4201260},"match":{"address":4201264,"jump":4201328,"fail":4201276}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ -1,4 +1,4 @@\n movzx edx, byte [rax+0x01]\n and edx, 0xffffffdf\n cmp dl, 0x54\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201260,"jump":4201312,"fail":4201272},"match":{"address":4201276,"jump":4201328,"fail":4201288}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ -1,4 +1,4 @@\n movzx edx, byte [rax+0x02]\n and edx, 0xffffffdf\n cmp dl, 0x46\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201272,"jump":4201312,"fail":4201278},"match":{"address":4201288,"jump":4201328,"fail":4201294}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp byte [rax+0x03], 0x2d\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201278,"jump":4201312,"fail":4201284},"match":{"address":4201294,"jump":4201328,"fail":4201300}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp byte [rax+0x04], 0x38\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201284,"jump":4201312,"fail":4201290},"match":{"address":4201300,"jump":4201328,"fail":4201306}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp byte [rax+0x05], 0x00\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201290,"jump":4201217},"match":{"address":4201306,"jump":4201233}},"similarity":{"type":"PARTIAL","score":0.894737},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,7 +-1,7 @@\n cmp byte [rbx], 0x60\n- mov eax, 0x404253\n- mov ebx, 0x404247\n+ mov eax, 0x404293\n+ mov ebx, 0x404287\n cmovz rbx, rax\n- jmp 0x401b01\n+ jmp 0x401b11\n"},{"pair":{"source":{"address":4201312,"jump":4201217},"match":{"address":4201306,"jump":4201233}},"similarity":{"type":"PARTIAL","score":0.550000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ -1,5 +1,5 @@\n- cmp r12d, 0x07\n- mov ebx, 0x40424b\n- mov eax, 0x40424d\n+ cmp byte [rbx], 0x60\n+ mov eax, 0x404293\n+ mov ebx, 0x404287\n cmovz rbx, rax\n- jmp 0x401b01\n+ jmp 0x401b11\n"},{"pair":{"source":{"address":4201336,"jump":4201312,"fail":4201341},"match":{"address":4201352,"jump":4201328,"fail":4201357}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp dl, 0x47\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201341,"jump":4201312,"fail":4201353},"match":{"address":4201357,"jump":4201328,"fail":4201369}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ -1,4 +1,4 @@\n movzx edx, byte [rax+0x01]\n and edx, 0xffffffdf\n cmp dl, 0x42\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201353,"jump":4201312,"fail":4201359},"match":{"address":4201369,"jump":4201328,"fail":4201375}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp byte [rax+0x02], 0x31\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201359,"jump":4201312,"fail":4201365},"match":{"address":4201375,"jump":4201328,"fail":4201381}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp byte [rax+0x03], 0x38\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201365,"jump":4201312,"fail":4201371},"match":{"address":4201381,"jump":4201328,"fail":4201387}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp byte [rax+0x04], 0x30\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201371,"jump":4201312,"fail":4201377},"match":{"address":4201387,"jump":4201328,"fail":4201393}},"similarity":{"type":"COMPLETE","score":1.000000},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,4 +-1,4 @@\n cmp byte [rax+0x05], 0x33\n- jnz 0x401b60\n+ jnz 0x401b70\n"},{"pair":{"source":{"address":4201377,"jump":4201312,"fail":4201404},"match":{"address":4201393,"jump":4201328,"fail":4201420}},"similarity":{"type":"PARTIAL","score":0.962963},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ -3,6 +3,6 @@\n mov edx, 0x30\n mov esi, str.GB18030\n mov rdi, rax\n- call fcn.00401a20\n+ call fcn.00401a30\n test eax, eax\n- jz 0x401b60\n+ jz 0x401b70\n"},{"pair":{"source":{"address":4201404,"jump":4201217},"match":{"address":4201306,"jump":4201233}},"similarity":{"type":"PARTIAL","score":0.681818},"opcodes":"--- fcn.00401ae0\n+++ fcn.00401af0\n@@ --1,7 +-1,7 @@\n cmp byte [rbx], 0x60\n- mov eax, 0x40424f\n- mov ebx, 0x404244\n+ mov eax, 0x404293\n+ mov ebx, 0x404287\n cmovz rbx, rax\n- jmp 0x401b01\n+ jmp 0x401b11\n"},{"pair":{"source":null,"match":{"address":4201328,"jump":4201233}},"similarity":{"type":"UNLIKE","score":0.000000},"opcodes":" cmp r12d, 0x07\n mov ebx, 0x40428b\n mov eax, 0x40428d\n cmovz rbx, rax\n jmp 0x401b11\n"},{"pair":{"source":null,"match":{"address":4201420,"jump":4201233}},"similarity":{"type":"UNLIKE","score":0.000000},"opcodes":" cmp byte [rbx], 0x60\n mov eax, 0x40428f\n mov ebx, 0x404284\n cmovz rbx, rax\n jmp 0x401b11\n"}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff entries comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t entries bins/elf/hello_world bins/elf/hello_world32
|
||
EXPECT=<<EOF
|
||
--- bins/elf/hello_world
|
||
+++ bins/elf/hello_world32
|
||
@@ -1,3 +1,3 @@
|
||
-virt: 0x00000000000007a0 phys: 0x00000000000007a0 entry init
|
||
-virt: 0x0000000000000760 phys: 0x0000000000000760 entry fini
|
||
-virt: 0x00000000000006a0 phys: 0x00000000000006a0 entry program
|
||
+virt: 0x0000000000000600 phys: 0x0000000000000600 entry init
|
||
+virt: 0x00000000000005b0 phys: 0x00000000000005b0 entry fini
|
||
+virt: 0x00000000000004d0 phys: 0x00000000000004d0 entry program
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff entries comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt entries bins/elf/hello_world bins/elf/hello_world32
|
||
EXPECT=<<EOF
|
||
{"from":"bins/elf/hello_world","to":"bins/elf/hello_world32","diff":[{"from":[1,3],"to":[1,3],"ops":[{"op":"delete","value":"virt: 0x00000000000007a0 phys: 0x00000000000007a0 entry init\n"},{"op":"delete","value":"virt: 0x0000000000000760 phys: 0x0000000000000760 entry fini\n"},{"op":"delete","value":"virt: 0x00000000000006a0 phys: 0x00000000000006a0 entry program\n"},{"op":"insert","value":"virt: 0x0000000000000600 phys: 0x0000000000000600 entry init\n"},{"op":"insert","value":"virt: 0x00000000000005b0 phys: 0x00000000000005b0 entry fini\n"},{"op":"insert","value":"virt: 0x00000000000004d0 phys: 0x00000000000004d0 entry program\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff imports comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t imports bins/elf/hello_world bins/other/rz-diff/true
|
||
EXPECT=<<EOF
|
||
--- bins/elf/hello_world
|
||
+++ bins/other/rz-diff/true
|
||
@@ -1,11 +1,49 @@
|
||
-WEAK NOTYPE _ITM_deregisterTMCloneTable
|
||
-WEAK NOTYPE _ITM_registerTMCloneTable
|
||
-WEAK FUNC __cxa_finalize
|
||
+GLOBAL FUNC __ctype_b_loc
|
||
+GLOBAL FUNC __ctype_get_mb_cur_max
|
||
+GLOBAL FUNC __cxa_atexit
|
||
+GLOBAL FUNC __errno_location
|
||
+GLOBAL FUNC __fpending
|
||
+GLOBAL FUNC __fprintf_chk
|
||
+GLOBAL FUNC __freading
|
||
WEAK NOTYPE __gmon_start__
|
||
GLOBAL FUNC __libc_start_main
|
||
+GLOBAL FUNC __printf_chk
|
||
+GLOBAL FUNC __stack_chk_fail
|
||
+GLOBAL FUNC __uflow
|
||
+GLOBAL FUNC _exit
|
||
+GLOBAL FUNC abort
|
||
+GLOBAL FUNC bindtextdomain
|
||
+GLOBAL FUNC calloc
|
||
+GLOBAL FUNC close
|
||
+GLOBAL FUNC dcgettext
|
||
+GLOBAL FUNC error
|
||
+GLOBAL FUNC exit
|
||
+GLOBAL FUNC fclose
|
||
+GLOBAL FUNC fdopen
|
||
+GLOBAL FUNC fflush
|
||
+GLOBAL FUNC fileno
|
||
+GLOBAL FUNC fputs_unlocked
|
||
GLOBAL FUNC free
|
||
+GLOBAL FUNC fscanf
|
||
+GLOBAL FUNC fseeko
|
||
+GLOBAL FUNC fwrite
|
||
+GLOBAL FUNC getenv
|
||
+GLOBAL FUNC iswprint
|
||
+GLOBAL FUNC lseek
|
||
GLOBAL FUNC malloc
|
||
-GLOBAL FUNC puts
|
||
-GLOBAL FUNC strcat
|
||
+GLOBAL FUNC mbrtowc
|
||
+GLOBAL FUNC mbsinit
|
||
+GLOBAL FUNC memcmp
|
||
+GLOBAL FUNC memcpy
|
||
+GLOBAL FUNC memset
|
||
+GLOBAL FUNC nl_langinfo
|
||
+GLOBAL FUNC open
|
||
+GLOBAL FUNC realloc
|
||
+GLOBAL FUNC setlocale
|
||
+GLOBAL FUNC strcmp
|
||
GLOBAL FUNC strcpy
|
||
GLOBAL FUNC strlen
|
||
+GLOBAL FUNC strncmp
|
||
+GLOBAL FUNC strrchr
|
||
+GLOBAL FUNC textdomain
|
||
+GLOBAL FUNC ungetc
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff imports comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt imports bins/elf/hello_world bins/other/rz-diff/true
|
||
EXPECT=<<EOF
|
||
{"from":"bins/elf/hello_world","to":"bins/other/rz-diff/true","diff":[{"from":[1,11],"to":[1,49],"ops":[{"op":"delete","value":"WEAK NOTYPE _ITM_deregisterTMCloneTable\n"},{"op":"delete","value":"WEAK NOTYPE _ITM_registerTMCloneTable\n"},{"op":"delete","value":"WEAK FUNC __cxa_finalize\n"},{"op":"insert","value":"GLOBAL FUNC __ctype_b_loc\n"},{"op":"insert","value":"GLOBAL FUNC __ctype_get_mb_cur_max\n"},{"op":"insert","value":"GLOBAL FUNC __cxa_atexit\n"},{"op":"insert","value":"GLOBAL FUNC __errno_location\n"},{"op":"insert","value":"GLOBAL FUNC __fpending\n"},{"op":"insert","value":"GLOBAL FUNC __fprintf_chk\n"},{"op":"insert","value":"GLOBAL FUNC __freading\n"},{"op":"equal","value":"WEAK NOTYPE __gmon_start__\n"},{"op":"equal","value":"GLOBAL FUNC __libc_start_main\n"},{"op":"insert","value":"GLOBAL FUNC __printf_chk\n"},{"op":"insert","value":"GLOBAL FUNC __stack_chk_fail\n"},{"op":"insert","value":"GLOBAL FUNC __uflow\n"},{"op":"insert","value":"GLOBAL FUNC _exit\n"},{"op":"insert","value":"GLOBAL FUNC abort\n"},{"op":"insert","value":"GLOBAL FUNC bindtextdomain\n"},{"op":"insert","value":"GLOBAL FUNC calloc\n"},{"op":"insert","value":"GLOBAL FUNC close\n"},{"op":"insert","value":"GLOBAL FUNC dcgettext\n"},{"op":"insert","value":"GLOBAL FUNC error\n"},{"op":"insert","value":"GLOBAL FUNC exit\n"},{"op":"insert","value":"GLOBAL FUNC fclose\n"},{"op":"insert","value":"GLOBAL FUNC fdopen\n"},{"op":"insert","value":"GLOBAL FUNC fflush\n"},{"op":"insert","value":"GLOBAL FUNC fileno\n"},{"op":"insert","value":"GLOBAL FUNC fputs_unlocked\n"},{"op":"equal","value":"GLOBAL FUNC free\n"},{"op":"insert","value":"GLOBAL FUNC fscanf\n"},{"op":"insert","value":"GLOBAL FUNC fseeko\n"},{"op":"insert","value":"GLOBAL FUNC fwrite\n"},{"op":"insert","value":"GLOBAL FUNC getenv\n"},{"op":"insert","value":"GLOBAL FUNC iswprint\n"},{"op":"insert","value":"GLOBAL FUNC lseek\n"},{"op":"equal","value":"GLOBAL FUNC malloc\n"},{"op":"delete","value":"GLOBAL FUNC puts\n"},{"op":"delete","value":"GLOBAL FUNC strcat\n"},{"op":"insert","value":"GLOBAL FUNC mbrtowc\n"},{"op":"insert","value":"GLOBAL FUNC mbsinit\n"},{"op":"insert","value":"GLOBAL FUNC memcmp\n"},{"op":"insert","value":"GLOBAL FUNC memcpy\n"},{"op":"insert","value":"GLOBAL FUNC memset\n"},{"op":"insert","value":"GLOBAL FUNC nl_langinfo\n"},{"op":"insert","value":"GLOBAL FUNC open\n"},{"op":"insert","value":"GLOBAL FUNC realloc\n"},{"op":"insert","value":"GLOBAL FUNC setlocale\n"},{"op":"insert","value":"GLOBAL FUNC strcmp\n"},{"op":"equal","value":"GLOBAL FUNC strcpy\n"},{"op":"equal","value":"GLOBAL FUNC strlen\n"},{"op":"insert","value":"GLOBAL FUNC strncmp\n"},{"op":"insert","value":"GLOBAL FUNC strrchr\n"},{"op":"insert","value":"GLOBAL FUNC textdomain\n"},{"op":"insert","value":"GLOBAL FUNC ungetc\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff fields comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t fields bins/mach0/test-arm32 bins/mach0/test-arm64
|
||
EXPECT=<<EOF
|
||
--- bins/mach0/test-arm32
|
||
+++ bins/mach0/test-arm64
|
||
@@ --1,16 +-1,16 @@
|
||
header
|
||
- load_command_0_LC_SEGMENT
|
||
+ load_command_0_LC_SEGMENT_64
|
||
load_command_10_LC_SOURCE_VERSION
|
||
load_command_11_LC_MAIN
|
||
- load_command_12_LC_ENCRYPTION_INFO
|
||
+ load_command_12_LC_ENCRYPTION_INFO_64
|
||
load_command_13_LC_LOAD_DYLIB
|
||
load_command_14_LC_FUNCTION_STARTS
|
||
load_command_15_LC_DATA_IN_CODE
|
||
- load_command_1_LC_SEGMENT
|
||
- load_command_2_LC_SEGMENT
|
||
- load_command_3_LC_SEGMENT
|
||
+ load_command_1_LC_SEGMENT_64
|
||
+ load_command_2_LC_SEGMENT_64
|
||
+ load_command_3_LC_SEGMENT_64
|
||
load_command_4_LC_DYLD_INFO_ONLY
|
||
load_command_5_LC_SYMTAB
|
||
load_command_6_LC_DYSYMTAB
|
||
@@ -21,3 +21,4 @@
|
||
section_1
|
||
section_2
|
||
section_3
|
||
+ section_4
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff fields comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt fields bins/mach0/test-arm32 bins/mach0/test-arm64
|
||
EXPECT=<<EOF
|
||
{"from":"bins/mach0/test-arm32","to":"bins/mach0/test-arm64","diff":[{"from":[-1,16],"to":[-1,16],"ops":[{"op":"equal","value":" header\n"},{"op":"delete","value":" load_command_0_LC_SEGMENT\n"},{"op":"insert","value":" load_command_0_LC_SEGMENT_64\n"},{"op":"equal","value":" load_command_10_LC_SOURCE_VERSION\n"},{"op":"equal","value":" load_command_11_LC_MAIN\n"},{"op":"delete","value":" load_command_12_LC_ENCRYPTION_INFO\n"},{"op":"insert","value":" load_command_12_LC_ENCRYPTION_INFO_64\n"},{"op":"equal","value":" load_command_13_LC_LOAD_DYLIB\n"},{"op":"equal","value":" load_command_14_LC_FUNCTION_STARTS\n"},{"op":"equal","value":" load_command_15_LC_DATA_IN_CODE\n"},{"op":"delete","value":" load_command_1_LC_SEGMENT\n"},{"op":"delete","value":" load_command_2_LC_SEGMENT\n"},{"op":"delete","value":" load_command_3_LC_SEGMENT\n"},{"op":"insert","value":" load_command_1_LC_SEGMENT_64\n"},{"op":"insert","value":" load_command_2_LC_SEGMENT_64\n"},{"op":"insert","value":" load_command_3_LC_SEGMENT_64\n"},{"op":"equal","value":" load_command_4_LC_DYLD_INFO_ONLY\n"},{"op":"equal","value":" load_command_5_LC_SYMTAB\n"},{"op":"equal","value":" load_command_6_LC_DYSYMTAB\n"}]},{"from":[21,3],"to":[21,4],"ops":[{"op":"equal","value":" section_1\n"},{"op":"equal","value":" section_2\n"},{"op":"equal","value":" section_3\n"},{"op":"insert","value":" section_4\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff fields comparison with addresses
|
||
TOOL=rz-diff
|
||
ARGS=-At fields bins/mach0/test-arm32 bins/mach0/test-arm64
|
||
EXPECT=<<EOF
|
||
--- bins/mach0/test-arm32
|
||
+++ bins/mach0/test-arm64
|
||
@@ --1,25 +-1,26 @@
|
||
virt: 0x0000000000000000 phys: 0x0000000000000000 header
|
||
-virt: 0x000000000000001c phys: 0x000000000000001c load_command_0_LC_SEGMENT
|
||
-virt: 0x0000000000000370 phys: 0x0000000000000370 load_command_10_LC_SOURCE_VERSION
|
||
-virt: 0x0000000000000380 phys: 0x0000000000000380 load_command_11_LC_MAIN
|
||
-virt: 0x0000000000000398 phys: 0x0000000000000398 load_command_12_LC_ENCRYPTION_INFO
|
||
-virt: 0x00000000000003ac phys: 0x00000000000003ac load_command_13_LC_LOAD_DYLIB
|
||
-virt: 0x00000000000003e0 phys: 0x00000000000003e0 load_command_14_LC_FUNCTION_STARTS
|
||
-virt: 0x00000000000003f0 phys: 0x00000000000003f0 load_command_15_LC_DATA_IN_CODE
|
||
-virt: 0x0000000000000054 phys: 0x0000000000000054 load_command_1_LC_SEGMENT
|
||
-virt: 0x000000000000019c phys: 0x000000000000019c load_command_2_LC_SEGMENT
|
||
-virt: 0x000000000000025c phys: 0x000000000000025c load_command_3_LC_SEGMENT
|
||
-virt: 0x0000000000000294 phys: 0x0000000000000294 load_command_4_LC_DYLD_INFO_ONLY
|
||
-virt: 0x00000000000002c4 phys: 0x00000000000002c4 load_command_5_LC_SYMTAB
|
||
-virt: 0x00000000000002dc phys: 0x00000000000002dc load_command_6_LC_DYSYMTAB
|
||
-virt: 0x000000000000032c phys: 0x000000000000032c load_command_7_LC_LOAD_DYLINKER
|
||
-virt: 0x0000000000000348 phys: 0x0000000000000348 load_command_8_LC_UUID
|
||
-virt: 0x0000000000000360 phys: 0x0000000000000360 load_command_9_LC_VERSION_MIN_IPHONEOS
|
||
-virt: 0x00000000000001d4 phys: 0x00000000000001d4 section_0
|
||
-virt: 0x000000000000008c phys: 0x000000000000008c section_0
|
||
-virt: 0x0000000000000218 phys: 0x0000000000000218 section_1
|
||
-virt: 0x00000000000000d0 phys: 0x00000000000000d0 section_1
|
||
-virt: 0x0000000000000114 phys: 0x0000000000000114 section_2
|
||
-virt: 0x0000000000000158 phys: 0x0000000000000158 section_3
|
||
+virt: 0x0000000000000020 phys: 0x0000000000000020 load_command_0_LC_SEGMENT_64
|
||
+virt: 0x0000000000000450 phys: 0x0000000000000450 load_command_10_LC_SOURCE_VERSION
|
||
+virt: 0x0000000000000460 phys: 0x0000000000000460 load_command_11_LC_MAIN
|
||
+virt: 0x0000000000000478 phys: 0x0000000000000478 load_command_12_LC_ENCRYPTION_INFO_64
|
||
+virt: 0x0000000000000490 phys: 0x0000000000000490 load_command_13_LC_LOAD_DYLIB
|
||
+virt: 0x00000000000004c8 phys: 0x00000000000004c8 load_command_14_LC_FUNCTION_STARTS
|
||
+virt: 0x00000000000004d8 phys: 0x00000000000004d8 load_command_15_LC_DATA_IN_CODE
|
||
+virt: 0x0000000000000068 phys: 0x0000000000000068 load_command_1_LC_SEGMENT_64
|
||
+virt: 0x0000000000000240 phys: 0x0000000000000240 load_command_2_LC_SEGMENT_64
|
||
+virt: 0x0000000000000328 phys: 0x0000000000000328 load_command_3_LC_SEGMENT_64
|
||
+virt: 0x0000000000000370 phys: 0x0000000000000370 load_command_4_LC_DYLD_INFO_ONLY
|
||
+virt: 0x00000000000003a0 phys: 0x00000000000003a0 load_command_5_LC_SYMTAB
|
||
+virt: 0x00000000000003b8 phys: 0x00000000000003b8 load_command_6_LC_DYSYMTAB
|
||
+virt: 0x0000000000000408 phys: 0x0000000000000408 load_command_7_LC_LOAD_DYLINKER
|
||
+virt: 0x0000000000000428 phys: 0x0000000000000428 load_command_8_LC_UUID
|
||
+virt: 0x0000000000000440 phys: 0x0000000000000440 load_command_9_LC_VERSION_MIN_IPHONEOS
|
||
+virt: 0x0000000000000288 phys: 0x0000000000000288 section_0
|
||
+virt: 0x00000000000000b0 phys: 0x00000000000000b0 section_0
|
||
+virt: 0x00000000000002d8 phys: 0x00000000000002d8 section_1
|
||
+virt: 0x0000000000000100 phys: 0x0000000000000100 section_1
|
||
+virt: 0x0000000000000150 phys: 0x0000000000000150 section_2
|
||
+virt: 0x00000000000001a0 phys: 0x00000000000001a0 section_3
|
||
+virt: 0x00000000000001f0 phys: 0x00000000000001f0 section_4
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff fields comparison with addresses JSON
|
||
TOOL=rz-diff
|
||
ARGS=-Ajt fields bins/mach0/test-arm32 bins/mach0/test-arm64
|
||
EXPECT=<<EOF
|
||
{"from":"bins/mach0/test-arm32","to":"bins/mach0/test-arm64","diff":[{"from":[-1,25],"to":[-1,26],"ops":[{"op":"equal","value":"virt: 0x0000000000000000 phys: 0x0000000000000000 header\n"},{"op":"delete","value":"virt: 0x000000000000001c phys: 0x000000000000001c load_command_0_LC_SEGMENT\n"},{"op":"delete","value":"virt: 0x0000000000000370 phys: 0x0000000000000370 load_command_10_LC_SOURCE_VERSION\n"},{"op":"delete","value":"virt: 0x0000000000000380 phys: 0x0000000000000380 load_command_11_LC_MAIN\n"},{"op":"delete","value":"virt: 0x0000000000000398 phys: 0x0000000000000398 load_command_12_LC_ENCRYPTION_INFO\n"},{"op":"delete","value":"virt: 0x00000000000003ac phys: 0x00000000000003ac load_command_13_LC_LOAD_DYLIB\n"},{"op":"delete","value":"virt: 0x00000000000003e0 phys: 0x00000000000003e0 load_command_14_LC_FUNCTION_STARTS\n"},{"op":"delete","value":"virt: 0x00000000000003f0 phys: 0x00000000000003f0 load_command_15_LC_DATA_IN_CODE\n"},{"op":"delete","value":"virt: 0x0000000000000054 phys: 0x0000000000000054 load_command_1_LC_SEGMENT\n"},{"op":"delete","value":"virt: 0x000000000000019c phys: 0x000000000000019c load_command_2_LC_SEGMENT\n"},{"op":"delete","value":"virt: 0x000000000000025c phys: 0x000000000000025c load_command_3_LC_SEGMENT\n"},{"op":"delete","value":"virt: 0x0000000000000294 phys: 0x0000000000000294 load_command_4_LC_DYLD_INFO_ONLY\n"},{"op":"delete","value":"virt: 0x00000000000002c4 phys: 0x00000000000002c4 load_command_5_LC_SYMTAB\n"},{"op":"delete","value":"virt: 0x00000000000002dc phys: 0x00000000000002dc load_command_6_LC_DYSYMTAB\n"},{"op":"delete","value":"virt: 0x000000000000032c phys: 0x000000000000032c load_command_7_LC_LOAD_DYLINKER\n"},{"op":"delete","value":"virt: 0x0000000000000348 phys: 0x0000000000000348 load_command_8_LC_UUID\n"},{"op":"delete","value":"virt: 0x0000000000000360 phys: 0x0000000000000360 load_command_9_LC_VERSION_MIN_IPHONEOS\n"},{"op":"delete","value":"virt: 0x00000000000001d4 phys: 0x00000000000001d4 section_0\n"},{"op":"delete","value":"virt: 0x000000000000008c phys: 0x000000000000008c section_0\n"},{"op":"delete","value":"virt: 0x0000000000000218 phys: 0x0000000000000218 section_1\n"},{"op":"delete","value":"virt: 0x00000000000000d0 phys: 0x00000000000000d0 section_1\n"},{"op":"delete","value":"virt: 0x0000000000000114 phys: 0x0000000000000114 section_2\n"},{"op":"delete","value":"virt: 0x0000000000000158 phys: 0x0000000000000158 section_3\n"},{"op":"insert","value":"virt: 0x0000000000000020 phys: 0x0000000000000020 load_command_0_LC_SEGMENT_64\n"},{"op":"insert","value":"virt: 0x0000000000000450 phys: 0x0000000000000450 load_command_10_LC_SOURCE_VERSION\n"},{"op":"insert","value":"virt: 0x0000000000000460 phys: 0x0000000000000460 load_command_11_LC_MAIN\n"},{"op":"insert","value":"virt: 0x0000000000000478 phys: 0x0000000000000478 load_command_12_LC_ENCRYPTION_INFO_64\n"},{"op":"insert","value":"virt: 0x0000000000000490 phys: 0x0000000000000490 load_command_13_LC_LOAD_DYLIB\n"},{"op":"insert","value":"virt: 0x00000000000004c8 phys: 0x00000000000004c8 load_command_14_LC_FUNCTION_STARTS\n"},{"op":"insert","value":"virt: 0x00000000000004d8 phys: 0x00000000000004d8 load_command_15_LC_DATA_IN_CODE\n"},{"op":"insert","value":"virt: 0x0000000000000068 phys: 0x0000000000000068 load_command_1_LC_SEGMENT_64\n"},{"op":"insert","value":"virt: 0x0000000000000240 phys: 0x0000000000000240 load_command_2_LC_SEGMENT_64\n"},{"op":"insert","value":"virt: 0x0000000000000328 phys: 0x0000000000000328 load_command_3_LC_SEGMENT_64\n"},{"op":"insert","value":"virt: 0x0000000000000370 phys: 0x0000000000000370 load_command_4_LC_DYLD_INFO_ONLY\n"},{"op":"insert","value":"virt: 0x00000000000003a0 phys: 0x00000000000003a0 load_command_5_LC_SYMTAB\n"},{"op":"insert","value":"virt: 0x00000000000003b8 phys: 0x00000000000003b8 load_command_6_LC_DYSYMTAB\n"},{"op":"insert","value":"virt: 0x0000000000000408 phys: 0x0000000000000408 load_command_7_LC_LOAD_DYLINKER\n"},{"op":"insert","value":"virt: 0x0000000000000428 phys: 0x0000000000000428 load_command_8_LC_UUID\n"},{"op":"insert","value":"virt: 0x0000000000000440 phys: 0x0000000000000440 load_command_9_LC_VERSION_MIN_IPHONEOS\n"},{"op":"insert","value":"virt: 0x0000000000000288 phys: 0x0000000000000288 section_0\n"},{"op":"insert","value":"virt: 0x00000000000000b0 phys: 0x00000000000000b0 section_0\n"},{"op":"insert","value":"virt: 0x00000000000002d8 phys: 0x00000000000002d8 section_1\n"},{"op":"insert","value":"virt: 0x0000000000000100 phys: 0x0000000000000100 section_1\n"},{"op":"insert","value":"virt: 0x0000000000000150 phys: 0x0000000000000150 section_2\n"},{"op":"insert","value":"virt: 0x00000000000001a0 phys: 0x00000000000001a0 section_3\n"},{"op":"insert","value":"virt: 0x00000000000001f0 phys: 0x00000000000001f0 section_4\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff libraries comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t libraries bins/java/Main.java.11.class bins/java/Hello.class
|
||
EXPECT=<<EOF
|
||
--- bins/java/Main.java.11.class
|
||
+++ bins/java/Hello.class
|
||
@@ -1,12 +1,5 @@
|
||
-Main
|
||
-[Ljava/lang/String;
|
||
-java/io/BufferedReader
|
||
-java/io/FileReader
|
||
+Hello
|
||
java/io/PrintStream
|
||
-java/lang/Exception
|
||
java/lang/Object
|
||
-java/lang/String
|
||
+java/lang/StringBuilder
|
||
java/lang/System
|
||
-java/lang/invoke/MethodHandles
|
||
-java/lang/invoke/MethodHandles$Lookup
|
||
-java/lang/invoke/StringConcatFactory
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff libraries comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt libraries bins/java/Main.java.11.class bins/java/Hello.class
|
||
EXPECT=<<EOF
|
||
{"from":"bins/java/Main.java.11.class","to":"bins/java/Hello.class","diff":[{"from":[1,12],"to":[1,5],"ops":[{"op":"delete","value":"Main\n"},{"op":"delete","value":"[Ljava/lang/String;\n"},{"op":"delete","value":"java/io/BufferedReader\n"},{"op":"delete","value":"java/io/FileReader\n"},{"op":"insert","value":"Hello\n"},{"op":"equal","value":"java/io/PrintStream\n"},{"op":"delete","value":"java/lang/Exception\n"},{"op":"equal","value":"java/lang/Object\n"},{"op":"delete","value":"java/lang/String\n"},{"op":"insert","value":"java/lang/StringBuilder\n"},{"op":"equal","value":"java/lang/System\n"},{"op":"delete","value":"java/lang/invoke/MethodHandles\n"},{"op":"delete","value":"java/lang/invoke/MethodHandles$Lookup\n"},{"op":"delete","value":"java/lang/invoke/StringConcatFactory\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff sections comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t sections bins/java/Main.java.11.class bins/java/Hello.class
|
||
EXPECT=<<EOF
|
||
--- bins/java/Main.java.11.class
|
||
+++ bins/java/Hello.class
|
||
@@ -0,8 +0,12 @@
|
||
align: 0x00000000 -r-- class.attr
|
||
align: 0x00000000 -r-- class.constant_pool
|
||
+align: 0x00000000 -r-- class.fields
|
||
+align: 0x00000000 -r-- class.fields.who.attr
|
||
align: 0x00000000 -r-- class.methods
|
||
align: 0x00000000 -r-- class.methods.<init>.attr
|
||
align: 0x00000000 -r-x class.methods.<init>.attr.0.code
|
||
align: 0x00000000 -r-- class.methods.main.attr
|
||
align: 0x00000000 -r-x class.methods.main.attr.0.code
|
||
+align: 0x00000000 -r-- class.methods.say.attr
|
||
+align: 0x00000000 -r-x class.methods.say.attr.0.code
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff sections comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt sections bins/java/Main.java.11.class bins/java/Hello.class
|
||
EXPECT=<<EOF
|
||
{"from":"bins/java/Main.java.11.class","to":"bins/java/Hello.class","diff":[{"from":[0,8],"to":[0,12],"ops":[{"op":"equal","value":"align: 0x00000000 -r-- class.attr\n"},{"op":"equal","value":"align: 0x00000000 -r-- class.constant_pool\n"},{"op":"insert","value":"align: 0x00000000 -r-- class.fields\n"},{"op":"insert","value":"align: 0x00000000 -r-- class.fields.who.attr\n"},{"op":"equal","value":"align: 0x00000000 -r-- class.methods\n"},{"op":"equal","value":"align: 0x00000000 -r-- class.methods.<init>.attr\n"},{"op":"equal","value":"align: 0x00000000 -r-x class.methods.<init>.attr.0.code\n"},{"op":"equal","value":"align: 0x00000000 -r-- class.methods.main.attr\n"},{"op":"equal","value":"align: 0x00000000 -r-x class.methods.main.attr.0.code\n"},{"op":"insert","value":"align: 0x00000000 -r-- class.methods.say.attr\n"},{"op":"insert","value":"align: 0x00000000 -r-x class.methods.say.attr.0.code\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff sections comparison with addresses
|
||
TOOL=rz-diff
|
||
ARGS=-At sections bins/java/Main.java.11.class bins/java/Hello.class
|
||
EXPECT=<<EOF
|
||
--- bins/java/Main.java.11.class
|
||
+++ bins/java/Hello.class
|
||
@@ -1,7 +1,11 @@
|
||
-virt: 0x000000000000058a:0x0026 phys: 0x000000000000058a:0x0026 align: 0x00000000 -r-- class.attr
|
||
-virt: 0x000000000000000a:0x0480 phys: 0x000000000000000a:0x0480 align: 0x00000000 -r-- class.constant_pool
|
||
-virt: 0x000000000000048e:0x00fc phys: 0x000000000000048e:0x00fc align: 0x00000000 -r-- class.methods
|
||
-virt: 0x000000000000048e:0x002b phys: 0x000000000000048e:0x002b align: 0x00000000 -r-- class.methods.<init>.attr
|
||
-virt: 0x00000000000004a4:0x001d phys: 0x00000000000004a4:0x001d align: 0x00000000 -r-x class.methods.<init>.attr.0.code
|
||
-virt: 0x00000000000004b9:0x00d1 phys: 0x00000000000004b9:0x00d1 align: 0x00000000 -r-- class.methods.main.attr
|
||
-virt: 0x00000000000004cf:0x00c1 phys: 0x00000000000004cf:0x00c1 align: 0x00000000 -r-x class.methods.main.attr.0.code
|
||
+virt: 0x00000000000002cd:0x0008 phys: 0x00000000000002cd:0x0008 align: 0x00000000 -r-- class.attr
|
||
+virt: 0x000000000000000a:0x01ff phys: 0x000000000000000a:0x01ff align: 0x00000000 -r-- class.constant_pool
|
||
+virt: 0x000000000000020b:0x000a phys: 0x000000000000020b:0x000a align: 0x00000000 -r-- class.fields
|
||
+virt: 0x000000000000020b:0x000a phys: 0x000000000000020b:0x000a align: 0x00000000 -r-- class.fields.who.attr
|
||
+virt: 0x0000000000000215:0x00b8 phys: 0x0000000000000215:0x00b8 align: 0x00000000 -r-- class.methods
|
||
+virt: 0x0000000000000215:0x0038 phys: 0x0000000000000215:0x0038 align: 0x00000000 -r-- class.methods.<init>.attr
|
||
+virt: 0x000000000000022b:0x002a phys: 0x000000000000022b:0x002a align: 0x00000000 -r-x class.methods.<init>.attr.0.code
|
||
+virt: 0x0000000000000294:0x0039 phys: 0x0000000000000294:0x0039 align: 0x00000000 -r-- class.methods.main.attr
|
||
+virt: 0x00000000000002aa:0x0029 phys: 0x00000000000002aa:0x0029 align: 0x00000000 -r-x class.methods.main.attr.0.code
|
||
+virt: 0x000000000000024d:0x0047 phys: 0x000000000000024d:0x0047 align: 0x00000000 -r-- class.methods.say.attr
|
||
+virt: 0x0000000000000263:0x0039 phys: 0x0000000000000263:0x0039 align: 0x00000000 -r-x class.methods.say.attr.0.code
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff sections comparison with addresses JSON
|
||
TOOL=rz-diff
|
||
ARGS=-Ajt sections bins/java/Main.java.11.class bins/java/Hello.class
|
||
EXPECT=<<EOF
|
||
{"from":"bins/java/Main.java.11.class","to":"bins/java/Hello.class","diff":[{"from":[1,7],"to":[1,11],"ops":[{"op":"delete","value":"virt: 0x000000000000058a:0x0026 phys: 0x000000000000058a:0x0026 align: 0x00000000 -r-- class.attr\n"},{"op":"delete","value":"virt: 0x000000000000000a:0x0480 phys: 0x000000000000000a:0x0480 align: 0x00000000 -r-- class.constant_pool\n"},{"op":"delete","value":"virt: 0x000000000000048e:0x00fc phys: 0x000000000000048e:0x00fc align: 0x00000000 -r-- class.methods\n"},{"op":"delete","value":"virt: 0x000000000000048e:0x002b phys: 0x000000000000048e:0x002b align: 0x00000000 -r-- class.methods.<init>.attr\n"},{"op":"delete","value":"virt: 0x00000000000004a4:0x001d phys: 0x00000000000004a4:0x001d align: 0x00000000 -r-x class.methods.<init>.attr.0.code\n"},{"op":"delete","value":"virt: 0x00000000000004b9:0x00d1 phys: 0x00000000000004b9:0x00d1 align: 0x00000000 -r-- class.methods.main.attr\n"},{"op":"delete","value":"virt: 0x00000000000004cf:0x00c1 phys: 0x00000000000004cf:0x00c1 align: 0x00000000 -r-x class.methods.main.attr.0.code\n"},{"op":"insert","value":"virt: 0x00000000000002cd:0x0008 phys: 0x00000000000002cd:0x0008 align: 0x00000000 -r-- class.attr\n"},{"op":"insert","value":"virt: 0x000000000000000a:0x01ff phys: 0x000000000000000a:0x01ff align: 0x00000000 -r-- class.constant_pool\n"},{"op":"insert","value":"virt: 0x000000000000020b:0x000a phys: 0x000000000000020b:0x000a align: 0x00000000 -r-- class.fields\n"},{"op":"insert","value":"virt: 0x000000000000020b:0x000a phys: 0x000000000000020b:0x000a align: 0x00000000 -r-- class.fields.who.attr\n"},{"op":"insert","value":"virt: 0x0000000000000215:0x00b8 phys: 0x0000000000000215:0x00b8 align: 0x00000000 -r-- class.methods\n"},{"op":"insert","value":"virt: 0x0000000000000215:0x0038 phys: 0x0000000000000215:0x0038 align: 0x00000000 -r-- class.methods.<init>.attr\n"},{"op":"insert","value":"virt: 0x000000000000022b:0x002a phys: 0x000000000000022b:0x002a align: 0x00000000 -r-x class.methods.<init>.attr.0.code\n"},{"op":"insert","value":"virt: 0x0000000000000294:0x0039 phys: 0x0000000000000294:0x0039 align: 0x00000000 -r-- class.methods.main.attr\n"},{"op":"insert","value":"virt: 0x00000000000002aa:0x0029 phys: 0x00000000000002aa:0x0029 align: 0x00000000 -r-x class.methods.main.attr.0.code\n"},{"op":"insert","value":"virt: 0x000000000000024d:0x0047 phys: 0x000000000000024d:0x0047 align: 0x00000000 -r-- class.methods.say.attr\n"},{"op":"insert","value":"virt: 0x0000000000000263:0x0039 phys: 0x0000000000000263:0x0039 align: 0x00000000 -r-x class.methods.say.attr.0.code\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff symbols comparison
|
||
TOOL=rz-diff
|
||
ARGS=-t symbols bins/java/Main.java.11.class bins/java/Main.java.1.7.class
|
||
EXPECT=<<EOF
|
||
--- bins/java/Main.java.11.class
|
||
+++ bins/java/Main.java.1.7.class
|
||
@@ -2,6 +2,9 @@
|
||
Main Main Main.<init>
|
||
Main Main Main.main
|
||
java.lang.Object Object Object.<init>
|
||
+java.lang.StringBuilder StringBuilder StringBuilder.<init>
|
||
+java.lang.StringBuilder StringBuilder StringBuilder.append
|
||
+java.lang.StringBuilder StringBuilder StringBuilder.toString
|
||
java.lang.System System System.err
|
||
java.lang.System System System.out
|
||
java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.<init>
|
||
@@ -10,4 +13,3 @@
|
||
java.io.FileReader java.io.FileReader java.io.FileReader.<init>
|
||
java.io.PrintStream java.io.PrintStream java.io.PrintStream.format
|
||
java.io.PrintStream java.io.PrintStream java.io.PrintStream.println
|
||
-java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff symbols comparison JSON
|
||
TOOL=rz-diff
|
||
ARGS=-jt symbols bins/java/Main.java.11.class bins/java/Main.java.1.7.class
|
||
EXPECT=<<EOF
|
||
{"from":"bins/java/Main.java.11.class","to":"bins/java/Main.java.1.7.class","diff":[{"from":[2,6],"to":[2,9],"ops":[{"op":"equal","value":"Main Main Main.<init>\n"},{"op":"equal","value":"Main Main Main.main\n"},{"op":"equal","value":"java.lang.Object Object Object.<init>\n"},{"op":"insert","value":"java.lang.StringBuilder StringBuilder StringBuilder.<init>\n"},{"op":"insert","value":"java.lang.StringBuilder StringBuilder StringBuilder.append\n"},{"op":"insert","value":"java.lang.StringBuilder StringBuilder StringBuilder.toString\n"},{"op":"equal","value":"java.lang.System System System.err\n"},{"op":"equal","value":"java.lang.System System System.out\n"},{"op":"equal","value":"java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.<init>\n"}]},{"from":[10,4],"to":[13,3],"ops":[{"op":"equal","value":"java.io.FileReader java.io.FileReader java.io.FileReader.<init>\n"},{"op":"equal","value":"java.io.PrintStream java.io.PrintStream java.io.PrintStream.format\n"},{"op":"equal","value":"java.io.PrintStream java.io.PrintStream java.io.PrintStream.println\n"},{"op":"delete","value":"java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff symbols comparison with addresses
|
||
TOOL=rz-diff
|
||
ARGS=-At symbols bins/java/Main.java.11.class bins/java/Main.java.1.7.class
|
||
EXPECT=<<EOF
|
||
--- bins/java/Main.java.11.class
|
||
+++ bins/java/Main.java.1.7.class
|
||
@@ -1,13 +1,15 @@
|
||
-virt: 0x0000000000000271 phys: 0x0000000000000271 java.lang.Exception Exception Exception.printStackTrace
|
||
-virt: 0x00000000000004a4 phys: 0x00000000000004a4 Main Main Main.<init>
|
||
-virt: 0x00000000000004cf phys: 0x00000000000004cf Main Main Main.main
|
||
+virt: 0x00000000000002aa phys: 0x00000000000002aa java.lang.Exception Exception Exception.printStackTrace
|
||
+virt: 0x0000000000000383 phys: 0x0000000000000383 Main Main Main.<init>
|
||
+virt: 0x00000000000003ae phys: 0x00000000000003ae Main Main Main.main
|
||
virt: 0x000000000000000a phys: 0x000000000000000a java.lang.Object Object Object.<init>
|
||
-virt: 0x00000000000001e2 phys: 0x00000000000001e2 java.lang.System System System.err
|
||
+virt: 0x0000000000000187 phys: 0x0000000000000187 java.lang.StringBuilder StringBuilder StringBuilder.<init>
|
||
+virt: 0x0000000000000198 phys: 0x0000000000000198 java.lang.StringBuilder StringBuilder StringBuilder.append
|
||
+virt: 0x00000000000001db phys: 0x00000000000001db java.lang.StringBuilder StringBuilder StringBuilder.toString
|
||
+virt: 0x000000000000021b phys: 0x000000000000021b java.lang.System System System.err
|
||
virt: 0x0000000000000039 phys: 0x0000000000000039 java.lang.System System System.out
|
||
virt: 0x000000000000011e phys: 0x000000000000011e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.<init>
|
||
-virt: 0x00000000000001b7 phys: 0x00000000000001b7 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close
|
||
+virt: 0x00000000000001f0 phys: 0x00000000000001f0 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close
|
||
virt: 0x000000000000013e phys: 0x000000000000013e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.readLine
|
||
virt: 0x0000000000000114 phys: 0x0000000000000114 java.io.FileReader java.io.FileReader java.io.FileReader.<init>
|
||
-virt: 0x000000000000021f phys: 0x000000000000021f java.io.PrintStream java.io.PrintStream java.io.PrintStream.format
|
||
+virt: 0x0000000000000258 phys: 0x0000000000000258 java.io.PrintStream java.io.PrintStream java.io.PrintStream.format
|
||
virt: 0x0000000000000088 phys: 0x0000000000000088 java.io.PrintStream java.io.PrintStream java.io.PrintStream.println
|
||
-virt: 0x000000000000033f phys: 0x000000000000033f java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff symbols comparison with addresses JSON
|
||
TOOL=rz-diff
|
||
ARGS=-Ajt symbols bins/java/Main.java.11.class bins/java/Main.java.1.7.class
|
||
EXPECT=<<EOF
|
||
{"from":"bins/java/Main.java.11.class","to":"bins/java/Main.java.1.7.class","diff":[{"from":[1,13],"to":[1,15],"ops":[{"op":"delete","value":"virt: 0x0000000000000271 phys: 0x0000000000000271 java.lang.Exception Exception Exception.printStackTrace\n"},{"op":"delete","value":"virt: 0x00000000000004a4 phys: 0x00000000000004a4 Main Main Main.<init>\n"},{"op":"delete","value":"virt: 0x00000000000004cf phys: 0x00000000000004cf Main Main Main.main\n"},{"op":"insert","value":"virt: 0x00000000000002aa phys: 0x00000000000002aa java.lang.Exception Exception Exception.printStackTrace\n"},{"op":"insert","value":"virt: 0x0000000000000383 phys: 0x0000000000000383 Main Main Main.<init>\n"},{"op":"insert","value":"virt: 0x00000000000003ae phys: 0x00000000000003ae Main Main Main.main\n"},{"op":"equal","value":"virt: 0x000000000000000a phys: 0x000000000000000a java.lang.Object Object Object.<init>\n"},{"op":"delete","value":"virt: 0x00000000000001e2 phys: 0x00000000000001e2 java.lang.System System System.err\n"},{"op":"insert","value":"virt: 0x0000000000000187 phys: 0x0000000000000187 java.lang.StringBuilder StringBuilder StringBuilder.<init>\n"},{"op":"insert","value":"virt: 0x0000000000000198 phys: 0x0000000000000198 java.lang.StringBuilder StringBuilder StringBuilder.append\n"},{"op":"insert","value":"virt: 0x00000000000001db phys: 0x00000000000001db java.lang.StringBuilder StringBuilder StringBuilder.toString\n"},{"op":"insert","value":"virt: 0x000000000000021b phys: 0x000000000000021b java.lang.System System System.err\n"},{"op":"equal","value":"virt: 0x0000000000000039 phys: 0x0000000000000039 java.lang.System System System.out\n"},{"op":"equal","value":"virt: 0x000000000000011e phys: 0x000000000000011e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.<init>\n"},{"op":"delete","value":"virt: 0x00000000000001b7 phys: 0x00000000000001b7 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close\n"},{"op":"insert","value":"virt: 0x00000000000001f0 phys: 0x00000000000001f0 java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.close\n"},{"op":"equal","value":"virt: 0x000000000000013e phys: 0x000000000000013e java.io.BufferedReader java.io.BufferedReader java.io.BufferedReader.readLine\n"},{"op":"equal","value":"virt: 0x0000000000000114 phys: 0x0000000000000114 java.io.FileReader java.io.FileReader java.io.FileReader.<init>\n"},{"op":"delete","value":"virt: 0x000000000000021f phys: 0x000000000000021f java.io.PrintStream java.io.PrintStream java.io.PrintStream.format\n"},{"op":"insert","value":"virt: 0x0000000000000258 phys: 0x0000000000000258 java.io.PrintStream java.io.PrintStream java.io.PrintStream.format\n"},{"op":"equal","value":"virt: 0x0000000000000088 phys: 0x0000000000000088 java.io.PrintStream java.io.PrintStream java.io.PrintStream.println\n"},{"op":"delete","value":"virt: 0x000000000000033f phys: 0x000000000000033f java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory java.lang.invoke.StringConcatFactory.makeConcatWithConstants\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
|
||
NAME=rz-diff command with zero argument
|
||
TOOL=rz-diff
|
||
ARGS=-t command bins/java/Main.java.11.class bins/java/Hello.class
|
||
EXIT_STATUS=1
|
||
EXPECT_ERR=<<EOF
|
||
ERROR: rz-diff: error, option -t 'command' requires -0 <command>.
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff command with one argument
|
||
TOOL=rz-diff
|
||
ARGS=-0 javac -t command bins/java/Main.java.11.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
--- bins/java/Main.java.11.class
|
||
+++ bins/java/Main.java.15.class
|
||
@@ -1,4 +1,4 @@
|
||
-Version: (55.0) Java SE 11
|
||
+Version: (59.0) Java SE 15
|
||
Flags: (0x0021) public super
|
||
Class: (#57) LMain;
|
||
Super: (#2) Ljava/lang/Object;
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff command with one argument JSON
|
||
TOOL=rz-diff
|
||
ARGS=-j -0 javac -t command bins/java/Main.java.11.class bins/java/Main.java.15.class
|
||
EXPECT=<<EOF
|
||
{"from":"bins/java/Main.java.11.class","to":"bins/java/Main.java.15.class","diff":[{"from":[1,4],"to":[1,4],"ops":[{"op":"delete","value":"Version: (55.0) Java SE 11\n"},{"op":"insert","value":"Version: (59.0) Java SE 15\n"},{"op":"equal","value":"Flags: (0x0021) public super\n"},{"op":"equal","value":"Class: (#57) LMain;\n"},{"op":"equal","value":"Super: (#2) Ljava/lang/Object;\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff command with two arguments
|
||
TOOL=rz-diff
|
||
FILE=<<EOF
|
||
-0
|
||
pi 20 @ main
|
||
-1
|
||
pi 20 @ sym.main
|
||
bins/elf/hello_world
|
||
bins/elf/hello_world32
|
||
EOF
|
||
ARGS=-t command
|
||
EXPECT=<<EOF
|
||
--- bins/elf/hello_world
|
||
+++ bins/elf/hello_world32
|
||
@@ -1,20 +1,20 @@
|
||
-push rbp
|
||
-mov rbp, rsp
|
||
-sub rsp, 0x20
|
||
-lea rax, qword str.Hello
|
||
-mov qword [rbp-0x18], rax
|
||
-lea rax, qword str.r2_folks
|
||
-mov qword [rbp-0x10], rax
|
||
-mov rax, qword [rbp-0x18]
|
||
-mov rdi, rax
|
||
+lea ecx, dword [esp+0x04]
|
||
+and esp, 0xfffffff0
|
||
+push dword [ecx-0x04]
|
||
+push ebp
|
||
+mov ebp, esp
|
||
+push ebx
|
||
+push ecx
|
||
+sub esp, 0x20
|
||
+call sym.__x86.get_pc_thunk.bx
|
||
+add ebx, 0x19a0
|
||
+lea eax, dword [ebx-0x1874]
|
||
+mov dword [ebp-0x1c], eax
|
||
+lea eax, dword [ebx-0x186e]
|
||
+mov dword [ebp-0x18], eax
|
||
+sub esp, 0x0c
|
||
+push dword [ebp-0x1c]
|
||
call sym.imp.strlen
|
||
-mov dword [rbp-0x20], eax
|
||
-mov rax, qword [rbp-0x10]
|
||
-mov rdi, rax
|
||
-call sym.imp.strlen
|
||
-mov dword [rbp-0x1c], eax
|
||
-mov edx, dword [rbp-0x20]
|
||
-mov eax, dword [rbp-0x1c]
|
||
-add eax, edx
|
||
-add eax, 0x01
|
||
-cdqe
|
||
+add esp, 0x10
|
||
+mov dword [ebp-0x14], eax
|
||
+sub esp, 0x0c
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff command with two arguments JSON
|
||
TOOL=rz-diff
|
||
FILE=<<EOF
|
||
-0
|
||
pi 20 @ main
|
||
-1
|
||
pi 20 @ sym.main
|
||
bins/elf/hello_world
|
||
bins/elf/hello_world32
|
||
EOF
|
||
ARGS=-j -t command
|
||
EXPECT=<<EOF
|
||
{"from":"bins/elf/hello_world","to":"bins/elf/hello_world32","diff":[{"from":[1,20],"to":[1,20],"ops":[{"op":"delete","value":"push rbp\n"},{"op":"delete","value":"mov rbp, rsp\n"},{"op":"delete","value":"sub rsp, 0x20\n"},{"op":"delete","value":"lea rax, qword str.Hello\n"},{"op":"delete","value":"mov qword [rbp-0x18], rax\n"},{"op":"delete","value":"lea rax, qword str.r2_folks\n"},{"op":"delete","value":"mov qword [rbp-0x10], rax\n"},{"op":"delete","value":"mov rax, qword [rbp-0x18]\n"},{"op":"delete","value":"mov rdi, rax\n"},{"op":"insert","value":"lea ecx, dword [esp+0x04]\n"},{"op":"insert","value":"and esp, 0xfffffff0\n"},{"op":"insert","value":"push dword [ecx-0x04]\n"},{"op":"insert","value":"push ebp\n"},{"op":"insert","value":"mov ebp, esp\n"},{"op":"insert","value":"push ebx\n"},{"op":"insert","value":"push ecx\n"},{"op":"insert","value":"sub esp, 0x20\n"},{"op":"insert","value":"call sym.__x86.get_pc_thunk.bx\n"},{"op":"insert","value":"add ebx, 0x19a0\n"},{"op":"insert","value":"lea eax, dword [ebx-0x1874]\n"},{"op":"insert","value":"mov dword [ebp-0x1c], eax\n"},{"op":"insert","value":"lea eax, dword [ebx-0x186e]\n"},{"op":"insert","value":"mov dword [ebp-0x18], eax\n"},{"op":"insert","value":"sub esp, 0x0c\n"},{"op":"insert","value":"push dword [ebp-0x1c]\n"},{"op":"equal","value":"call sym.imp.strlen\n"},{"op":"delete","value":"mov dword [rbp-0x20], eax\n"},{"op":"delete","value":"mov rax, qword [rbp-0x10]\n"},{"op":"delete","value":"mov rdi, rax\n"},{"op":"delete","value":"call sym.imp.strlen\n"},{"op":"delete","value":"mov dword [rbp-0x1c], eax\n"},{"op":"delete","value":"mov edx, dword [rbp-0x20]\n"},{"op":"delete","value":"mov eax, dword [rbp-0x1c]\n"},{"op":"delete","value":"add eax, edx\n"},{"op":"delete","value":"add eax, 0x01\n"},{"op":"delete","value":"cdqe\n"},{"op":"insert","value":"add esp, 0x10\n"},{"op":"insert","value":"mov dword [ebp-0x14], eax\n"},{"op":"insert","value":"sub esp, 0x0c\n"}]}]}
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff text lines comparison
|
||
TOOL=rz-diff
|
||
ARGS=-Ct lines bins/other/rz-diff/incorrect_cmd_i.txt bins/other/rz-diff/correct_cmd_i.txt
|
||
EXPECT=<<EOF
|
||
--- bins/other/rz-diff/incorrect_cmd_i.txt
|
||
+++ bins/other/rz-diff/correct_cmd_i.txt
|
||
@@ -3,40 +3,39 @@
|
||
vaddr name
|
||
---------------
|
||
0x00000000
|
||
+0x00600910 .bss
|
||
0x006006e0 .init_array
|
||
-ax006006e8 .fini_arrar
|
||
-0x006006f0 .jct
|
||
-ax006008c8 .got
|
||
+0x006006e8 .fini_array
|
||
+0x006006f0 .jcr
|
||
+0x006008c8 .got
|
||
0x0040031e .gnu.version
|
||
0x004005b4 .fini
|
||
-0x00600910 .bss
|
||
-000600900 .data
|
||
-004005c0 .rodata
|
||
+0x00600900 .data
|
||
+0x004005c0 .rodata
|
||
0x00400348 .rela.dyn
|
||
-0x004003a8 .ini
|
||
-x00400260 .gnu.hash
|
||
-0x00400200 .interpj
|
||
-10x0040021c .note.ABI-tag
|
||
+0x004003a8 .init
|
||
+0x00400260 .gnu.hash
|
||
+0x00400200 .interp
|
||
+0x0040021c .note.ABI-tag
|
||
0x00400328 .gnu.version_r
|
||
0x00000000 .comment
|
||
0x0040023c .note.gnu.build-id
|
||
0x006008d0 .got.plt
|
||
-0abc4005d0 .eh_frame_hdr
|
||
-004002e0 .dynstr
|
||
-0d004003d0 .plt
|
||
+0x004005d0 .eh_frame_hdr
|
||
+0x004002e0 .dynstr
|
||
+0x004003d0 .plt
|
||
0x00400360 .rela.plt
|
||
0x00400280 .dynsym
|
||
0x00000000 .debug_abbrev
|
||
0x00000000 .debug_ranges
|
||
0x00000000 .debug_str
|
||
-0x00600910 .bss
|
||
0x00000000 .debug_aranges
|
||
0x00400608 .eh_frame
|
||
-0x000000000 .debug_line
|
||
-0x00000000000 .shstrtab
|
||
-000000000 .debug_info
|
||
+0x00000000 .debug_line
|
||
+0x00000000 .shstrtab
|
||
+0x00000000 .debug_info
|
||
0x00400410 .text
|
||
0x006006f8 .dynamic
|
||
-0x00000 .strtab
|
||
-0x0000000 .symtab
|
||
+0x00000000 .strtab
|
||
+0x00000000 .symtab
|
||
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff text lines comparison COLOR
|
||
COLOR=1
|
||
TOOL=rz-diff
|
||
ARGS=-t lines bins/other/rz-diff/incorrect_cmd_i.txt bins/other/rz-diff/correct_cmd_i.txt
|
||
EXPECT=<<EOF
|
||
--- bins/other/rz-diff/incorrect_cmd_i.txt
|
||
+++ bins/other/rz-diff/correct_cmd_i.txt
|
||
[94m@@ -3,40 +3,39 @@[0m
|
||
vaddr name[0m
|
||
---------------[0m
|
||
0x00000000 [0m
|
||
[92m+0x00600910 .bss[0m
|
||
0x006006e0 .init_array[0m
|
||
[91m-ax006006e8 .fini_arrar[0m
|
||
[91m-0x006006f0 .jc[48;5;52mt[49m[0m
|
||
[91m-[48;5;52ma[49mx006008c8 .got[0m
|
||
[92m+0x006006e8 .fini_array[0m
|
||
[92m+0x006006f0 .jc[48;5;22mr[49m[0m
|
||
[92m+[48;5;22m0[49mx006008c8 .got[0m
|
||
0x0040031e .gnu.version[0m
|
||
0x004005b4 .fini[0m
|
||
[91m-0x00600910 .bss[0m
|
||
[91m-000600900 .data[0m
|
||
[91m-004005c0 .rodata[0m
|
||
[92m+0x00600900 .data[0m
|
||
[92m+0x004005c0 .rodata[0m
|
||
0x00400348 .rela.dyn[0m
|
||
[91m-0x004003a8 .ini[48;5;52m[49m[0m
|
||
[91m-[48;5;52m[49mx00400260 .gnu.hash[0m
|
||
[91m-0x00400200 .interp[48;5;52mj[49m[0m
|
||
[91m-[48;5;52m1[49m0x0040021c .note.ABI-tag[0m
|
||
[92m+0x004003a8 .ini[48;5;22mt[49m[0m
|
||
[92m+[48;5;22m0[49mx00400260 .gnu.hash[0m
|
||
[92m+0x00400200 .interp[48;5;22m[49m[0m
|
||
[92m+[48;5;22m[49m0x0040021c .note.ABI-tag[0m
|
||
0x00400328 .gnu.version_r[0m
|
||
0x00000000 .comment[0m
|
||
0x0040023c .note.gnu.build-id[0m
|
||
0x006008d0 .got.plt[0m
|
||
[91m-0[48;5;52mabc[49m4005d0 .eh_frame_hdr[0m
|
||
[91m-0[48;5;52m[49m04002e0 .dynstr[0m
|
||
[91m-0[48;5;52md[49m004003d0 .plt[0m
|
||
[92m+0[48;5;22mx00[49m4005d0 .eh_frame_hdr[0m
|
||
[92m+0[48;5;22mx0[49m04002e0 .dynstr[0m
|
||
[92m+0[48;5;22mx[49m004003d0 .plt[0m
|
||
0x00400360 .rela.plt[0m
|
||
0x00400280 .dynsym[0m
|
||
0x00000000 .debug_abbrev[0m
|
||
0x00000000 .debug_ranges[0m
|
||
0x00000000 .debug_str[0m
|
||
[91m-0x00600910 .bss[0m
|
||
0x00000000 .debug_aranges[0m
|
||
0x00400608 .eh_frame[0m
|
||
[91m-0x00000000[48;5;52m0[49m .debug_line[0m
|
||
[91m-0x00000000[48;5;52m000[49m .shstrtab[0m
|
||
[91m-0[48;5;52m[49m00000000 .debug_info[0m
|
||
[92m+0x00000000[48;5;22m[49m .debug_line[0m
|
||
[92m+0x00000000[48;5;22m[49m .shstrtab[0m
|
||
[92m+0[48;5;22mx[49m00000000 .debug_info[0m
|
||
0x00400410 .text[0m
|
||
0x006006f8 .dynamic[0m
|
||
[91m-0x00000[48;5;52m[49m .strtab[0m
|
||
[91m-0x0000000[48;5;52m[49m .symtab[0m
|
||
[92m+0x00000[48;5;22m000[49m .strtab[0m
|
||
[92m+0x0000000[48;5;22m0[49m .symtab[0m
|
||
[0m
|
||
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff functions comparison
|
||
TOOL=rz-diff
|
||
ARGS=-e scr.utf8=false -e scr.utf8.curvy=false -e analysis.fcnprefix=test -e analysis.limits=true -e analysis.from=0x401460 -e analysis.to=0x4033d0 -t functions bins/other/rz-diff/true bins/other/rz-diff/false
|
||
EXPECT=<<EOF
|
||
.-------------------------------------------------------------------------------------------------.
|
||
| name0 | size0 | addr0 | type | similarity | addr1 | size1 | name1 |
|
||
)-------------------------------------------------------------------------------------------------(
|
||
| test.00401460 | 41 | 0x00401460 | COMPLETE | 1.000000 | 0x00401470 | 41 | test.00401470 |
|
||
| test.00401990 | 137 | 0x00401990 | PARTIAL | 0.985401 | 0x004019a0 | 137 | test.004019a0 |
|
||
| test.00401a20 | 162 | 0x00401a20 | COMPLETE | 1.000000 | 0x00401a30 | 162 | test.00401a30 |
|
||
| test.00401ae0 | 228 | 0x00401ae0 | PARTIAL | 0.964912 | 0x00401af0 | 228 | test.00401af0 |
|
||
| test.00401be0 | 2728 | 0x00401be0 | PARTIAL | 0.991569 | 0x00401bf0 | 2728 | test.00401bf0 |
|
||
| test.00402730 | 425 | 0x00402730 | PARTIAL | 0.971765 | 0x00402740 | 425 | test.00402740 |
|
||
| test.004029a0 | 50 | 0x004029a0 | PARTIAL | 0.980000 | 0x004029b0 | 50 | test.004029b0 |
|
||
| test.00402e20 | 204 | 0x00402e20 | PARTIAL | 0.960784 | 0x00402e30 | 204 | test.00402e30 |
|
||
`-------------------------------------------------------------------------------------------------'
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff functions comparison (colored)
|
||
COLOR=1
|
||
TOOL=rz-diff
|
||
ARGS=-K ayu -e scr.utf8=false -e scr.utf8.curvy=false -e analysis.fcnprefix=test -e analysis.limits=true -e analysis.from=0x401460 -e analysis.to=0x4033d0 -t functions bins/other/rz-diff/true bins/other/rz-diff/false
|
||
EXPECT=<<EOF
|
||
.-------------------------------------------------------------------------------------------------.
|
||
| name0 | size0 | addr0 | type | similarity | addr1 | size1 | name1 |
|
||
)-------------------------------------------------------------------------------------------------(
|
||
| [36mtest.00401460 [0m|[31m 41[0m |[31m 0x00401460[0m | [90mCOMPLETE [0m| [33m1.000000 [0m|[31m 0x00401470[0m |[31m 41[0m | [36mtest.00401470 [0m|
|
||
| [36mtest.00401990 [0m|[31m 137[0m |[31m 0x00401990[0m | [33mPARTIAL [0m| [33m0.985401 [0m|[31m 0x004019a0[0m |[31m 137[0m | [36mtest.004019a0 [0m|
|
||
| [36mtest.00401a20 [0m|[31m 162[0m |[31m 0x00401a20[0m | [90mCOMPLETE [0m| [33m1.000000 [0m|[31m 0x00401a30[0m |[31m 162[0m | [36mtest.00401a30 [0m|
|
||
| [36mtest.00401ae0 [0m|[31m 228[0m |[31m 0x00401ae0[0m | [33mPARTIAL [0m| [33m0.964912 [0m|[31m 0x00401af0[0m |[31m 228[0m | [36mtest.00401af0 [0m|
|
||
| [36mtest.00401be0 [0m|[31m 2728[0m |[31m 0x00401be0[0m | [33mPARTIAL [0m| [33m0.991569 [0m|[31m 0x00401bf0[0m |[31m 2728[0m | [36mtest.00401bf0 [0m|
|
||
| [36mtest.00402730 [0m|[31m 425[0m |[31m 0x00402730[0m | [33mPARTIAL [0m| [33m0.971765 [0m|[31m 0x00402740[0m |[31m 425[0m | [36mtest.00402740 [0m|
|
||
| [36mtest.004029a0 [0m|[31m 50[0m |[31m 0x004029a0[0m | [33mPARTIAL [0m| [33m0.980000 [0m|[31m 0x004029b0[0m |[31m 50[0m | [36mtest.004029b0 [0m|
|
||
| [36mtest.00402e20 [0m|[31m 204[0m |[31m 0x00402e20[0m | [33mPARTIAL [0m| [33m0.960784 [0m|[31m 0x00402e30[0m |[31m 204[0m | [36mtest.00402e30 [0m|
|
||
`-------------------------------------------------------------------------------------------------'
|
||
EOF
|
||
RUN
|
||
|
||
NAME=rz-diff functions comparison against only one function
|
||
TOOL=rz-diff
|
||
ARGS=-e scr.utf8=false -e scr.utf8.curvy=false -e analysis.fcnprefix=test -e analysis.limits=true -e analysis.from=0x401460 -e analysis.to=0x4033d0 -t functions -0 test.00401ae0 bins/other/rz-diff/true bins/other/rz-diff/false
|
||
EXPECT=<<EOF
|
||
.------------------------------------------------------------------------------------------------.
|
||
| name0 | size0 | addr0 | type | similarity | addr1 | size1 | name1 |
|
||
)------------------------------------------------------------------------------------------------(
|
||
| test.00401470 | 41 | 0x00401470 | UNLIKE | 0.0746 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
| test.004019a0 | 137 | 0x004019a0 | UNLIKE | 0.1228 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
| test.00401a30 | 162 | 0x00401a30 | UNLIKE | 0.0746 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
| test.00401af0 | 228 | 0x00401af0 | PARTIAL | 0.964912 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
| test.00401bf0 | 2728 | 0x00401bf0 | UNLIKE | 0.0433 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
| test.00402740 | 425 | 0x00402740 | UNLIKE | 0.1106 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
| test.004029b0 | 50 | 0x004029b0 | UNLIKE | 0.0702 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
| test.00402e30 | 204 | 0x00402e30 | UNLIKE | 0.1140 | 0x00401ae0 | 228 | test.00401ae0 |
|
||
`------------------------------------------------------------------------------------------------'
|
||
EOF
|
||
RUN
|