X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ia32rtools.git;a=blobdiff_plain;f=ida%2Fsaveasm%2Fsaveasm.cpp;h=f9224832355911a4b8fcc69baf4b599acfa7dd62;hp=5be0ddab321ace37a785f0be2ea4d7bb799b11ec;hb=a84bddd1182981dada1173feb749131fd55029e9;hpb=8c9999882a8fb2c22322f86f6956871b5ea68fc0 diff --git a/ida/saveasm/saveasm.cpp b/ida/saveasm/saveasm.cpp index 5be0dda..f922483 100644 --- a/ida/saveasm/saveasm.cpp +++ b/ida/saveasm/saveasm.cpp @@ -309,6 +309,18 @@ static void idaapi run(int /*arg*/) } } + // detect tailcalls to next func with 'jmp $+5' (offset 0) + if (f_area.endEA - f_area.startEA >= 5 + && decode_insn(f_area.endEA - 5) && cmd.itype == NN_jmp + && cmd.Operands[0].type == o_near + && cmd.Operands[0].addr == f_area.endEA + && get_name(BADADDR, f_area.endEA, buf, sizeof(buf)) + && get_cmt(f_area.endEA - 5, false, buf2, sizeof(buf2)) <= 0) + { + qsnprintf(buf2, sizeof(buf2), "sctpatch: jmp %s", buf); + set_cmt(f_area.endEA - 5, buf2, false); + } + func = get_next_func(ea); }