Giter Site home page Giter Site logo

bb33bb / ucxxrt Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mirokaku/ucxxrt

0.0 0.0 0.0 2.45 MB

The Universal C++ RunTime library, supporting kernel-mode C++ exception-handler and STL.

License: MIT License

C++ 64.57% C 1.09% Assembly 10.91% Rich Text Format 23.43%

ucxxrt's Introduction

Actions Status LICENSE LICENSE Windows Visual Studio nuget

UserMode support will be removed starting 03/29/2022. The last version to support UserMode is e2f159f8f, UserMode please use VC-LTL5

1. About

ucxxrt is a open source rutime library which based on MSVC.The highlight of this project is that it can be used in kernel-mode drivers.
It gives you the same experience as user-mode application development in C++ when developing kernel-mode drivers.

Before ucxxrt was born,in order to use C++ on kernel-mode drivers, I use (KTL、ustd、...).

But there are several problems,like it isn't support C++ exception and it cost much time on implementing new features which provided by the latest ISO,then ucxxrt was born.

1.1 Principle

  • In kernel-mode driver mode,forced disable kernel-mode flag by using property sheet ,it makes the compiler support C++ exceptions.
  • Implement the exception functions such as throwcatch. Simulated the exception dispatcher in throw.

1.2 Features

  • support x86, x64, ARM(experimental), ARM64(experimental).
  • support new/delete operators.
  • support C++ exception (/EHa, /EHsc).
  • support SAFESEH、GS (Buffer Security Check).
  • support STL (not fully).
  • support static objects.

List of features that are not supported at this time↓

1.3 Example

See project unittest for more Infomation.

void Test$ThrowUnknow()
{
    try
    {
        try
        {
            try
            {
                throw std::wstring();
            }
            catch (int& e)
            {
                ASSERT(false);
                LOG(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "Catch Exception: %d\n", e);
            }
        }
        catch (std::string& e)
        {
            ASSERT(false);
            LOG(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "Catch Exception: %s\n", e.c_str());
        }
    }
    catch (...)
    {
        LOG(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "Catch Exception: ...\n");
    }
}

void Test$HashMap()
{
    auto Rand = std::mt19937_64(::rand());
    auto Map = std::unordered_map<uint32_t, std::string>();
    for (auto i = 0u; i < 10; ++i)
    {
        Map[i] = std::to_string(Rand());
    }

    for (const auto& Item : Map)
    {
        LOG(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,
            "map[%ld] = %s\n", Item.first, Item.second.c_str());
    }
}

2. How to use

First, rename DriverEntry to DriverMain

2.1 Option 1 (recommend)

Right click on the project and select "Manage NuGet Packages", then search for ucxxrt and choose the version that suits you, and finally click "Install".

nuget

2.2 Option 2

  1. Download the latest package from release and unzip it.

  2. Add the property sheet ucxxrt.props to yor project.

usage

3. How to compile

IDE:Visual Studio 2019 or higher (Compiling for ARM/ARM64 requires Visual Studio 2022)

  • git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
  • Open ucxxrt.sln and compile.

4. Reference and Acknowledgement

Thanks to these excellent projects for help me on developing ucxxrt.

5. List of features that are not supported at this time

  • Thread Local Storage (TLS): thread_local、TlsAlloc ...
  • std::thread
  • std::filesystem
  • std::chrono
  • std::stacktrace_entry
  • std::locale
  • std::stream (std::fstream、std::iostream、std::cin、std::cout、std::cerr)
  • std::mutex、std::shared_mutex
  • std::future
  • std::condition_variable
  • std::latch
  • std::semaphore (std::counting_semaphore、std::binary_semaphore)
  • ...

ucxxrt's People

Contributors

mirokaku avatar luciouskami avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.