ettercap-0.7.3-amd64-casting.diff patch has problem because of this: - opt_end = (u_char *)((int)tcp + tcp->off * 4); + opt_end = (u_char *)(tcp + tcp->off * 4);
the variable tcp is struct tcp_header* and the sizeof(struct tcp_header) is 20 bytes.. for example if the tcp is 0x0 and the tcp->off is 5 the result will be 0x0 + sizeof(struct tcp_header) * 5 * 4 which is 0x190 instead of 0x20 a way to correct this problem is to change the datatype int to datatype long which is always the size of registers so the casting will be correct.. i attach a second version of the 64bit-casting patch..
--- ettercap-0.7.3.orig/src/protocols/ec_tcp.c +++ ettercap-0.7.3/src/protocols/ec_tcp.c @@ -116,7 +116,7 @@ tcp = (struct tcp_header *)DECODE_DATA; opt_start = (u_char *)(tcp + 1); - opt_end = (u_char *)((int)tcp + tcp->off * 4); + opt_end = (u_char *)((long)tcp + tcp->off * 4); DECODED_LEN = (u_int32)(tcp->off * 4);