⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net.c

📁 linux进程跟踪的工具和源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
		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 + -