ds@700: /** ds@2863: * vim: set ts=4 sw=4 tw=99 noet : ds@1330: * ============================================================================= dvander@1226: * SourceMod ds@2863: * Copyright (C) 2004-2009 AlliedModders LLC. All rights reserved. ds@1330: * ============================================================================= ds@700: * ds@1330: * This program is free software; you can redistribute it and/or modify it under ds@1330: * the terms of the GNU General Public License, version 3.0, as published by the ds@1330: * Free Software Foundation. ds@700: * ds@1330: * This program is distributed in the hope that it will be useful, but WITHOUT ds@1330: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ds@1330: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more ds@1330: * details. dvander@1226: * ds@1330: * You should have received a copy of the GNU General Public License along with ds@1330: * this program. If not, see . dvander@1226: * ds@1330: * As a special exception, AlliedModders LLC gives you permission to link the ds@1330: * code of this program (as well as its derivative works) to "Half-Life 2," the ds@1330: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software ds@1330: * by the Valve Corporation. You must obey the GNU General Public License in ds@1330: * all respects for all other code used. Additionally, AlliedModders LLC grants ds@1330: * this exception to all derivative works. AlliedModders LLC defines further ds@1330: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), ds@1330: * or . ds@700: */ ds@700: ds@700: #ifndef _INCLUDE_SOURCEMOD_INTERFACE_BINARYUTILS_H_ ds@700: #define _INCLUDE_SOURCEMOD_INTERFACE_BINARYUTILS_H_ ds@700: ds@700: #include ds@700: ds@700: #define SMINTERFACE_MEMORYUTILS_NAME "IMemoryUtils" ds@2863: #define SMINTERFACE_MEMORYUTILS_VERSION 2 ds@700: dvander@1680: /** dvander@1680: * @file IMemoryUtils.h dvander@1680: * @brief Interface for finding patterns in memory. dvander@1680: */ dvander@1680: ds@700: namespace SourceMod ds@700: { ds@700: class IMemoryUtils : public SMInterface ds@700: { ds@700: public: ds@700: const char *GetInterfaceName() ds@700: { ds@700: return SMINTERFACE_MEMORYUTILS_NAME; ds@700: } ds@700: unsigned int GetInterfaceVersion() ds@700: { ds@700: return SMINTERFACE_MEMORYUTILS_VERSION; ds@700: } ds@700: public: ds@700: /** ds@700: * @brief Searches for a pattern of bytes within the memory of a dynamic library. ds@700: * ds@700: * @param libPtr Pointer to any chunk of memory that resides in the dynamic library. ds@700: * @param pattern Pattern of bytes to search for. 0x2A can be used as a wildcard. ds@700: * @param len Size of the pattern in bytes. ds@700: * @return Pointer to pattern found in memory, NULL if not found. ds@700: */ ds@701: virtual void *FindPattern(const void *libPtr, const char *pattern, size_t len) =0; ds@2863: ds@2863: /** ds@2863: * @brief Retrieves a symbol pointer from a dynamic library. ds@2863: * ds@2992: * Note: On Linux and Mac OS X, this function is able to resolve symbols that are hidden ds@2992: * via GCC's -fvisibility=hidden option. ds@2992: * ds@2992: * Note: On Mac OS X, the symbol name should be passed without the prepended underscore, ds@2992: * as this is how dlsym() would expect it. ds@2863: * ds@2863: * @param handle Operating system specific handle that points to dynamic library. ds@2992: * This comes from dlopen() on Linux/OS X or LoadLibrary() on Windows. ds@2863: * @param symbol Symbol name. ds@2863: * @return Symbol pointer, or NULL if not found. ds@2863: */ ds@2863: virtual void *ResolveSymbol(void *handle, const char *symbol) =0; ds@700: }; ds@700: } ds@700: ds@700: #endif // _INCLUDE_SOURCEMOD_INTERFACE_MEMORYUTILS_H_