From 6325dbce0d7f332bb922b467ccf4a06a41c3289a Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sun, 30 Jan 2022 17:53:48 +0100 Subject: [PATCH] includes/std: Moved stdlib to std folder, added all builtin functions --- README.md | 2 +- includes/cstdint.pat | 2 ++ includes/libstd/file.pat | 11 ------- includes/libstd/mem.pat | 7 ---- includes/{libstd => std}/bit.pat | 2 ++ includes/{libstd => std}/cint.pat | 2 ++ includes/{libstd => std}/ctype.pat | 2 ++ includes/std/file.pat | 49 ++++++++++++++++++++++++++++ includes/{libstd => std}/fxpt.pat | 2 ++ includes/{libstd => std}/hash.pat | 0 includes/std/http.pat | 7 ++++ includes/std/io.pat | 22 +++++++++++++ includes/{libstd => std}/limits.pat | 2 ++ includes/{libstd => std}/math.pat | 2 ++ includes/std/mem.pat | 41 +++++++++++++++++++++++ includes/{libstd => std}/ptr.pat | 2 ++ includes/{libstd => std}/rustint.pat | 2 ++ includes/{libstd => std}/string.pat | 24 ++++++++++++++ includes/std/sys.pat | 28 ++++++++++++++++ 19 files changed, 190 insertions(+), 19 deletions(-) delete mode 100644 includes/libstd/file.pat delete mode 100644 includes/libstd/mem.pat rename includes/{libstd => std}/bit.pat (97%) rename includes/{libstd => std}/cint.pat (96%) rename includes/{libstd => std}/ctype.pat (98%) create mode 100644 includes/std/file.pat rename includes/{libstd => std}/fxpt.pat (98%) rename includes/{libstd => std}/hash.pat (100%) create mode 100644 includes/std/http.pat create mode 100644 includes/std/io.pat rename includes/{libstd => std}/limits.pat (98%) rename includes/{libstd => std}/math.pat (98%) create mode 100644 includes/std/mem.pat rename includes/{libstd => std}/ptr.pat (94%) rename includes/{libstd => std}/rustint.pat (93%) rename includes/{libstd => std}/string.pat (82%) create mode 100644 includes/std/sys.pat diff --git a/README.md b/README.md index d253a82..6a117d0 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Hex patterns, include patterns and magic files for the use with the ImHex Hex Ed | Name | Path | Description | |------|------|-------------| -| libstd | `includes/libstd/*` | Pattern Language Standard Libaray | +| libstd | `includes/std/*` | Pattern Language Standard Libaray | | cstdint | `includes/cstdint.pat` | C integer types | ### Yara rules diff --git a/includes/cstdint.pat b/includes/cstdint.pat index 45ab480..35d4792 100644 --- a/includes/cstdint.pat +++ b/includes/cstdint.pat @@ -1,3 +1,5 @@ +#pragma once + using uint8_t = u8; using uint16_t = u16; using uint32_t = u32; diff --git a/includes/libstd/file.pat b/includes/libstd/file.pat deleted file mode 100644 index 084b29e..0000000 --- a/includes/libstd/file.pat +++ /dev/null @@ -1,11 +0,0 @@ -namespace std::file { - - using Handle = s32; - - enum Mode : u8 { - Read = 1, - Write = 2, - Create = 3 - }; - -} diff --git a/includes/libstd/mem.pat b/includes/libstd/mem.pat deleted file mode 100644 index 2c729a9..0000000 --- a/includes/libstd/mem.pat +++ /dev/null @@ -1,7 +0,0 @@ -namespace std::mem { - - fn eof() { - return $ >= std::mem::size(); - }; - -} diff --git a/includes/libstd/bit.pat b/includes/std/bit.pat similarity index 97% rename from includes/libstd/bit.pat rename to includes/std/bit.pat index dda1bd8..729517a 100644 --- a/includes/libstd/bit.pat +++ b/includes/std/bit.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std::bit { fn popcount(u128 x) { diff --git a/includes/libstd/cint.pat b/includes/std/cint.pat similarity index 96% rename from includes/libstd/cint.pat rename to includes/std/cint.pat index 8ed34d1..d267f20 100644 --- a/includes/libstd/cint.pat +++ b/includes/std/cint.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std { using uint8_t = u8; diff --git a/includes/libstd/ctype.pat b/includes/std/ctype.pat similarity index 98% rename from includes/libstd/ctype.pat rename to includes/std/ctype.pat index c6f297d..c8a37be 100644 --- a/includes/libstd/ctype.pat +++ b/includes/std/ctype.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std::ctype { fn isdigit(char c) { diff --git a/includes/std/file.pat b/includes/std/file.pat new file mode 100644 index 0000000..18b9ceb --- /dev/null +++ b/includes/std/file.pat @@ -0,0 +1,49 @@ +#pragma once + +namespace std::file { + + using Handle = s32; + + enum Mode : u8 { + Read = 1, + Write = 2, + Create = 3 + }; + + + fn open(str path, Mode mode) { + return builtin::std::file::open(path, mode); + }; + + fn close(Handle handle) { + builtin::std::file::close(handle); + }; + + + fn read(Handle handle, u64 size) { + return builtin::std::file::read(handle, size); + }; + + fn write(Handle handle, str data) { + return builtin::std::file::write(handle, data); + }; + + + fn size(Handle handle) { + return builtin::std::file::size(handle); + }; + + fn resize(Handle handle, u64 size) { + builtin::std::file::resize(handle, size); + }; + + fn flush(Handle handle) { + builtin::std::file::remove(handle); + }; + + + fn remove(Handle handle) { + builtin::std::file::remove(handle); + }; + +} diff --git a/includes/libstd/fxpt.pat b/includes/std/fxpt.pat similarity index 98% rename from includes/libstd/fxpt.pat rename to includes/std/fxpt.pat index 70db72c..4fa7105 100644 --- a/includes/libstd/fxpt.pat +++ b/includes/std/fxpt.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std::fxpt { using fixed = s128; diff --git a/includes/libstd/hash.pat b/includes/std/hash.pat similarity index 100% rename from includes/libstd/hash.pat rename to includes/std/hash.pat diff --git a/includes/std/http.pat b/includes/std/http.pat new file mode 100644 index 0000000..bd53c2e --- /dev/null +++ b/includes/std/http.pat @@ -0,0 +1,7 @@ +namespace std::http { + + fn get(str url) { + return builtin::std::http::get(url); + }; + +} \ No newline at end of file diff --git a/includes/std/io.pat b/includes/std/io.pat new file mode 100644 index 0000000..6ac3427 --- /dev/null +++ b/includes/std/io.pat @@ -0,0 +1,22 @@ +#pragma once + +namespace std { + + fn print(str fmt, auto ... args) { + builtin::std::print(fmt, args); + }; + + fn format(str fmt, auto ... args) { + return builtin::std::format(fmt, args); + }; + + + fn error(str message) { + builtin::std::error(message); + }; + + fn warning(str message) { + builtin::std::warning(message); + }; + +} \ No newline at end of file diff --git a/includes/libstd/limits.pat b/includes/std/limits.pat similarity index 98% rename from includes/libstd/limits.pat rename to includes/std/limits.pat index 693ddcf..70f1271 100644 --- a/includes/libstd/limits.pat +++ b/includes/std/limits.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std::limits { fn u8_min() { diff --git a/includes/libstd/math.pat b/includes/std/math.pat similarity index 98% rename from includes/libstd/math.pat rename to includes/std/math.pat index 95626b7..0b7cb5f 100644 --- a/includes/libstd/math.pat +++ b/includes/std/math.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std::math { fn min(auto a, auto b) { diff --git a/includes/std/mem.pat b/includes/std/mem.pat new file mode 100644 index 0000000..f3a5a49 --- /dev/null +++ b/includes/std/mem.pat @@ -0,0 +1,41 @@ +#pragma once + +namespace std::mem { + + fn eof() { + return $ >= std::mem::size(); + }; + + fn align_to(u128 alignment, u128 value) { + u128 remainder = value % alignment; + + return remainder != 0 ? value + (alignment - remainder) : value; + }; + + + fn base_address() { + return builtin::std::mem::base_address(); + }; + + fn size() { + return builtin::std::mem::size(); + }; + + fn find_sequence(u128 occurrence_index, auto ... bytes) { + return builtin::std::mem::find_sequence(occurrence_index, bytes); + }; + + + fn read_unsigned(u128 address, u8 size) { + return builtin::std::mem::read_unsigned(address, size); + }; + + fn read_signed(u128 address, u8 size) { + return builtin::std::mem::read_signed(address, size); + }; + + fn read_string(u128 address, u8 size) { + return builtin::std::mem::read_string(address, size); + }; + +} diff --git a/includes/libstd/ptr.pat b/includes/std/ptr.pat similarity index 94% rename from includes/libstd/ptr.pat rename to includes/std/ptr.pat index 89d0e0b..8bac79c 100644 --- a/includes/libstd/ptr.pat +++ b/includes/std/ptr.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std::ptr { fn relative_to_pointer(u128 offset) { diff --git a/includes/libstd/rustint.pat b/includes/std/rustint.pat similarity index 93% rename from includes/libstd/rustint.pat rename to includes/std/rustint.pat index 735ccf6..976393f 100644 --- a/includes/libstd/rustint.pat +++ b/includes/std/rustint.pat @@ -1,3 +1,5 @@ +#pragma once + namespace std { using i8 = s8; diff --git a/includes/libstd/string.pat b/includes/std/string.pat similarity index 82% rename from includes/libstd/string.pat rename to includes/std/string.pat index 7f8664d..428511d 100644 --- a/includes/libstd/string.pat +++ b/includes/std/string.pat @@ -1,5 +1,29 @@ +#pragma once + namespace std::string { + fn length(str string) { + return builtin::std::string::length(string); + }; + + fn at(str string, u32 index) { + return builtin::std::string::at(string, index); + }; + + fn substr(str string, u32 pos, u32 count) { + return builtin::std::string::substr(string, pos, count); + }; + + + fn parse_int(str string, u8 base) { + return builtin::std::string::parse_int(string, base); + }; + + fn parse_float(str string) { + return builtin::std::string::parse_float(string); + }; + + fn to_string(auto x) { return std::format("{}", x); }; diff --git a/includes/std/sys.pat b/includes/std/sys.pat new file mode 100644 index 0000000..23b8fd0 --- /dev/null +++ b/includes/std/sys.pat @@ -0,0 +1,28 @@ +#pragma once + +#include + +namespace std { + + fn assert(bool condition, str message) { + if (!condition) { + std::error(std::format("assertion failed '{0}'", message)); + } + }; + + fn assert_warn(bool condition, str message) { + if (!condition) { + std::warning(std::format("assertion failed '{0}'", message)); + } + }; + + + fn env(str name) { + return builtin::std::env(name); + }; + + fn sizeof_pack(auto ... pack) { + return builtin::std::sizeof_pack(pack); + }; + +} \ No newline at end of file