-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #17 from ntoskrnl7/env/arm_arm64
Env/arm arm64
- Loading branch information
Showing
27 changed files
with
356 additions
and
105 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,7 +6,7 @@ cmake_policy(SET CMP0021 OLD) | |
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") | ||
include(pkg-utils) | ||
|
||
pkg_get_version(CRTSYS ${CMAKE_CURRENT_SOURCE_DIR}/include/_version VERSION) | ||
pkg_get_version(CRTSYS ${CMAKE_CURRENT_SOURCE_DIR}/include/.internal/version VERSION) | ||
|
||
project( | ||
crtsys | ||
|
@@ -39,7 +39,7 @@ else() | |
set(LDK_USE_RAISE_EXCEPTION OFF) | ||
set(LDK_USE_RTL_RAISE_EXCEPTION OFF) | ||
endif() | ||
CPMAddPackage("gh:ntoskrnl7/[email protected].3") | ||
CPMAddPackage("gh:ntoskrnl7/[email protected].4") | ||
|
||
CPMAddPackage("gh:ntoskrnl7/FindWDK#master") | ||
list(APPEND CMAKE_MODULE_PATH "${FindWDK_SOURCE_DIR}/cmake") | ||
|
@@ -84,7 +84,6 @@ endif() | |
|
||
if (UCXXRT_ENABLED) | ||
list(APPEND SOURCE_FILES src/custom/msvc/common/crt/src/stl/winapisupp.cpp) | ||
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/custom/crt/isa_available_init.c) | ||
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/custom/crt/math/ftol3.c) | ||
|
||
CPMAddPackage("gh:ntoskrnl7/ucxxrt#master") | ||
|
@@ -96,7 +95,11 @@ if (UCXXRT_ENABLED) | |
) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/vcruntime/crt.cpp) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/vcruntime/locales.cpp) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/vcruntime/thread.cpp) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/vcruntime/thread.cpp) | ||
if(NOT "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32" AND NOT "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64" ) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/vcruntime/x86_exception_filter.cpp) | ||
endif() | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/cpu_disp.cpp) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/terminate.cpp) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/misc/invalid_parameter.cpp) | ||
list(REMOVE_ITEM UCXXRT_SOURCE_FILES ${ucxxrt_SOURCE_DIR}/src/sys_main.cpp) | ||
|
@@ -151,7 +154,6 @@ endif() | |
# | ||
# Add compile definitions | ||
# | ||
# target_compile_definitions(crtsys PUBLIC "_NO_CRT_STDIO_INLINE") | ||
target_compile_definitions(crtsys PUBLIC "_KERNEL32_") | ||
target_compile_definitions(crtsys PUBLIC "_ITERATOR_DEBUG_LEVEL=0") | ||
if (CRTSYS_USE_LIBCNTPR) | ||
|
@@ -176,8 +178,8 @@ endif() | |
# | ||
# Forced Include File | ||
# | ||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/include/winsdk/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/wdk/${WDK_VERSION}/forced.h") | ||
target_compile_options(crtsys PRIVATE /FI"${CMAKE_CURRENT_SOURCE_DIR}/include/winsdk/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/wdk/${WDK_VERSION}/forced.h") | ||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/include/.internal/winsdk/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/wdk/${WDK_VERSION}/forced.h") | ||
target_compile_options(crtsys PRIVATE /FI"${CMAKE_CURRENT_SOURCE_DIR}/include/.internal/winsdk/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/wdk/${WDK_VERSION}/forced.h") | ||
endif() | ||
target_compile_options(crtsys PRIVATE /FI"${CMAKE_CURRENT_SOURCE_DIR}/src/crtsys.h") | ||
if (UCXXRT_ENABLED) | ||
|
@@ -247,4 +249,4 @@ string(TOLOWER "${CMAKE_VS_PLATFORM_NAME}" PLATFROM_SHORT_NAME) | |
if(PLATFROM_SHORT_NAME STREQUAL "win32") | ||
set(PLATFROM_SHORT_NAME "x86") | ||
endif() | ||
set_target_properties(crtsys PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/lib/${PLATFROM_SHORT_NAME}) | ||
set_target_properties(crtsys PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/lib/${PLATFROM_SHORT_NAME}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ | |
![Visual Studio 2017+](https://img.shields.io/badge/Visual%20Studio-2017+-682270?logo=visualstudio&logoColor=682270) | ||
![CMake 3.14+](https://img.shields.io/badge/CMake-3.14+-yellow.svg?logo=cmake&logoColor=white) | ||
![C++ 14+](https://img.shields.io/badge/C++-14+-white.svg?logo=cplusplus&logoColor=blue) | ||
![Architecture](https://img.shields.io/badge/CPU-x86%20%2F%20x64%20%2F%20ARM%20%2F%20ARM64-blue.svg?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTIgNTIiIGlkPSJMYXllcl8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1MiA1MiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8Zz4KICAgICAgICA8cGF0aCBmaWxsPSJ3aGl0ZSIgZD0iTTQ5LDE5LjV2LTJoLTYuOTk4NDEzMXYtNy40OTU3ODg2SDE0LjQwMTYxMTNsLTQuNDAwMDI0NCw0LjUzMDAyOTN2MjcuNDY5OTcwN0gxNy41VjQ5aDJ2LTYuOTk1Nzg4NmgzVjQ5aDJ2LTYuOTk1Nzg4NmgzICAgVjQ5aDJ2LTYuOTk1Nzg4NmgzVjQ5aDJ2LTYuOTk1Nzg4NmgyLjgxMTU4NDVsNC42OTAwMDI0LTUuNjQwMDE0NlYzNC41SDQ5di0yaC02Ljk5ODQxMzF2LTNINDl2LTJoLTYuOTk4NDEzMXYtM0g0OXYtMmgtNi45OTg0MTMxICAgdi0zSDQ5eiBNMzYuMDAxNTg2OSwzMy41MDQyMTE0YzAsMS42NTAwMjQ0LTEuMzQ5OTc1NiwzLTMsM2gtMTRjLTEuNjU5OTczMSwwLTMtMS4zNDk5NzU2LTMtM3YtMTRjMC0xLjY1OTk3MzEsMS4zNDAwMjY5LTMsMy0zaDE0ICAgYzEuNjUwMDI0NCwwLDMsMS4zNDAwMjY5LDMsM1YzMy41MDQyMTE0eiIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSIyIiB3aWR0aD0iNyIgeD0iMyIgeT0iMTcuNSIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSIyIiB3aWR0aD0iNyIgeD0iMyIgeT0iMjIuNSIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSIyIiB3aWR0aD0iNyIgeD0iMyIgeT0iMjcuNSIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSIyIiB3aWR0aD0iNyIgeD0iMyIgeT0iMzIuNSIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSI3IiB3aWR0aD0iMiIgeD0iMzIuNSIgeT0iMyIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSI3IiB3aWR0aD0iMiIgeD0iMjcuNSIgeT0iMyIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSI3IiB3aWR0aD0iMiIgeD0iMjIuNSIgeT0iMyIgLz4KICAgICAgICA8cmVjdCBzdHlsZT0iZmlsbDp3aGl0ZSIgaGVpZ2h0PSI3IiB3aWR0aD0iMiIgeD0iMTcuNSIgeT0iMyIgLz4KICAgIDwvZz4KPC9zdmc+) | ||
|
||
커널 드라이버에서 C++ 및 STL 기능을 사용할 수 있도록 도와주는 CRT 라이브러리 입니다. | ||
|
||
|
@@ -63,7 +64,7 @@ | |
|
||
으로 인해서 새로운 라이브러리를 개발하게 되었습니다. | ||
|
||
crtsys가 장점은 아래와 같습니다. | ||
crtsys의 장점은 아래와 같습니다. | ||
|
||
1. Micosoft CRT와 STL을 최대한 비슷하게 지원하기 위해서 Microsoft CRT 소스코드를 사용하긴 하지만 Microsoft Visual Studio가 설치되어있는 디렉토리 내의 소스를 직접 빌드하는 방법으로 처리하여, Visual Studio를 합법적으로 사용하는 사용자는 라이센스 문제 없이 사용 가능합니다. | ||
2. Win32 API를 구현한 [Ldk](https://github.com/ntoskrnl7/Ldk)를 활용하여 많은 범위의 STL 기능을 지원합니다. | ||
|
@@ -78,7 +79,8 @@ crtsys가 장점은 아래와 같습니다. | |
|
||
## Test Environments | ||
|
||
- Windows 10 | ||
- Windows 10 x64 | ||
- **x86, x64, ARM, ARM64**로 빌드 가능하지만, 실제 테스트는 x86, x64 모듈에 대해서만 검증되었습니다. | ||
- CMake 3.21.4 | ||
- Git 2.23.0 | ||
- Visual Studio 2017 | ||
|
@@ -207,10 +209,14 @@ lib 디렉토리와 include 디렉토리를 타 프로젝트에서 사용하시 | |
```Batch | ||
git clone https://github.com/ntoskrnl7/crtsys | ||
cd crtsys/test | ||
cmake -S . -B build | ||
cmake --build build | ||
cmake -S . -B build_x64 | ||
cmake --build build_x64 | ||
cmake -S . -B build_x86 -A Win32 | ||
cmake --build build_x86 | ||
cmake -S . -B build_ARM -A ARM | ||
cmake --build build_ARM | ||
cmake -S . -B build_ARM64 -A ARM64 | ||
cmake --build build_ARM64 | ||
``` | ||
혹은 | ||
|
@@ -220,18 +226,33 @@ lib 디렉토리와 include 디렉토리를 타 프로젝트에서 사용하시 | |
cd crtsys/test | ||
build.bat . x86 | ||
build.bat . x64 | ||
build.bat . ARM | ||
build.bat . ARM64 | ||
``` | ||
혹은 아래 명령을 수행하시면 지원되는 모든 VS에 대해서 Debug, Release 구성을 모두 빌드합니다. | ||
혹은 아래 명령을 수행하시면 지원되는 모든 아키텍쳐에 대해서 Debug, Release 구성을 모두 빌드합니다. | ||
```Batch | ||
git clone https://github.com/ntoskrnl7/crtsys | ||
cd crtsys/test | ||
build_all.bat test | ||
``` | ||
2. build/Debug/crtsys_test.sys를 설치 및 로드하시기 바랍니다. (x86은 build_x86/Debug/crtsys_test.sys) | ||
3. 정상적으로 로드 및 언로드가 되는지 확인하시기 바랍니다. | ||
2. build/Debug/crtsys_test.sys를 설치 및 로드하시기 바랍니다. | ||
x64 : build_x64/Debug/crtsys_test.sys | ||
x86 : build_x86/Debug/crtsys_test.sys | ||
ARM : build_ARM/Debug/crtsys_test.sys | ||
ARM64 : build_ARM64/Debug/crtsys_test.sys | ||
```batch | ||
sc create CrtSysTest binpath= "빌드된 crtsys_test.sys의 전체 경로" displayname= "crtsys test" start= demand type= kernel | ||
sc start CrtSysTest | ||
sc stop CrtSysTest | ||
sc delete CrtSysTest | ||
``` | ||
|
||
3. 정상적으로 로드/언로드가 되었다면 테스트 성공한 것이며, 테스트 내용은 DebugView나 WinDbg를 통해서 확인 가능합니다. | ||
|
||
## Usage | ||
|
||
|
@@ -247,11 +268,19 @@ CMake를 사용하는것을 권장합니다. | |
2. CPM을 프로젝트 디렉토리에 다운로드 받으시기 바랍니다. | ||
|
||
```batch | ||
mkdir -p cmake | ||
mkdir cmake | ||
wget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake | ||
``` | ||
혹은 | ||
```batch | ||
mkdir cmake | ||
curl -o cmake/CPM.cmake -LJO https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake | ||
``` | ||
로 CPM.cmake를 다운로드 받으시기 바랍니다. | ||
3. 프로젝트 디렉토리에 아래와 같은 파일을 작성해주시기 바랍니다. | ||
- 디렉토리 구조 | ||
|
@@ -273,7 +302,7 @@ CMake를 사용하는것을 권장합니다. | |
include(cmake/CPM.cmake) | ||
set(CRTSYS_NTL_MAIN ON) # use ntl::main | ||
CPMAddPackage("gh:ntoskrnl7/[email protected].4") | ||
CPMAddPackage("gh:ntoskrnl7/[email protected].5") | ||
include(${crtsys_SOURCE_DIR}/cmake/CrtSys.cmake) | ||
# add driver | ||
|
@@ -302,26 +331,26 @@ CMake를 사용하는것을 권장합니다. | |
ntl::status ntl::main(ntl::driver &driver, const std::wstring ®istry_path) { | ||
std::wcout << "load (registry_path :" << registry_path << ")\n"; | ||
std::wcout << "load (registry_path :" << registry_path << ")\n"; | ||
// TODO | ||
// TODO | ||
driver.on_unload([registry_path]() { | ||
std::wcout << "unload (registry_path :" << registry_path << ")\n"; | ||
}); | ||
driver.on_unload([registry_path]() { | ||
std::wcout << "unload (registry_path :" << registry_path << ")\n"; | ||
}); | ||
return status::ok(); | ||
return status::ok(); | ||
} | ||
``` | ||
1. 빌드를 수행합니다. | ||
4. 빌드를 수행합니다. | ||
```batch | ||
cmake -S . -B build | ||
cmake --build build | ||
``` | ||
|
||
2. 드라이버가 정상적으로 시작되고 종료되는지 확인하시기 바랍니다. | ||
5. 드라이버가 정상적으로 시작되고 종료되는지 확인하시기 바랍니다. | ||
|
||
```batch | ||
sc create CrtSysTest binpath= "빌드된 crtsys_test.sys의 전체 경로" displayname= "crtsys test" start= demand type= kernel | ||
|
@@ -332,6 +361,7 @@ CMake를 사용하는것을 권장합니다. | |
|
||
## TODO | ||
|
||
- CMake Install 구현 | ||
- 아직 구현되지 않은 C++ 및 STL 기능 구현 | ||
- Visual Studio 2017의 CRT 소스 코드 빌드 | ||
- 커널 드라이버와 사용자 프로세스 간 통신 기능 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.