📄 net.c
字号:
printstr(tcp, tcp->u_arg[1], tcp->u_rval); /* len */ tprintf(", %lu, ", tcp->u_arg[2]); /* flags */ if (printflags(msg_flags, tcp->u_arg[3]) == 0) tprintf("0"); /* from address, len */ if (!tcp->u_arg[4] || !tcp->u_arg[5]) { if (tcp->u_arg[4] == 0) tprintf(", NULL"); else tprintf(", %#lx", tcp->u_arg[4]); if (tcp->u_arg[5] == 0) tprintf(", NULL"); else tprintf(", %#lx", tcp->u_arg[5]); return 0; } if (umove(tcp, tcp->u_arg[5], &fromlen) < 0) { tprintf(", {...}, [?]"); return 0; } tprintf(", "); printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]); /* from length */ tprintf(", [%u]", fromlen); } return 0;}#ifdef HAVE_SENDMSGintsys_recvmsg(tcp)struct tcb *tcp;{ if (entering(tcp)) { tprintf("%ld, ", tcp->u_arg[0]); } else { if (syserror(tcp) || !verbose(tcp)) tprintf("%#lx", tcp->u_arg[1]); else printmsghdr(tcp, tcp->u_arg[1]); /* flags */ tprintf(", "); if (printflags(msg_flags, tcp->u_arg[2]) == 0) tprintf("0"); } return 0;}#endif /* HAVE_SENDMSG */intsys_shutdown(tcp)struct tcb *tcp;{ if (entering(tcp)) { tprintf("%ld, %ld", tcp->u_arg[0], tcp->u_arg[1]); switch (tcp->u_arg[1]) { case 0: tprintf("%s", " /* receive */"); break; case 1: tprintf("%s", " /* send */"); break; case 2: tprintf("%s", " /* send and receive */"); break; } } return 0;}intsys_getsockname(tcp)struct tcb *tcp;{ return sys_accept(tcp);}intsys_getpeername(tcp)struct tcb *tcp;{ return sys_accept(tcp);}intsys_pipe(tcp)struct tcb *tcp;{#if defined(LINUX) && !defined(SPARC) int fds[2]; if (exiting(tcp)) { if (syserror(tcp)) { tprintf("%#lx", tcp->u_arg[0]); return 0; } if (umoven(tcp, tcp->u_arg[0], sizeof fds, (char *) fds) < 0) tprintf("[...]"); else tprintf("[%u, %u]", fds[0], fds[1]); }#elif defined(SPARC) || defined(SVR4) || defined(FREEBSD) if (exiting(tcp)) tprintf("[%lu, %lu]", tcp->u_rval, getrval2(tcp));#endif return 0;}intsys_socketpair(tcp)struct tcb *tcp;{#ifdef LINUX int fds[2];#endif if (entering(tcp)) { printxval(domains, tcp->u_arg[0], "PF_???"); tprintf(", "); printxval(socktypes, tcp->u_arg[1], "SOCK_???"); tprintf(", "); switch (tcp->u_arg[0]) { case PF_INET: printxval(protocols, tcp->u_arg[2], "IPPROTO_???"); break;#ifdef PF_IPX case PF_IPX: /* BTW: I don't believe this.. */ tprintf("["); printxval(domains, tcp->u_arg[2], "PF_???"); tprintf("]"); break;#endif /* PF_IPX */ default: tprintf("%lu", tcp->u_arg[2]); break; } } else { if (syserror(tcp)) { tprintf(", %#lx", tcp->u_arg[3]); return 0; }#ifdef LINUX if (umoven(tcp, tcp->u_arg[3], sizeof fds, (char *) fds) < 0) tprintf(", [...]"); else tprintf(", [%u, %u]", fds[0], fds[1]);#endif /* LINUX */#if defined(SUNOS4) || defined(SVR4) || defined(FREEBSD) tprintf(", [%lu, %lu]", tcp->u_rval, getrval2(tcp));#endif /* SUNOS4 || SVR4 || FREEBSD */ } return 0;}intsys_getsockopt(tcp)struct tcb *tcp;{ if (entering(tcp)) { tprintf("%ld, ", tcp->u_arg[0]); switch (tcp->u_arg[1]) { case SOL_SOCKET: tprintf("SOL_SOCKET, "); printxval(sockoptions, tcp->u_arg[2], "SO_???"); tprintf(", "); break;#ifdef SOL_IP case SOL_IP: tprintf("SOL_IP, "); printxval(sockipoptions, tcp->u_arg[2], "IP_???"); tprintf(", "); break;#endif#ifdef SOL_IPX case SOL_IPX: tprintf("SOL_IPX, "); printxval(sockipxoptions, tcp->u_arg[2], "IPX_???"); tprintf(", "); break;#endif#ifdef SOL_PACKET case SOL_PACKET: tprintf("SOL_PACKET, "); printxval(sockpacketoptions, tcp->u_arg[2], "PACKET_???"); tprintf(", "); break;#endif#ifdef SOL_TCP case SOL_TCP: tprintf("SOL_TCP, "); printxval(socktcpoptions, tcp->u_arg[2], "TCP_???"); tprintf(", "); break;#endif /* SOL_AX25 SOL_ROSE SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25 * etc. still need work */ default: /* XXX - should know socket family here */ printxval(socketlayers, tcp->u_arg[1], "SOL_???"); tprintf(", %lu, ", tcp->u_arg[2]); break; } } else { if (syserror(tcp)) { tprintf("%#lx, %#lx", tcp->u_arg[3], tcp->u_arg[4]); return 0; } printnum(tcp, tcp->u_arg[3], "%ld"); tprintf(", "); printnum(tcp, tcp->u_arg[4], "%ld"); } return 0;}#if defined(ICMP_FILTER)static void printicmpfilter(tcp, addr)struct tcb *tcp;long addr;{ struct icmp_filter filter; if (!addr) { tprintf("NULL"); return; } if (syserror(tcp) || !verbose(tcp)) { tprintf("%#lx", addr); return; } if (umove(tcp, addr, &filter) < 0) { tprintf("{...}"); return; } tprintf("~("); if (printflags(icmpfilterflags, ~filter.data) == 0) tprintf("0"); tprintf(")");}#endif /* ICMP_FILTER */intsys_setsockopt(tcp)struct tcb *tcp;{ if (entering(tcp)) { tprintf("%ld, ", tcp->u_arg[0]); switch (tcp->u_arg[1]) { case SOL_SOCKET: tprintf("SOL_SOCKET, "); printxval(sockoptions, tcp->u_arg[2], "SO_???"); tprintf(", "); printnum(tcp, tcp->u_arg[3], "%ld"); tprintf(", %lu", tcp->u_arg[4]); break;#ifdef SOL_IP case SOL_IP: tprintf("SOL_IP, "); printxval(sockipoptions, tcp->u_arg[2], "IP_???"); tprintf(", "); printnum(tcp, tcp->u_arg[3], "%ld"); tprintf(", %lu", tcp->u_arg[4]); break;#endif#ifdef SOL_IPX case SOL_IPX: tprintf("SOL_IPX, "); printxval(sockipxoptions, tcp->u_arg[2], "IPX_???"); tprintf(", "); printnum(tcp, tcp->u_arg[3], "%ld"); tprintf(", %lu", tcp->u_arg[4]); break;#endif#ifdef SOL_PACKET case SOL_PACKET: tprintf("SOL_PACKET, "); printxval(sockpacketoptions, tcp->u_arg[2], "PACKET_???"); tprintf(", "); /* TODO: decode packate_mreq for PACKET_*_MEMBERSHIP */ printnum(tcp, tcp->u_arg[3], "%ld"); tprintf(", %lu", tcp->u_arg[4]); break;#endif#ifdef SOL_TCP case SOL_TCP: tprintf("SOL_TCP, "); printxval(socktcpoptions, tcp->u_arg[2], "TCP_???"); tprintf(", "); printnum(tcp, tcp->u_arg[3], "%ld"); tprintf(", %lu", tcp->u_arg[4]); break;#endif#ifdef SOL_RAW case SOL_RAW: tprintf("SOL_RAW, "); printxval(sockrawoptions, tcp->u_arg[2], "RAW_???"); tprintf(", "); switch (tcp->u_arg[2]) {#if defined(ICMP_FILTER) case ICMP_FILTER: printicmpfilter(tcp, tcp->u_arg[3]); break;#endif default: printnum(tcp, tcp->u_arg[3], "%ld"); break; } tprintf(", %lu", tcp->u_arg[4]); break;#endif /* SOL_AX25 SOL_ATALK SOL_NETROM SOL_UDP SOL_DECNET SOL_X25 * etc. still need work */ default: /* XXX - should know socket family here */ printxval(socketlayers, tcp->u_arg[1], "IPPROTO_???"); tprintf(", %lu, ", tcp->u_arg[2]); printnum(tcp, tcp->u_arg[3], "%ld"); tprintf(", %lu", tcp->u_arg[4]); break; } } return 0;}#if UNIXWARE >= 7static struct xlat sock_version[] = { { __NETLIB_UW211_SVR4, "UW211_SVR4" }, { __NETLIB_UW211_XPG4, "UW211_XPG4" }, { __NETLIB_GEMINI_SVR4, "GEMINI_SVR4" }, { __NETLIB_GEMINI_XPG4, "GEMINI_XPG4" }, { __NETLIB_FP1_SVR4, "FP1_SVR4" }, { __NETLIB_FP1_XPG4, "FP1_XPG4" }, { 0, NULL },};intnetlib_call(tcp, func)struct tcb *tcp;int (*func) ();{ if (entering(tcp)) { int i; printxval (sock_version, tcp->u_arg[0], "__NETLIB_???"); tprintf(", "); --tcp->u_nargs; for (i = 0; i < tcp->u_nargs; i++) tcp->u_arg[i] = tcp->u_arg[i + 1]; return func (tcp); } return func (tcp);}intsys_xsocket(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_socket);}intsys_xsocketpair(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_socketpair);}intsys_xbind(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_bind);}intsys_xconnect(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_connect);}intsys_xlisten(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_listen);}intsys_xaccept(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_accept);}intsys_xsendmsg(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_sendmsg);}intsys_xrecvmsg(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_recvmsg);}intsys_xgetsockaddr(tcp)struct tcb *tcp;{ if (entering(tcp)) { printxval (sock_version, tcp->u_arg[0], "__NETLIB_???"); tprintf(", "); if (tcp->u_arg[1] == 0) { tprintf ("LOCALNAME, "); } else if (tcp->u_arg[1] == 1) { tprintf ("REMOTENAME, "); } else { tprintf ("%ld, ", tcp->u_arg [1]); } tprintf ("%ld, ", tcp->u_arg [2]); } else { if (tcp->u_arg[3] == 0 || syserror(tcp)) { tprintf("%#lx", tcp->u_arg[3]); } else { printsock(tcp, tcp->u_arg[3], tcp->u_arg[4]); } tprintf(", "); printnum(tcp, tcp->u_arg[4], "%lu"); } return 0;}#if 0intsys_xsetsockaddr(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_setsockaddr);}#endifintsys_xgetsockopt(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_getsockopt);}intsys_xsetsockopt(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_setsockopt);}intsys_xshutdown(tcp)struct tcb *tcp;{ return netlib_call (tcp, sys_shutdown);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -