VirtualBox

source: vbox/trunk/src/VBox/Runtime/ldrNative.cpp@ 4076

Last change on this file since 4076 was 4071, checked in by vboxsync, 17 years ago

Biggest check-in ever. New source code headers for all (C) innotek files.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.5 KB
Line 
1/* $Id: ldrNative.cpp 4071 2007-08-07 17:07:59Z vboxsync $ */
2/** @file
3 * innotek Portable Runtime - Binary Image Loader, Native interface.
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18
19/*******************************************************************************
20* Header Files *
21*******************************************************************************/
22#define LOG_GROUP RTLOGGROUP_LDR
23#include <iprt/ldr.h>
24#include <iprt/alloc.h>
25#include <iprt/assert.h>
26#include <iprt/log.h>
27#include <iprt/string.h>
28#include <iprt/err.h>
29#include "internal/ldr.h"
30
31
32/** @copydoc RTLDROPS::pfnEnumSymbols */
33static DECLCALLBACK(int) rtldrNativeEnumSymbols(PRTLDRMODINTERNAL pMod, unsigned fFlags, const void *pvBits, RTUINTPTR BaseAddress,
34 PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
35{
36 return VERR_NOT_SUPPORTED;
37}
38
39
40/** @copydoc RTLDROPS::pfnDone */
41static DECLCALLBACK(int) rtldrNativeDone(PRTLDRMODINTERNAL pMod)
42{
43 return VINF_SUCCESS;
44}
45
46
47/**
48 * Operations for a native module.
49 */
50static const RTLDROPS s_rtldrNativeOps =
51{
52 "native",
53 rtldrNativeClose,
54 rtldrNativeGetSymbol,
55 rtldrNativeDone,
56 rtldrNativeEnumSymbols,
57 /* ext: */
58 NULL,
59 NULL,
60 NULL,
61 NULL,
62 42
63};
64
65
66
67/**
68 * Loads a dynamic load library (/shared object) image file using native
69 * OS facilities.
70 *
71 * The filename will be appended the default DLL/SO extension of
72 * the platform if it have been omitted. This means that it's not
73 * possible to load DLLs/SOs with no extension using this interface,
74 * but that's not a bad tradeoff.
75 *
76 * If no path is specified in the filename, the OS will usually search it's library
77 * path to find the image file.
78 *
79 * @returns iprt status code.
80 * @param pszFilename Image filename.
81 * @param phLdrMod Where to store the handle to the loaded module.
82 */
83RTDECL(int) RTLdrLoad(const char *pszFilename, PRTLDRMOD phLdrMod)
84{
85 LogFlow(("RTLdrLoad: pszFilename=%p:{%s} phLdrMod=%p\n", pszFilename, pszFilename, phLdrMod));
86
87 /*
88 * validate input.
89 */
90 AssertMsgReturn(VALID_PTR(pszFilename), ("pszFilename=%p\n", pszFilename), VERR_INVALID_PARAMETER);
91 AssertMsgReturn(VALID_PTR(phLdrMod), ("phLdrMod=%p\n", phLdrMod), VERR_INVALID_PARAMETER);
92
93 /*
94 * Allocate and initialize module structure.
95 */
96 int rc = VERR_NO_MEMORY;
97 PRTLDRMODNATIVE pMod = (PRTLDRMODNATIVE)RTMemAlloc(sizeof(*pMod));
98 if (pMod)
99 {
100 pMod->Core.u32Magic = RTLDRMOD_MAGIC;
101 pMod->Core.eState = LDR_STATE_LOADED;
102 pMod->Core.pOps = &s_rtldrNativeOps;
103 pMod->hNative = ~(uintptr_t)0;
104
105 /*
106 * Attempt to open the module.
107 */
108 rc = rtldrNativeLoad(pszFilename, &pMod->hNative);
109 if (RT_SUCCESS(rc))
110 {
111 *phLdrMod = &pMod->Core;
112 LogFlow(("RTLdrLoad: returns %Rrc *phLdrMod=%RTldrm\n", rc, *phLdrMod));
113 return rc;
114 }
115 RTMemFree(pMod);
116 }
117 *phLdrMod = NIL_RTLDRMOD;
118 LogFlow(("RTLdrLoad: returns %Rrc\n", rc));
119 return rc;
120}
121
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette