diff options
Diffstat (limited to 'libs/usvfs/test/tinjectlib_test')
| -rw-r--r-- | libs/usvfs/test/tinjectlib_test/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | libs/usvfs/test/tinjectlib_test/main.cpp | 158 | ||||
| -rw-r--r-- | libs/usvfs/test/tinjectlib_test/testinject_bin/main.cpp | 4 | ||||
| -rw-r--r-- | libs/usvfs/test/tinjectlib_test/testinject_dll/main.cpp | 36 | ||||
| -rw-r--r-- | libs/usvfs/test/tinjectlib_test/testinject_dll/main.h | 11 |
5 files changed, 0 insertions, 225 deletions
diff --git a/libs/usvfs/test/tinjectlib_test/CMakeLists.txt b/libs/usvfs/test/tinjectlib_test/CMakeLists.txt deleted file mode 100644 index 9bd3f7b..0000000 --- a/libs/usvfs/test/tinjectlib_test/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -find_package(GTest CONFIG REQUIRED) - -# binary and binary injected -add_executable(testinject_bin testinject_bin/main.cpp) -usvfs_set_test_properties(testinject_bin FOLDER tinjectlib) - -add_library(testinject_dll SHARED testinject_dll/main.cpp testinject_dll/main.h) -usvfs_set_test_properties(testinject_dll FOLDER tinjectlib) - -# actual test executable -add_executable(tinjectlib_test main.cpp) -usvfs_set_test_properties(tinjectlib_test FOLDER tinjectlib) -target_link_libraries(tinjectlib_test PRIVATE tinjectlib shared GTest::gtest GTest::gtest_main) -add_dependencies(tinjectlib_test testinject_bin testinject_dll) diff --git a/libs/usvfs/test/tinjectlib_test/main.cpp b/libs/usvfs/test/tinjectlib_test/main.cpp deleted file mode 100644 index ce48f83..0000000 --- a/libs/usvfs/test/tinjectlib_test/main.cpp +++ /dev/null @@ -1,158 +0,0 @@ -#include <boost/filesystem.hpp> -#include <boost/type_traits.hpp> -#include <gtest/gtest.h> -#include <injectlib.h> -#include <spdlog/sinks/stdout_sinks.h> -#include <spdlog/spdlog.h> -#include <winapi.h> - -using namespace usvfs::shared; -using namespace InjectLib; - -#if BOOST_ARCH_X86_64 -static const wchar_t INJECT_BIN[] = L"testinject_bin_x64.exe"; -#else -static const wchar_t INJECT_BIN[] = L"testinject_bin_x86.exe"; -#endif - -#if BOOST_ARCH_X86_64 -static const wchar_t INJECT_LIB[] = L"testinject_dll_x64.dll"; -#else -static const wchar_t INJECT_LIB[] = L"testinject_dll_x86.dll"; -#endif - -static std::shared_ptr<spdlog::logger> logger() -{ - std::shared_ptr<spdlog::logger> result = spdlog::get("test"); - if (result.get() == nullptr) { - result = spdlog::stdout_logger_mt("test"); - } - return result; -} - -bool spawn(HANDLE& processHandle, HANDLE& threadHandle) -{ - STARTUPINFO si; - ::ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - - PROCESS_INFORMATION pi; - BOOL success = ::CreateProcess(INJECT_BIN, nullptr, nullptr, nullptr, FALSE, - CREATE_SUSPENDED, nullptr, nullptr, &si, &pi); - - if (!success) { - throw windows_error("failed to start process"); - } - - processHandle = pi.hProcess; - threadHandle = pi.hThread; - - return true; -} - -TEST(InjectingTest, InjectionNoInit) -{ - // Verify lib can inject without a init function - - HANDLE process, thread; - spawn(process, thread); - EXPECT_NO_THROW(InjectLib::InjectDLL(process, thread, INJECT_LIB)); - ResumeThread(thread); - - DWORD res = WaitForSingleObject(process, INFINITE); - DWORD exitCode = NO_ERROR; - res = GetExitCodeProcess(process, &exitCode); - EXPECT_EQ(NOERROR, exitCode); - - CloseHandle(process); - CloseHandle(thread); -} - -TEST(InjectingTest, InjectionSimpleInit) -{ - // Verify lib can inject with a init function with null parameters - - HANDLE process, thread; - spawn(process, thread); - EXPECT_NO_THROW(InjectLib::InjectDLL(process, thread, INJECT_LIB, "InitNoParam")); - ResumeThread(thread); - - DWORD res = WaitForSingleObject(process, INFINITE); - DWORD exitCode = NO_ERROR; - res = GetExitCodeProcess(process, &exitCode); - EXPECT_EQ(10001, exitCode); // used init function exits process with this exit code - - CloseHandle(process); - CloseHandle(thread); -} - -TEST(InjectingTest, InjectionComplexInit) -{ - // Verify lib can inject with a init function with null parameters - - static const WCHAR param[] = L"magic_parameter"; - HANDLE process, thread; - spawn(process, thread); - EXPECT_NO_THROW(InjectLib::InjectDLL(process, thread, INJECT_LIB, "InitComplexParam", - reinterpret_cast<LPCVOID>(param), - wcslen(param) * sizeof(WCHAR))); - - ResumeThread(thread); - - DWORD res = WaitForSingleObject(process, INFINITE); - DWORD exitCode = NO_ERROR; - res = GetExitCodeProcess(process, &exitCode); - EXPECT_EQ(10002, exitCode); // used init function exits process with this exit code - - CloseHandle(process); - CloseHandle(thread); -} - -TEST(InjectingTest, InjectionNoQuitInit) -{ - // Verify lib can inject with a init function with null parameters - - HANDLE process, thread; - spawn(process, thread); - EXPECT_NO_THROW(InjectLib::InjectDLL(process, thread, INJECT_LIB, "InitNoQuit")); - ResumeThread(thread); - - DWORD res = WaitForSingleObject(process, INFINITE); - DWORD exitCode = NO_ERROR; - res = GetExitCodeProcess(process, &exitCode); - EXPECT_EQ(0, exitCode); // expect regular exit from process - - CloseHandle(process); - CloseHandle(thread); -} - -TEST(InjectingTest, InjectionSkipInit) -{ - // verify the skip-on-missing mechanism for init function works - - HANDLE process, thread; - spawn(process, thread); - EXPECT_NO_THROW(InjectLib::InjectDLL(process, thread, INJECT_LIB, "__InitInvalid", - nullptr, 0, true)); - ResumeThread(thread); - - DWORD res = WaitForSingleObject(process, INFINITE); - DWORD exitCode = NO_ERROR; - res = GetExitCodeProcess(process, &exitCode); - EXPECT_EQ(NOERROR, exitCode); - - CloseHandle(process); - CloseHandle(thread); -} - -int main(int argc, char** argv) -{ - auto logger = spdlog::stdout_logger_mt("usvfs"); - logger->set_level(spdlog::level::warn); - - boost::filesystem::path filePath(winapi::wide::getModuleFileName(nullptr)); - SetCurrentDirectoryW(filePath.parent_path().wstring().c_str()); - - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/libs/usvfs/test/tinjectlib_test/testinject_bin/main.cpp b/libs/usvfs/test/tinjectlib_test/testinject_bin/main.cpp deleted file mode 100644 index f8b643a..0000000 --- a/libs/usvfs/test/tinjectlib_test/testinject_bin/main.cpp +++ /dev/null @@ -1,4 +0,0 @@ -int main() -{ - return 0; -} diff --git a/libs/usvfs/test/tinjectlib_test/testinject_dll/main.cpp b/libs/usvfs/test/tinjectlib_test/testinject_dll/main.cpp deleted file mode 100644 index 8339e97..0000000 --- a/libs/usvfs/test/tinjectlib_test/testinject_dll/main.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "main.h" - -void __cdecl InitNoQuit(LPVOID, size_t) -{ - // nop -} - -void __cdecl InitNoParam(LPVOID, size_t) -{ - ExitProcess(10001); -} - -void __cdecl InitComplexParam(LPVOID userData, size_t) -{ - LPCWSTR string = (LPCWSTR)userData; - if (wcscmp(string, L"magic_parameter") == 0) { - ExitProcess(10002); - } else { - ExitProcess(20003); - } -} - -BOOL APIENTRY DllMain(HMODULE, DWORD reasonForCall, LPVOID) -{ - switch (reasonForCall) { - case DLL_PROCESS_ATTACH: { - } break; - case DLL_PROCESS_DETACH: { - } break; - case DLL_THREAD_ATTACH: { - } break; - case DLL_THREAD_DETACH: { - } break; - } - return TRUE; -} diff --git a/libs/usvfs/test/tinjectlib_test/testinject_dll/main.h b/libs/usvfs/test/tinjectlib_test/testinject_dll/main.h deleted file mode 100644 index 6faf800..0000000 --- a/libs/usvfs/test/tinjectlib_test/testinject_dll/main.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -extern "C" - __declspec(dllexport) void __cdecl InitNoQuit(LPVOID userData, size_t userDataSize); -extern "C" __declspec(dllexport) void __cdecl InitNoParam(LPVOID userData, - size_t userDataSize); -extern "C" __declspec(dllexport) void __cdecl InitComplexParam(LPVOID userData, - size_t userDataSize); |
