aboutsummaryrefslogtreecommitdiff
path: root/test.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2025-04-28Replace CRT's strlen() and memcpy() by open coded variantsPali Rohár1-9/+8
After this change there is no usage of of CRT library function. This allows to build CRT-neutral variant of libdl.dll library, which can be used in any application.
2025-04-28Replace CRT's malloc() and free() by WinAPI's LocalAlloc() and LocalFree() ↵Pali Rohár1-6/+23
in release mode In debug mode is still used malloc() and free() for as part of memory leak testing done by _CRTDBG_MAP_ALLOC and _CrtDumpMemoryLeaks() in test.c. This change allows to wrap CRT's malloc() via dlsym's RTLD_NEXT. See #112
2025-04-28Fix includesPali Rohár1-3/+3
* Remove unused include stdio.h * Add used include string.h * Add reason comments for includes
2025-04-28Do not cast between function pointer and data pointer when not requiredPali Rohár1-4/+4
This is undefined in C and also C++. Both gcc and msvc allows to cast between two incompatible function pointers without triggering warnings transitionally via void(*)(void) function pointer. Replace transitional LPVOID cast by void(*)(void) cast.
2025-04-28Fix compile warning: comparison of integer expressions of different ↵Pali Rohár1-1/+1
signedness: ‘int’ and ‘DWORD’ {aka ‘long unsigned int’}
2025-04-28Fix compile warning C4244: '=' : conversion from 'int' to 'char', possible ↵Pali Rohár1-1/+1
loss of data
2025-04-28Fix test compile error C2065: 'errno' : undeclared identifierPali Rohár1-0/+1
For errno usage it is required to include C header file errno.h and do not depend that some other header file will include it.
2025-04-28Fix C++ compile error C2065: '_ReturnAddress' : undeclared identifierPali Rohár1-1/+6
It follows compile warning C4164: '_ReturnAddress' : intrinsic function not declared Declaration can be included also via intrin.h header file.
2025-04-28Fix C++ compile error C2065: '_alloca' : undeclared identifierPali Rohár1-0/+4
When compiling in C++ mode, it is required to have C declaration for _alloca. Declaration can be included also via malloc.h header file.
2025-04-28Fix gcc compile errors in C++ modePali Rohár1-2/+2
Add missing casts which are required in C++.
2025-04-28Fix is_valid_address() functionPali Rohár1-1/+1
Returned structure is valid only if the function return value is same as the size of the structure. So check for the correct size, not just for the non-zero size. "AllocationProtect" member contains the initial protection, valid at the time when VirtualAlloc() was called. "Protect" member contains the current protection of the requested address, valid at the time when VirtualQuery() was called. So is_valid_address() function has to check "Protect" member, not the "AllocationProtect". If "State" member is MEM_FREE or MEM_RESERVE then "Protect" member is undefined. So check "State" member before "Protect" member.
2025-04-28Consistently always use GetModuleHandleA() to reduce number of importsPali Rohár1-5/+5
2025-04-28Store kernel32.dll handle into kernel32 variablePali Rohár1-4/+5
2025-04-28Add proper guards for platform codePali Rohár2-4/+13
Do not expect that non-ARM code is automatically X86 code as it does not have to be. Returns failure (not thunk) in other case. Make sure that windows test code is not called on non-windows platforms. Test code tests/test-dladdr.c is written to be validated on any platforms, including non-windows.
2025-04-28Style fixesPali Rohár1-16/+16
2025-04-28Fix dlclose() for dlopen(NULL, ...)Pali Rohár1-0/+4
dlopen(NULL, ...) does not call LoadLibrary(), so do not call FreeLibrary() in dlclose() for this case.
2025-03-04Bump policy_max in cmake_minimum_required to 3.10traversaro-patch-2Silvio Traversaro1-1/+1
2023-07-03Add missing check that section index in get_image_section() is validPali Rohár1-1/+1
Number is stored in NumberOfRvaAndSizes and it may be less than IMAGE_NUMBEROF_DIRECTORY_ENTRIES.
2023-05-25Add some contributorstraversaro-patch-1Silvio Traversaro1-1/+2
2023-05-25Cleanup README and add CODEOWNERS fileSilvio Traversaro2-12/+21
2023-05-21Fix compilation with the first NT SDKPali Rohár1-0/+13
First NT SDK available in the first 32-bit MSVC NT compiler does not provide some defines. Add them for compatibility.
2023-05-21Fix compilation with old MSVC compilerPali Rohár1-0/+12
Old pre-4.0 MSVC does not support _ReturnAddress() intrinsic. Provide for it simple implementation via inline assembly.
2023-05-21Fix compilation with older SDKPali Rohár1-7/+7
Do not use SIZE_T which is not defined in older SDK. There is only size_t type, so use it instead. Do not use IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR which is not defined in older SDK. Use IMAGE_NUMBEROF_DIRECTORY_ENTRIES macro for checking if directory index is valid. In all SDKs is DataDirectory[] array size defined from IMAGE_NUMBEROF_DIRECTORY_ENTRIES macro. Cast members in IMAGE_EXPORT_DIRECTORY and IMAGE_DIRECTORY_ENTRY_IMPORT to DWORD as in older SDK they are defined as PDWORD and compiler throws error 'cannot add two pointers'.
2022-12-27Add Windows ARM64 supportGH Cao2-2/+71
2022-12-01Fix CMake include directive when using wrappers like meson.Angelo Haller1-1/+4
2022-03-11Replace magic numbers by sdk macros in get_image_section()Pali Rohár1-2/+8
2021-12-21Prefer usage of thread-safe function SetThreadErrorMode() instead of ↵Pali Rohár1-4/+33
process-global function SetErrorMode() Use GetProcAddress() wrapper as SetThreadErrorMode() is not available on older Windows versions.
2021-12-21Try to avoid compile warning: cast between incompatible function types from ↵Pali Rohár1-3/+3
‘FARPROC’ warning: cast between incompatible function types from ‘FARPROC’ {aka ‘long long int (*)()’} to ‘BOOL (*)(DWORD, const CHAR *, struct HINSTANCE__ **)’ {aka ‘int (*)(long unsigned int, const char *, struct HINSTANCE__ **)’} [-Wcast-function-type]
2021-04-27CMake: Bumpr versionxantares1-1/+1
Silents warnings, cmake 3.2 is available in distros since many years
2021-04-27cmake: use CROSSCOMPILING_EMULATORMichel Zou4-25/+9
2021-04-09dladdr: const void *addrMichel Zou2-10/+10
on unix the addr argument seems to be const fix that for consistency
2021-02-03Fix noinline for older compiler versions (e.g. Visual Studio 6.0)Pali Rohár1-1/+11
Visual Studio 6.0 does not support __declspec(noinline) and throw error. Add checks for compilers which support noinline to prevent compile errors.
2021-02-03Define ULONG_PTR for older SDKPali Rohár1-0/+5
If compiling with _WIN32_WINNT target prior 0x0500 then SDK does not define ULONG_PTR type. Such systems are only 32bit so define it explicitly to 32bit type ULONG.
2021-02-03Fix MSVC 14.00 compile warning: warning C4244: '=' : conversion from ↵Pali Rohár1-1/+1
'ULONG_PTR' to 'char', possible loss of data
2021-02-03Add helper function MyGetModuleHandleFromAddress()Pali Rohár1-7/+57
This function implements calling GetModuleHandleExA() with correct flags to retrieve hModule from passed address. To allow compilation also with older compilers and environments (like WDK) with any _WIN32_WINNT value, retrieve pointer to this function via GetProcAddress(). And as a fallback implementation use old code via VirtualQuery() which was there prior commit 8ec5ffef2eca.
2021-02-03Fix helper function MyEnumProcessModules()Pali Rohár1-7/+32
Call SetErrorMode(SEM_FAILCRITICALERRORS) prior opening Psapi.dll library to avoid GUI error messages. Close Psapi.dll library via FreeLibrary() if symbol was not retrieved to prevent possible memory leaks. Try to get K32EnumProcessModules symbol from Kernel32.dll library as it is preferred way how to call EnumProcessModules() on Windows 7 and newer versions. If retrieving EnumProcessModules symbol failed with both methods then do not try it again on next MyEnumProcessModules() function call.
2021-02-03Avoid calling SetLastError() and GetLastError() internallyPali Rohár1-22/+17
There is no need for propagating internal errors via SetLastError() and GetLastError() calls. Just use additional argument for save_err_str() function. Also dlfcn API is POSIX and does not use GetLastError().
2021-02-03Move hCurrentProc variable to scope where is usedPali Rohár1-2/+3
2021-02-03Fix some style issuesPali Rohár2-14/+14
2021-01-29Remove duplicate checks for NULL pointersPali Rohár1-4/+1
is_valid_address() already rejects NULL addresses, so there is no need to check address for NULL.
2021-01-29Remove code for finding symbol name in import tablePali Rohár1-53/+6
It is not required as import table can use only symbols which are exported and therefore are in export table. So if symbol is not found in export table it cannot be in import table.
2021-01-27Function dladdr() now retrieve symbol name and symbol address from both ↵Pali Rohár4-43/+97
export and import tables dladdr tests for Windows now should always pass like on other systems.
2021-01-17CI: Add static building for cmakeRalf Habacker2-23/+70
2021-01-17cmake: add support to build test-dladdr on unix like osRalf Habacker2-12/+22
This is used to obtain test result references.
2021-01-17Add function dladdr() and associated test application test-dladdrRalf Habacker6-9/+439
2020-12-22Add cmake build support to travis CIRalf Habacker1-0/+11
2020-12-13Rewrite function save_err_ptr_str() to not use sprintf()Pali Rohár1-6/+13
sprintf() is marked by MSVC as unsafe and suppressing compile warning does not work. It is still generated on AppVeyor. So rewrite code for converting pointer number to string via open coded for-loop and do not use unsafe sprintf() function anymore. New code correctly handles both 32bit and 64bit variants and does not use any #ifdef _MSC_VER anymore.
2020-12-13Add _CRT_SECURE_NO_WARNINGS for test.c to disable MSVC deprecation warningsPali Rohár1-0/+1
2020-12-12ci-build.sh: Move install_prefix to cmake place where it is usedPali Rohár1-3/+1
2020-12-12Run Travis tests also under i586-mingw32msvc-gcc compilerPali Rohár1-0/+13
Beware that i586-mingw32msvc-gcc is sometimes just a symlink to i686-w64-mingw32-gcc. Real i586-mingw32msvc-gcc compiler is available in mingw32 package only in dist trusty.