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_