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

📄 interposition.h

📁 sock protocol ,it is useful!
💻 H
字号:
/* * Copyright (c) 1997, 1998, 1999 *      Inferno Nettverk A/S, Norway.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. The above copyright notice, this list of conditions and the following *    disclaimer must appear in all copies of the software, derivative works *    or modified versions, and any portions thereof, aswell as in all *    supporting documentation. * 2. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *      This product includes software developed by *      Inferno Nettverk A/S, Norway. * 3. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Inferno Nettverk A/S requests users of this software to return to * *  Software Distribution Coordinator  or  sdc@inet.no *  Inferno Nettverk A/S *  Oslo Research Park *  Gaustadal閑n 21 *  N-0371 Oslo *  Norway * * any improvements or extensions that they make and grant Inferno Nettverk A/S * the rights to redistribute these changes. * *//* $Id: interposition.h,v 1.23 1999/12/22 09:29:15 karls Exp $ */#ifdef HAVE_CONFIG_H#include "autoconf.h"#endif  /* HAVE_CONFIG_H */#ifndef LIBRARY_PATH#define LIBRARY_PATH ""#endif#if HAVE_NO_SYMBOL_UNDERSCORE#define SYMBOL_ACCEPT "accept"#define SYMBOL_BIND "bind"#define SYMBOL_BINDRESVPORT "bindresvport"#define SYMBOL_CONNECT "connect"#define SYMBOL_GETHOSTBYNAME "gethostbyname"#define SYMBOL_GETHOSTBYNAME2 "gethostbyname2"#define SYMBOL_GETPEERNAME "getpeername"#define SYMBOL_GETSOCKNAME "getsockname"#define SYMBOL_RRESVPORT "rresvport"#define SYMBOL_RECVFROM "recvfrom"#define SYMBOL_SENDTO "sendto"#define SYMBOL_READV "readv"#define SYMBOL_WRITEV "writev"#define SYMBOL_SEND "send"#define SYMBOL_RECV "recv"#define SYMBOL_RECVMSG "recvmsg"#define SYMBOL_SENDMSG "sendmsg"#define SYMBOL_WRITE "write"#define SYMBOL_READ "read"#endif /* HAVE_NO_SYMBOL_UNDERSCORE *//* XXX */#ifndef LIBRARY_LIBC#define LIBRARY_LIBC								__CONCAT(LIBRARY_PATH, "libc.so")#endif#ifndef SYMBOL_ACCEPT#define SYMBOL_ACCEPT							"_accept"#endif#ifndef LIBRARY_ACCEPT#define LIBRARY_ACCEPT							LIBRARY_LIBC#endif#ifndef SYMBOL_BIND#define SYMBOL_BIND								"_bind"#endif#ifndef LIBRARY_BIND#define LIBRARY_BIND								LIBRARY_LIBC#endif#ifndef SYMBOL_CONNECT#define SYMBOL_CONNECT							"_connect"#endif#ifndef LIBRARY_CONNECT#define LIBRARY_CONNECT							LIBRARY_LIBC#endif#ifndef SYMBOL_BINDRESVPORT#define SYMBOL_BINDRESVPORT					"_bindresvport"#endif#ifndef LIBRARY_BINDRESVPORT#define LIBRARY_BINDRESVPORT					LIBRARY_LIBC#endif#ifndef SYMBOL_GETHOSTBYNAME#define SYMBOL_GETHOSTBYNAME					"_gethostbyname"#endif#ifndef LIBRARY_GETHOSTBYNAME#define LIBRARY_GETHOSTBYNAME					LIBRARY_LIBC#endif#ifndef SYMBOL_GETHOSTBYNAME2#define SYMBOL_GETHOSTBYNAME2					"_gethostbyname2"#endif#ifndef LIBRARY_GETHOSTBYNAME2#define LIBRARY_GETHOSTBYNAME2				LIBRARY_LIBC#endif#ifndef SYMBOL_GETPEERNAME#define SYMBOL_GETPEERNAME						"_getpeername"#endif#ifndef LIBRARY_GETPEERNAME#define LIBRARY_GETPEERNAME					LIBRARY_LIBC#endif#ifndef SYMBOL_GETSOCKNAME#define SYMBOL_GETSOCKNAME						"_getsockname"#endif#ifndef LIBRARY_GETSOCKNAME#define LIBRARY_GETSOCKNAME					LIBRARY_LIBC#endif#ifndef SYMBOL_READ#define SYMBOL_READ								"_read"#endif#ifndef LIBRARY_READ#define LIBRARY_READ								LIBRARY_LIBC#endif#ifndef SYMBOL_READV#define SYMBOL_READV								"_readv"#endif#ifndef LIBRARY_READV#define LIBRARY_READV							LIBRARY_LIBC#endif#ifndef SYMBOL_RECV#define SYMBOL_RECV								"_recv"#endif#ifndef LIBRARY_RECV#define LIBRARY_RECV								LIBRARY_LIBC#endif#ifndef SYMBOL_RECVMSG#define SYMBOL_RECVMSG							"_recvmsg"#endif#ifndef LIBRARY_RECVMSG#define LIBRARY_RECVMSG							LIBRARY_LIBC#endif#ifndef SYMBOL_RECVFROM#define SYMBOL_RECVFROM							"_recvfrom"#endif#ifndef LIBRARY_RECVFROM#define LIBRARY_RECVFROM						LIBRARY_LIBC#endif#ifndef SYMBOL_RRESVPORT#define SYMBOL_RRESVPORT						"_rresvport"#endif#ifndef LIBRARY_RRESVPORT#define LIBRARY_RRESVPORT						LIBRARY_LIBC#endif#ifndef SYMBOL_SEND#define SYMBOL_SEND								"_send"#endif#ifndef LIBRARY_SEND#define LIBRARY_SEND								LIBRARY_LIBC#endif#ifndef SYMBOL_SENDMSG#define SYMBOL_SENDMSG							"_sendmsg"#endif#ifndef LIBRARY_SENDMSG#define LIBRARY_SENDMSG							LIBRARY_LIBC#endif#ifndef SYMBOL_SENDTO#define SYMBOL_SENDTO							"_sendto"#endif#ifndef LIBRARY_SENDTO#define LIBRARY_SENDTO							LIBRARY_LIBC#endif#ifndef SYMBOL_WRITE#define SYMBOL_WRITE								"_write"#endif#ifndef LIBRARY_WRITE#define LIBRARY_WRITE							LIBRARY_LIBC#endif#ifndef SYMBOL_WRITEV#define SYMBOL_WRITEV							"_writev"#endif#ifndef LIBRARY_WRITEV#define LIBRARY_WRITEV							LIBRARY_LIBC#endif/* only used on osf */#if HAVE_EXTRA_OSF_SYMBOLS#ifndef SYMBOL_EACCEPT#define SYMBOL_EACCEPT							"_Eaccept"#endif#ifndef LIBRARY_EACCEPT#define LIBRARY_EACCEPT							LIBRARY_LIBC#endif#ifndef SYMBOL_EGETPEERNAME#define SYMBOL_EGETPEERNAME					"_Egetpeername"#endif#ifndef LIBRARY_EGETPEERNAME#define LIBRARY_EGETPEERNAME					LIBRARY_LIBC#endif#ifndef SYMBOL_EGETSOCKNAME#define SYMBOL_EGETSOCKNAME					"_Egetsockname"#endif#ifndef LIBRARY_EGETSOCKNAME#define LIBRARY_EGETSOCKNAME					LIBRARY_LIBC#endif#ifndef SYMBOL_EREADV#define SYMBOL_EREADV							"_Ereadv"#endif#ifndef LIBRARY_EREADV#define LIBRARY_EREADV							LIBRARY_LIBC#endif#ifndef SYMBOL_ERECVFROM#define SYMBOL_ERECVFROM						"_Erecvfrom"#endif#ifndef LIBRARY_ERECVFROM#define LIBRARY_ERECVFROM						LIBRARY_LIBC#endif#ifndef SYMBOL_ERECVMSG#define SYMBOL_ERECVMSG							"_Erecvmsg"#endif#ifndef LIBRARY_ERECVMSG#define LIBRARY_ERECVMSG						LIBRARY_LIBC#endif#ifndef SYMBOL_ESENDMSG#define SYMBOL_ESENDMSG							"_Esendmsg"#endif#ifndef LIBRARY_ESENDMSG#define LIBRARY_ESENDMSG						LIBRARY_LIBC#endif#ifndef SYMBOL_EWRITEV#define SYMBOL_EWRITEV							"_Ewritev"#endif#ifndef LIBRARY_EWRITEV#define LIBRARY_EWRITEV							LIBRARY_LIBC#endif/* more osf functions */#ifndef SYMBOL_NACCEPT#define SYMBOL_NACCEPT							"naccept"#endif#ifndef LIBRARY_NACCEPT#define LIBRARY_NACCEPT							LIBRARY_LIBC#endif#ifndef SYMBOL_NGETPEERNAME#define SYMBOL_NGETPEERNAME					"ngetpeername"#endif#ifndef LIBRARY_NGETPEERNAME#define LIBRARY_NGETPEERNAME					LIBRARY_LIBC#endif#ifndef SYMBOL_NGETSOCKNAME#define SYMBOL_NGETSOCKNAME					"ngetsockname"#endif#ifndef LIBRARY_NGETSOCKNAME#define LIBRARY_NGETSOCKNAME					LIBRARY_LIBC#endif#ifndef SYMBOL_NRECVFROM#define SYMBOL_NRECVFROM						"nrecvfrom"#endif#ifndef LIBRARY_NRECVFROM#define LIBRARY_NRECVFROM						LIBRARY_LIBC#endif#ifndef SYMBOL_NRECVMSG#define SYMBOL_NRECVMSG							"nrecvmsg"#endif#ifndef LIBRARY_NRECVMSG#define LIBRARY_NRECVMSG						LIBRARY_LIBC#endif#ifndef SYMBOL_NSENDMSG#define SYMBOL_NSENDMSG							"nsendmsg"#endif#ifndef LIBRARY_NSENDMSG#define LIBRARY_NSENDMSG						LIBRARY_LIBC#endif#endif  /* HAVE_EXTRA_OSF_SYMBOLS */#ifdef lintextern const int lintnoloop_interposition_h;#else#define lintnoloop_interposition_h 0#endifstruct libsymbol_t {	char *symbol;			/* the symbol.						*/	char *library;			/* library symbol is in.		*/	void *handle;			/* our handle to the library.	*/	void *function;		/* the bound symbol.				*/};#if DIAGNOSTIC#define SIGBLOCK() \sigset_t oldmask;																	\do {																					\	sigset_t newmask;																\																						\	sigemptyset(&newmask);														\	sigaddset(&newmask, SIGALRM);												\	if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) != 0)				\		swarn("SYSCALL_START(): sigprocmask()");							\} while (0)#else /* */#define SIGBLOCK() do { } while (lintnoloop_interposition_h)#endif																				\#if DIAGNOSTIC#define SIGUNBLOCK() \do { \	if (socksfd->state.system == 0)											\		cc_socksfdv(-1);															\																						\	if (sigprocmask(SIG_SETMASK, &oldmask, NULL) != 0)					\		swarn("SYSCALL_END(): sigprocmask()");								\} while (lintnoloop_interposition_h)#else#define SIGUNBLOCK() do { } while (lintnoloop_interposition_h)#endif#define SYSCALL_START(s) \int socksfd_added = 0;															\SIGBLOCK();																			\do {																					\	struct socksfd_t socksfdmem, *socksfd;									\																						\	if ((socksfd = socks_getaddr((unsigned int)s)) == NULL) {		\		bzero(&socksfdmem, sizeof(socksfdmem));							\		socksfdmem.state.command  = -1;										\		socksfd = socks_addaddr((unsigned int)s, &socksfdmem);		\		socksfd_added = 1;														\	}																					\																						\	SASSERTX(socksfd->state.system >= 0);									\	++socksfd->state.system;													\} while (lintnoloop_interposition_h)#define SYSCALL_END(s) \do {																					\	struct socksfd_t *socksfd = socks_getaddr((unsigned int)s);		\																						\	SASSERTX(socksfd != NULL);													\																						\	SASSERTX(socksfd->state.system > 0);									\	--socksfd->state.system;													\	SIGUNBLOCK();																	\																						\	if (socksfd_added) {															\		SASSERTX(socksfd->state.system == 0);								\		socks_rmaddr((unsigned int)s);										\	}																					\} while (lintnoloop_interposition_h)#define ISSYSCALL(s)	\	(socks_getaddr((unsigned int)(s)) != NULL			\ && socks_getaddr((unsigned int)(s))->state.system)__BEGIN_DECLSvoid *symbolfunction __P((char *symbol));/* * Returns the address binding of the symbol "symbol" and updates * libsymbol_t structure "symbol" is defined in if necessary. * Exits on failure. */__END_DECLS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -