NEURON
dlfcn.c File Reference
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "dlfcn.h"

Go to the source code of this file.

Classes

struct  local_object
 

Macros

#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS   0x4
 
#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT   0x2
 
#define _ReturnAddress()   (__builtin_extract_return_addr(__builtin_return_address(0)))
 
#define DLFCN_NOINLINE
 

Typedefs

typedef ULONG ULONG_PTR
 
typedef struct local_object local_object
 

Functions

static local_objectlocal_search (HMODULE hModule)
 
static BOOL local_add (HMODULE hModule)
 
static void local_rem (HMODULE hModule)
 
static void save_err_str (const char *str, DWORD dwMessageId)
 
static void save_err_ptr_str (const void *ptr, DWORD dwMessageId)
 
static UINT MySetErrorMode (UINT uMode)
 
static HMODULE MyGetModuleHandleFromAddress (const void *addr)
 
static BOOL MyEnumProcessModules (HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded)
 
DLFCN_EXPORT void * dlopen (const char *file, int mode)
 
DLFCN_EXPORT int dlclose (void *handle)
 
DLFCN_NOINLINE DLFCN_EXPORT void * dlsym (void *handle, const char *name)
 
DLFCN_EXPORT char * dlerror (void)
 
static BOOL get_image_section (HMODULE module, int index, void **ptr, DWORD *size)
 
static const char * get_export_symbol_name (HMODULE module, IMAGE_EXPORT_DIRECTORY *ied, const void *addr, void **func_address)
 
static BOOL is_valid_address (const void *addr)
 
static BOOL is_import_thunk (const void *addr)
 
static void * get_address_from_import_address_table (void *iat, DWORD iat_size, const void *addr)
 
static BOOL fill_info (const void *addr, Dl_info *info)
 
DLFCN_EXPORT int dladdr (const void *addr, Dl_info *info)
 

Variables

static local_object first_object
 
static char error_buffer [65535]
 
static BOOL error_occurred
 
static char module_filename [2 *MAX_PATH]
 

Macro Definition Documentation

◆ _ReturnAddress

#define _ReturnAddress ( )    (__builtin_extract_return_addr(__builtin_return_address(0)))

Definition at line 60 of file dlfcn.c.

◆ DLFCN_NOINLINE

#define DLFCN_NOINLINE

Definition at line 76 of file dlfcn.c.

◆ GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS

#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS   0x4

Definition at line 48 of file dlfcn.c.

◆ GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT

#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT   0x2

Definition at line 51 of file dlfcn.c.

Typedef Documentation

◆ local_object

typedef struct local_object local_object

◆ ULONG_PTR

typedef ULONG ULONG_PTR

Definition at line 43 of file dlfcn.c.

Function Documentation

◆ dladdr()

DLFCN_EXPORT int dladdr ( const void *  addr,
Dl_info info 
)

Definition at line 731 of file dlfcn.c.

◆ dlclose()

DLFCN_EXPORT int dlclose ( void *  handle)

Definition at line 423 of file dlfcn.c.

◆ dlerror()

DLFCN_EXPORT char* dlerror ( void  )

Definition at line 548 of file dlfcn.c.

◆ dlopen()

DLFCN_EXPORT void* dlopen ( const char *  file,
int  mode 
)

Definition at line 331 of file dlfcn.c.

◆ dlsym()

DLFCN_NOINLINE DLFCN_EXPORT void* dlsym ( void *  handle,
const char *  name 
)

Definition at line 447 of file dlfcn.c.

◆ fill_info()

static BOOL fill_info ( const void *  addr,
Dl_info info 
)
static

Definition at line 697 of file dlfcn.c.

◆ get_address_from_import_address_table()

static void* get_address_from_import_address_table ( void *  iat,
DWORD  iat_size,
const void *  addr 
)
static

Definition at line 667 of file dlfcn.c.

◆ get_export_symbol_name()

static const char* get_export_symbol_name ( HMODULE  module,
IMAGE_EXPORT_DIRECTORY *  ied,
const void *  addr,
void **  func_address 
)
static

Definition at line 602 of file dlfcn.c.

◆ get_image_section()

static BOOL get_image_section ( HMODULE  module,
int  index,
void **  ptr,
DWORD *  size 
)
static

Definition at line 566 of file dlfcn.c.

◆ is_import_thunk()

static BOOL is_import_thunk ( const void *  addr)
static

Definition at line 660 of file dlfcn.c.

◆ is_valid_address()

static BOOL is_valid_address ( const void *  addr)
static

Definition at line 636 of file dlfcn.c.

◆ local_add()

static BOOL local_add ( HMODULE  hModule)
static

Definition at line 106 of file dlfcn.c.

◆ local_rem()

static void local_rem ( HMODULE  hModule)
static

Definition at line 135 of file dlfcn.c.

◆ local_search()

static local_object* local_search ( HMODULE  hModule)
static

Definition at line 93 of file dlfcn.c.

◆ MyEnumProcessModules()

static BOOL MyEnumProcessModules ( HANDLE  hProcess,
HMODULE *  lphModule,
DWORD  cb,
LPDWORD  lpcbNeeded 
)
static

Definition at line 286 of file dlfcn.c.

◆ MyGetModuleHandleFromAddress()

static HMODULE MyGetModuleHandleFromAddress ( const void *  addr)
static

Definition at line 247 of file dlfcn.c.

◆ MySetErrorMode()

static UINT MySetErrorMode ( UINT  uMode)
static

Definition at line 222 of file dlfcn.c.

◆ save_err_ptr_str()

static void save_err_ptr_str ( const void *  ptr,
DWORD  dwMessageId 
)
static

Definition at line 204 of file dlfcn.c.

◆ save_err_str()

static void save_err_str ( const char *  str,
DWORD  dwMessageId 
)
static

Definition at line 162 of file dlfcn.c.

Variable Documentation

◆ error_buffer

char error_buffer[65535]
static

Definition at line 159 of file dlfcn.c.

◆ error_occurred

BOOL error_occurred
static

Definition at line 160 of file dlfcn.c.

◆ first_object

local_object first_object
static

Definition at line 90 of file dlfcn.c.

◆ module_filename

char module_filename[2 *MAX_PATH]
static

Definition at line 695 of file dlfcn.c.