Initial commit

This commit is contained in:
momo5502
2024-08-15 19:00:01 +02:00
parent d2c5970723
commit a154eb3ec9
14 changed files with 1065 additions and 0 deletions

149
.gitignore vendored Normal file
View File

@@ -0,0 +1,149 @@
### Windows
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Shortcuts
*.lnk
### OSX
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### Visual Studio
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
build
# Visual Studio 2015 cache/options directory
.vs/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
### IDA
*.id0
*.id1
*.id2
*.nam
*.til
### Custom user files
# User scripts
user*.bat
.vscode/

5
.gitmodules vendored Normal file
View File

@@ -0,0 +1,5 @@
[submodule "deps/unicorn"]
path = deps/unicorn
url = https://github.com/unicorn-engine/unicorn.git
shallow = true
branch = dev

48
CMakeLists.txt Normal file
View File

@@ -0,0 +1,48 @@
cmake_minimum_required(VERSION 3.26.4)
##########################################
option(MOMO_ENABLE_SANITIZER "Enable sanitizer" OFF)
##########################################
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
##########################################
project(bird LANGUAGES C CXX)
##########################################
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
##########################################
include(cmake/utils.cmake)
include(cmake/compiler-env.cmake)
##########################################
momo_set_new_artifact_directory()
##########################################
momo_add_subdirectory_and_get_targets("deps" EXTERNAL_TARGETS)
momo_add_subdirectory_and_get_targets("src" OWN_TARGETS)
##########################################
momo_targets_set_folder("External Dependencies" ${EXTERNAL_TARGETS})
momo_targets_exclude_from_all(${EXTERNAL_TARGETS})
momo_targets_disable_warnings(${EXTERNAL_TARGETS})
momo_targets_expose_includes(${OWN_TARGETS})
momo_targets_set_warnings_as_errors(${OWN_TARGETS})

83
CMakePresets.json Normal file
View File

@@ -0,0 +1,83 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 26,
"patch": 4
},
"configurePresets": [
{
"name": "build",
"hidden": true,
"binaryDir": "${sourceDir}/build/${presetName}"
},
{
"name": "ninja",
"hidden": true,
"generator": "Ninja"
},
{
"name": "release",
"inherits": [
"ninja",
"build"
],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "debug",
"inherits": [
"ninja",
"build"
],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "vs2022",
"generator": "Visual Studio 17 2022",
"inherits": "build"
}
],
"buildPresets": [
{
"name": "release",
"configurePreset": "release"
},
{
"name": "debug",
"configurePreset": "debug"
}
],
"workflowPresets": [
{
"name": "release",
"steps": [
{
"type": "configure",
"name": "release"
},
{
"type": "build",
"name": "release"
}
]
},
{
"name": "debug",
"steps": [
{
"type": "configure",
"name": "debug"
},
{
"type": "build",
"name": "debug"
}
]
}
]
}

147
cmake/compiler-env.cmake Normal file
View File

@@ -0,0 +1,147 @@
include_guard()
##########################################
# System identification
set(OSX OFF)
set(LINUX OFF)
set(WIN OFF)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(LINUX ON)
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(OSX ON)
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
set(WIN ON)
endif()
##########################################
cmake_policy(SET CMP0069 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
#set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
##########################################
if(UNIX)
momo_add_c_and_cxx_compile_options(-fvisibility=hidden)
endif()
##########################################
if(LINUX)
add_link_options(
-Wl,--no-undefined
-Wl,--gc-sections
-Wl,-z,now
-Wl,-z,noexecstack
-static-libstdc++
)
momo_add_c_and_cxx_compile_options(
-ffunction-sections
-fdata-sections
-fstack-protector-strong
-fdiagnostics-color=always
)
add_compile_definitions(
_REENTRANT
_THREAD_SAFE
)
if(NOT MOMO_ENABLE_SANITIZER)
add_compile_definitions(
_FORTIFY_SOURCE=2
)
endif()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
endif()
##########################################
if(MSVC)
string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "/EHs" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
momo_add_c_and_cxx_compile_options(
/sdl
/GS
/Gy
/EHa
/guard:cf
)
momo_add_compile_options(CXX
/Zc:__cplusplus
)
add_link_options(
/INCREMENTAL:NO
)
momo_add_c_and_cxx_release_compile_options(
/Ob2
#/GL
)
momo_add_release_link_options(
#/LTCG
)
endif()
##########################################
if(MOMO_ENABLE_SANITIZER)
momo_add_c_and_cxx_compile_options(
-fsanitize=address
)
endif()
##########################################
if(MOMO_ENABLE_SANITIZER)
# ASAN on Windows needs /MD
# https://developercommunity.visualstudio.com/t/c-address-sanitizer-statically-linked-dlls-do-not/1403680
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>DLL)
else()
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>)
endif()
##########################################
if(MSVC)
add_link_options(
$<$<NOT:$<STREQUAL:${CMAKE_MSVC_RUNTIME_LIBRARY},MultiThreaded>>:/NODEFAULTLIB:libcmt.lib>
$<$<NOT:$<STREQUAL:${CMAKE_MSVC_RUNTIME_LIBRARY},MultiThreadedDLL>>:/NODEFAULTLIB:msvcrt.lib>
$<$<NOT:$<STREQUAL:${CMAKE_MSVC_RUNTIME_LIBRARY},MultiThreadedDebug>>:/NODEFAULTLIB:libcmtd.lib>
$<$<NOT:$<STREQUAL:${CMAKE_MSVC_RUNTIME_LIBRARY},MultiThreadedDebugDLL>>:/NODEFAULTLIB:msvcrtd.lib>
)
endif()
##########################################
set(OPT_DEBUG "-O0 -g")
set(OPT_RELEASE "-O3 -g")
if(MSVC)
set(OPT_DEBUG "/Od /Ob0 /Zi")
set(OPT_RELEASE "/O2 /Ob2 /Zi")
add_link_options(/DEBUG)
endif()
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPT_DEBUG}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPT_DEBUG}")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPT_RELEASE}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPT_RELEASE}")
##########################################
if(CMAKE_GENERATOR MATCHES "Visual Studio")
momo_add_c_and_cxx_compile_options(/MP)
endif()

344
cmake/utils.cmake Normal file
View File

@@ -0,0 +1,344 @@
include_guard()
##########################################
function(momo_silence_deprecation_warnings)
set(CMAKE_WARN_DEPRECATED_OLD ${CMAKE_WARN_DEPRECATED} PARENT_SCOPE)
set(CMAKE_WARN_DEPRECATED OFF CACHE BOOL "" FORCE)
endfunction()
##########################################
function(momo_restore_deprecation_warnings)
set(CMAKE_WARN_DEPRECATED ${CMAKE_WARN_DEPRECATED_OLD} CACHE BOOL "" FORCE)
endfunction()
##########################################
function(momo_target_exclude_from_all target)
set_target_properties(${target} PROPERTIES EXCLUDE_FROM_ALL 1)
#set_target_properties(${target} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
endfunction()
##########################################
function(momo_targets_exclude_from_all)
foreach(target ${ARGV})
momo_target_exclude_from_all(${target})
endforeach()
endfunction()
##########################################
function(momo_target_set_folder folder target)
#get_target_property(CURRENT_FOLDER ${target} FOLDER)
#if(NOT CURRENT_FOLDER)
set_target_properties(${target} PROPERTIES FOLDER "${folder}")
#endif()
endfunction()
##########################################
function(momo_targets_set_folder folder)
foreach(target ${ARGN})
momo_target_set_folder(${folder} ${target})
endforeach()
endfunction()
##########################################
function(momo_target_disable_compile_commands target)
set_target_properties(${target} PROPERTIES EXPORT_COMPILE_COMMANDS OFF)
endfunction()
##########################################
function(momo_targets_disable_compile_commands)
foreach(target ${ARGV})
momo_target_disable_compile_commands(${target})
endforeach()
endfunction()
##########################################
function(momo_target_expose_includes target)
get_target_property(target_type ${target} TYPE)
if("${target_type}" STREQUAL "UTILITY")
return()
endif()
get_target_property(TARGET_SOURCE_DIR ${target} SOURCE_DIR)
target_include_directories(${target} INTERFACE ${TARGET_SOURCE_DIR}/..)
endfunction()
##########################################
function(momo_targets_expose_includes)
foreach(target ${ARGV})
momo_target_expose_includes(${target})
endforeach()
endfunction()
##########################################
function(momo_target_compile_options language target mode)
foreach(compile_option ${ARGN})
target_compile_options(${target} ${mode}
$<$<COMPILE_LANGUAGE:${language}>:${compile_option}>
)
endforeach()
endfunction()
##########################################
function(momo_target_c_and_cxx_compile_options)
momo_target_compile_options(C ${ARGV})
momo_target_compile_options(CXX ${ARGV})
endfunction()
##########################################
macro(momo_target_remove_compile_option target option)
get_target_property(target_flags ${target} COMPILE_OPTIONS)
if(target_flags)
list(REMOVE_ITEM target_flags ${option})
set_target_properties(${target} PROPERTIES COMPILE_OPTIONS "${target_flags}")
endif()
get_target_property(target_interface_flags ${target} INTERFACE_COMPILE_OPTIONS)
if(target_interface_flags)
list(REMOVE_ITEM target_interface_flags ${option})
set_target_properties(${target} PROPERTIES INTERFACE_COMPILE_OPTIONS "${target_interface_flags}")
endif()
endmacro()
##########################################
macro(momo_target_remove_compile_options target)
foreach(option ${ARGV})
momo_target_remove_compile_option(${target} ${option})
endforeach()
endmacro()
##########################################
function(momo_add_compile_options language)
foreach(option ${ARGN})
add_compile_options(
$<$<COMPILE_LANGUAGE:${language}>:${option}>
)
endforeach()
endfunction()
##########################################
function(momo_add_release_compile_options language)
foreach(option ${ARGN})
add_compile_options(
$<$<COMPILE_LANGUAGE:${language}>:$<$<CONFIG:RELEASE>:${option}>>
$<$<COMPILE_LANGUAGE:${language}>:$<$<CONFIG:RELWITHDEBINFO>:${option}>>
)
endforeach()
endfunction()
##########################################
function(momo_add_release_link_options)
foreach(option ${ARGN})
add_link_options(
$<$<CONFIG:RELEASE>:${option}>
$<$<CONFIG:RELWITHDEBINFO>:${option}>
)
endforeach()
endfunction()
##########################################
function(momo_add_c_and_cxx_compile_options)
momo_add_compile_options(C ${ARGV})
momo_add_compile_options(CXX ${ARGV})
endfunction()
##########################################
function(momo_add_c_and_cxx_release_compile_options)
momo_add_release_compile_options(C ${ARGV})
momo_add_release_compile_options(CXX ${ARGV})
endfunction()
##########################################
function(momo_target_disable_warnings target)
get_target_property(target_type ${target} TYPE)
if(("${target_type}" STREQUAL "INTERFACE_LIBRARY") OR ("${target_type}" STREQUAL "UTILITY"))
return()
endif()
momo_target_remove_compile_options(${target} /W3 -W3 /W4 -W4)
if(MSVC)
set(compile_options
/W0
/D_CRT_SECURE_NO_WARNINGS=1
)
endif()
momo_target_c_and_cxx_compile_options(${target} PRIVATE ${compile_options})
set_target_properties(${target} PROPERTIES MOMO_WARNINGS_DISABLE ON)
endfunction()
##########################################
function(momo_targets_disable_warnings)
foreach(target ${ARGV})
momo_target_disable_warnings(${target})
endforeach()
endfunction()
##########################################
function(momo_target_set_warnings_as_errors target)
get_target_property(target_type ${target} TYPE)
if(("${target_type}" STREQUAL "INTERFACE_LIBRARY") OR ("${target_type}" STREQUAL "UTILITY"))
return()
endif()
get_target_property(warnings_disabled ${target} MOMO_WARNINGS_DISABLE)
if(warnings_disabled)
return()
endif()
set(compile_options)
if(MSVC)
set(compile_options /W4 /WX)
endif()
target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:C>:$<$<CONFIG:RELEASE>:${compile_options}>>
$<$<COMPILE_LANGUAGE:CXX>:$<$<CONFIG:RELEASE>:${compile_options}>>
$<$<COMPILE_LANGUAGE:C>:$<$<CONFIG:RELWITHDEBINFO>:${compile_options}>>
$<$<COMPILE_LANGUAGE:CXX>:$<$<CONFIG:RELWITHDEBINFO>:${compile_options}>>
)
endfunction()
##########################################
function(momo_targets_set_warnings_as_errors)
foreach(target ${ARGV})
momo_target_set_warnings_as_errors(${target})
endforeach()
endfunction()
##########################################
function(momo_get_all_targets var)
set(targets)
momo_get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
set(${var} ${targets} PARENT_SCOPE)
endfunction()
##########################################
macro(momo_get_all_targets_recursive targets dir)
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
foreach(subdir ${subdirectories})
momo_get_all_targets_recursive(${targets} ${subdir})
endforeach()
get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
list(APPEND ${targets} ${current_targets})
endmacro()
##########################################
macro(momo_list_difference list_a list_to_remove result)
set(${result} ${list_a})
list(REMOVE_ITEM ${result} ${list_to_remove})
endmacro()
##########################################
macro(momo_set_artifact_directory directory)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${directory})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${directory})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${directory})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${directory})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${directory})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${directory})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${directory})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${directory})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${directory})
endmacro()
##########################################
macro(momo_set_new_artifact_directory)
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(IS_MULTI_CONFIG)
set(ARTIFACT_FOLDER_NAME "artifacts-$<LOWER_CASE:$<CONFIG>>")
else()
set(ARTIFACT_FOLDER_NAME "artifacts")
endif()
set(ARTIFACT_DIRECTORY "${CMAKE_BINARY_DIR}/${ARTIFACT_FOLDER_NAME}")
momo_set_artifact_directory(${ARTIFACT_DIRECTORY})
endmacro()
##########################################
macro(momo_add_subdirectory_and_get_targets directory targets)
momo_get_all_targets(EXISTING_TARGETS)
add_subdirectory(${directory})
momo_get_all_targets(ALL_TARGETS)
momo_list_difference("${ALL_TARGETS}" "${EXISTING_TARGETS}" ${targets})
endmacro()
##########################################
macro(momo_target_include_libraries target mode)
foreach(inc_target ${ARGN})
target_include_directories(${target} ${mode}
$<TARGET_PROPERTY:${inc_target},INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${inc_target},PUBLIC_INCLUDE_DIRECTORIES>
)
endforeach()
endmacro()
##########################################
function(momo_strip_target target)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
return()
endif()
if(NOT MSVC)
if(NOT DEFINED STRIP_COMMAND)
set(STRIP_COMMAND strip)
endif()
if(NOT DEFINED STRIP_FLAGS)
set(STRIP_FLAGS -g -s)
if(OSX)
set(STRIP_FLAGS -x)
endif()
endif()
set(IN_FILE "$<TARGET_FILE:${target}>")
set(OUT_FILE "$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_PREFIX:${target}>$<TARGET_FILE_BASE_NAME:${target}>-unstripped$<TARGET_FILE_SUFFIX:${target}>")
add_custom_command(TARGET ${target} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${IN_FILE} ${OUT_FILE}
COMMAND "${STRIP_COMMAND}" ${STRIP_FLAGS} "${IN_FILE}"
COMMENT "Strippping ${target}"
)
endif()
endfunction()
##########################################
macro(momo_assign_source_group)
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${ARGN})
endmacro()

5
deps/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,5 @@
set(UNICORN_ARCH "x86" CACHE STRING "")
add_subdirectory(unicorn)
##########################################

1
deps/unicorn vendored Submodule

Submodule deps/unicorn added at 87610baa3f

1
src/CMakeLists.txt Normal file
View File

@@ -0,0 +1 @@
add_subdirectory(emulator)

View File

@@ -0,0 +1,21 @@
file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS
*.cpp
*.hpp
*.rc
)
list(SORT SRC_FILES)
add_executable(client ${SRC_FILES})
momo_assign_source_group(${SRC_FILES})
target_precompile_headers(client PRIVATE std_include.hpp)
target_link_libraries(client PRIVATE unicorn)
set_target_properties(client PROPERTIES OUTPUT_NAME "bird")
set_property(GLOBAL PROPERTY VS_STARTUP_PROJECT client)
momo_strip_target(client)

84
src/emulator/main.cpp Normal file
View File

@@ -0,0 +1,84 @@
#include "std_include.hpp"
// code to be emulated
#define X86_CODE32 "\x41\x4a" // INC ecx; DEC edx
// memory address where emulation starts
#define ADDRESS 0x1000000
namespace
{
void run()
{
uc_engine* uc;
uc_err err;
int r_ecx = 0x1234; // ECX register
int r_edx = 0x7890; // EDX register
printf("Emulate i386 code\n");
// Initialize emulator in X86-32bit mode
err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc);
if (err != UC_ERR_OK) {
printf("Failed on uc_open() with error returned: %u\n", err);
return ;
}
// map 2MB memory for this emulation
uc_mem_map(uc, ADDRESS, 0x1000, UC_PROT_ALL);
// write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, X86_CODE32, sizeof(X86_CODE32) - 1)) {
printf("Failed to write emulation code to memory, quit!\n");
return;
}
// initialize machine registers
uc_reg_write(uc, UC_X86_REG_ECX, &r_ecx);
uc_reg_write(uc, UC_X86_REG_EDX, &r_edx);
// emulate code in infinite time & unlimited instructions
err = uc_emu_start(uc, ADDRESS, ADDRESS + sizeof(X86_CODE32) - 1, 0, 0);
if (err) {
printf("Failed on uc_emu_start() with error returned %u: %s\n",
err, uc_strerror(err));
}
// now print out some registers
printf("Emulation done. Below is the CPU context\n");
uc_reg_read(uc, UC_X86_REG_ECX, &r_ecx);
uc_reg_read(uc, UC_X86_REG_EDX, &r_edx);
printf(">>> ECX = 0x%x\n", r_ecx);
printf(">>> EDX = 0x%x\n", r_edx);
uc_close(uc);
}
}
int main(int /*argc*/, char** /*argv*/)
{
try
{
run();
return 0;
}
catch (std::exception& e)
{
puts(e.what());
#ifdef _WIN32
MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR);
#endif
}
return 1;
}
#ifdef _WIN32
int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)
{
return main(__argc, __argv);
}
#endif

101
src/emulator/resource.rc Normal file
View File

@@ -0,0 +1,101 @@
// Microsoft Visual C++ generated resource script.
//
#pragma code_page(65001)
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"#include ""windows.h""\r\n"
"\0"
END
2 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "momo5502"
VALUE "FileDescription", "Bird"
VALUE "FileVersion", "1.0.0.0"
VALUE "InternalName", "Bird"
VALUE "LegalCopyright", "All rights reserved."
VALUE "OriginalFilename", "bird.exe"
VALUE "ProductName", "bird"
VALUE "ProductVersion", "1.0.0.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Binary Data
//
GLFW_ICON ICON "resources/icon.ico"
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,76 @@
#pragma once
#ifdef _WIN32
#pragma warning(push)
#pragma warning(disable: 4127)
#pragma warning(disable: 4244)
#pragma warning(disable: 4245)
#pragma warning(disable: 4458)
#pragma warning(disable: 4505)
#pragma warning(disable: 4702)
#pragma warning(disable: 4996)
#pragma warning(disable: 5054)
#pragma warning(disable: 6011)
#pragma warning(disable: 6297)
#pragma warning(disable: 6385)
#pragma warning(disable: 6386)
#pragma warning(disable: 6387)
#pragma warning(disable: 26110)
#pragma warning(disable: 26451)
#pragma warning(disable: 26444)
#pragma warning(disable: 26451)
#pragma warning(disable: 26489)
#pragma warning(disable: 26495)
#pragma warning(disable: 26498)
#pragma warning(disable: 26812)
#pragma warning(disable: 28020)
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <ShlObj.h>
#include <d3d11.h>
#include <shellscalingapi.h>
#include <winternl.h>
// min and max is required by gdi, therefore NOMINMAX won't work
#ifdef max
#undef max
#endif
#ifdef min
#undef min
#endif
#endif
#include <map>
#include <set>
#include <list>
#include <array>
#include <deque>
#include <queue>
#include <thread>
#include <ranges>
#include <atomic>
#include <vector>
#include <mutex>
#include <string>
#include <chrono>
#include <memory>
#include <functional>
#include <filesystem>
#include <optional>
#include <stdexcept>
#include <string_view>
#include <unordered_set>
#include <condition_variable>
#include <cassert>
#include <unicorn/unicorn.h>
#ifdef _WIN32
#pragma warning(pop)
#endif
using namespace std::literals;