ldr.h revision 43481c598c5a5892f31afd00ca6624d41de6470d
2N/A * IPRT - Loader Internals. 2N/A * Copyright (C) 2006-2007 Oracle Corporation 2N/A * This file is part of VirtualBox Open Source Edition (OSE), as 2N/A * you can redistribute it and/or modify it under the terms of the GNU 2N/A * General Public License (GPL) as published by the Free Software 2N/A * Foundation, in version 2 as it comes in the "COPYING" file of the 2N/A * VirtualBox OSE distribution. VirtualBox OSE is distributed in the 2N/A * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. 2N/A * The contents of this file may alternatively be used under the terms 2N/A * of the Common Development and Distribution License Version 1.0 2N/A * (CDDL) only, as it comes in the "COPYING.CDDL" file of the 2N/A * VirtualBox OSE distribution, in which case the provisions of the 2N/A * CDDL are applicable instead of those of the GPL. 2N/A * You may elect to license modified versions of this file under the 2N/A * terms and conditions of either the GPL or the CDDL or both. /******************************************************************************* * Defined Constants And Macros * *******************************************************************************/ * Define this to get native support. */ * Define this to get 32-bit ELF support. */ * Define this to get 64-bit ELF support. */ * Define this to get 32-bit and 64-bit PE support. */ * Define this to get LX support. */ * Define this to get mach-o support (not implemented yet). */ #
endif /* DOXYGEN_RUNNING */ * This is defined if any of the ELF versions is requested. /* These two may clash with winnt.h. */ /** Little endian uint32_t ELF signature ("\x7fELF"). */ /** Little endian uint32_t PE signature ("PE\0\0"). */ /** Little endian uint16_t LX signature ("LX") */ /** Little endian uint16_t LE signature ("LE") */ /** Little endian uint16_t NE signature ("NE") */ /** Little endian uint16_t MZ signature ("MZ"). */ /******************************************************************************* * Structures and Typedefs * *******************************************************************************/ /** The image can no longer be relocated. */ /** The image was loaded, not opened. */ /** The usual 32-bit hack. */ /** Pointer to a loader item. */ * Loader module operations. /** The name of the executable format. */ * Release any resources attached to the module. * The caller will do RTMemFree on pMod on return. * @returns iprt status code. * @param pMod Pointer to the loader module structure. * @remark Compulsory entry point. * This entrypoint can be omitted if RTLDROPS::pfnGetSymbolEx() is provided. * @returns iprt status code. * @param pMod Pointer to the loader module structure. * @param pszSymbol The symbol name. * @param ppvValue Where to store the symbol value. * Called when we're done with getting bits and relocating them. * This is used to release resources used by the loader to support those actions. * After this call none of the extended loader functions can be called. * @returns iprt status code. * @param pMod Pointer to the loader module structure. * @remark This is an optional entry point. * Enumerates the symbols exported by the module. * @returns iprt status code, which might have been returned by pfnCallback. * @param pMod Pointer to the loader module structure. * @param fFlags Flags indicating what to return and such. * @param pvBits Pointer to the bits returned by RTLDROPS::pfnGetBits(), optional. * @param BaseAddress The image base addressto use when calculating the symbol values. * @param pfnCallback The callback function which each symbol is to be feeded to. * @param pvUser User argument to pass to the enumerator. * @remark This is an optional entry point. /* extended functions: */ * Gets the size of the loaded image (i.e. in memory). * @returns in memory size, in bytes. * @returns ~(size_t)0 if it's not an extended image. * @param pMod Pointer to the loader module structure. * @remark Extended loader feature. * Gets the image bits fixed up for a specified address. * @returns iprt status code. * @param pMod Pointer to the loader module structure. * @param pvBits Where to store the bits. The size of this buffer is equal or * larger to the value returned by pfnGetImageSize(). * @param BaseAddress The base address which the image should be fixed up to. * @param pfnGetImport The callback function to use to resolve imports (aka unresolved externals). * @param pvUser User argument to pass to the callback. * @remark Extended loader feature. * Relocate bits obtained using pfnGetBits to a new address. * @returns iprt status code. * @param pMod Pointer to the loader module structure. * @param pvBits Where to store the bits. The size of this buffer is equal or * larger to the value returned by pfnGetImageSize(). * @param NewBaseAddress The base address which the image should be fixed up to. * @param OldBaseAddress The base address which the image is currently fixed up to. * @param pfnGetImport The callback function to use to resolve imports (aka unresolved externals). * @param pvUser User argument to pass to the callback. * @remark Extended loader feature. * Gets a symbol with special base address and stuff. * This entrypoint can be omitted if RTLDROPS::pfnGetSymbolEx() is provided and the special BaseAddress feature isn't supported. * @returns iprt status code. * @param pMod Pointer to the loader module structure. * @param pvBits Pointer to bits returned by RTLDROPS::pfnGetBits(), optional. * @param BaseAddress The image base address to use when calculating the symbol value. * @param pszSymbol The symbol name. * @param pValue Where to store the symbol value. * @remark Extended loader feature. /** Dummy entry to make sure we've initialized it all. */ /** Pointer to a loader reader instance. */ * Loader image reader instance. * The reader will have extra data members following this structure. /** The name of the image provider. */ * Reads bytes at a give place in the raw image. * @returns iprt status code. * @param pReader Pointer to the reader instance. * @param pvBuf Where to store the bits. * @param cb Number of bytes to read. * @param off Where to start reading relative to the start of the raw image. * Tells end position of last read. * @returns position relative to start of the raw image. * @param pReader Pointer to the reader instance. * Gets the size of the raw image bits. * @returns size of raw image bits in bytes. * @param pReader Pointer to the reader instance. * Map the bits into memory. * The mapping will be freed upon calling pfnDestroy() if not pfnUnmap() * is called before that. The mapping is read only. * @returns iprt status code. * @param pReader Pointer to the reader instance. * @param ppvBits Where to store the address of the memory mapping on success. * The size of the mapping can be obtained by calling pfnSize(). * @returns iprt status code. * @param pReader Pointer to the reader instance. * @param pvBits Memory pointer returned by pfnMap(). * Gets the most appropriate log name. * @returns Pointer to readonly log name. * @param pReader Pointer to the reader instance. * Releases all resources associated with the reader instance. * The instance is invalid after this call returns. * @returns iprt status code. * @param pReader Pointer to the reader instance. /** The loader magic value (RTLDRMOD_MAGIC). */ * Validates that a loader module handle is valid. * @returns true if valid. * @returns false if invalid. * @param hLdrMod The loader module handle. /** The core structure. */ /** The native handle. */ /** @copydoc RTLDROPS::pfnGetSymbol */ /** @copydoc RTLDROPS::pfnClose */ * Load a native module using the native loader. * @returns iprt status code. * @param pszFilename The image filename. * @param phHandle Where to store the module handle on success. * @param fFlags See RTLDRFLAGS_. * @param pErrInfo Where to return extended error information. Optional. /*int rtldrLXOpen(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, RTFOFF offLX, PRTLDRMOD phLdrMod); int rtldrMachoOpen(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, RTFOFF offSomething, PRTLDRMOD phLdrMod);*/