From f08ad5636f90e2dc6e3a9917dbfaa87ccb08f303 Mon Sep 17 00:00:00 2001 From: _xeroxz Date: Mon, 8 Mar 2021 18:24:19 +0000 Subject: [PATCH] Update README.md --- README.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1263f38..c6392c0 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,15 @@ * Theodosius - Jit linker, Mapper, Mutator, and Obfuscator * Linking - Dynamic And Static - * Object Files + * What Is A Linker + * Object Files + * Static Linking + * Dynamic Linking + * Usage - Using Theodosius + * `theo::memcpy_t` - copy memory lambda + * `theo::malloc_t` - allocate executable memory + * `theo::resolve_symbol_t` - resolve external symbol + * Creating Instance # Theodosius - Jit linker, Mapper, Mutator, and Obfuscator @@ -19,16 +27,16 @@ Since Theo is a jit linker, unexported symbols can be jit linked. Resolving such ### Linking - Dynamic And Static -#### Object Files - -If you define a c++ file called "main.cpp" the compiler will generate an object file by the name of "main.obj". When you refer to data or code defined in another c/c++ file, the linker uses a symbol table to resolve the address of said code/data. In this situation I am the linker and I resolve all of your symbols :). - #### What Is A Linker A linker is a program which takes object files produces by a compiler and generates a final executable native to the operating system. A linker interfaces with not only object files but also static libraries, "lib" files. What is a "lib" file? Well a lib file is just an archive of obj's. You can invision it as a zip/rar without any compression, just concatination of said object files. Theo is a jit linker, which means it will link objs together and map them into memory all at once. For usability however, instead of handling object files, Theo can parse entire lib files and extract the objects out of the lib. +#### Object Files + +If you define a c++ file called "main.cpp" the compiler will generate an object file by the name of "main.obj". When you refer to data or code defined in another c/c++ file, the linker uses a symbol table to resolve the address of said code/data. In this situation I am the linker and I resolve all of your symbols :). + #### Static Linking Static linking is when the linker links entire routines not created by you, into your code. Say `memcpy` (if its not inlined), will be staticlly linked with the CRT. Static linking also allows for your code to be more independant as all the code you need you bring with you. However, with Theo, you cannot link static libraries which are not compiled with `mcmodel=large`. Theo supports actual static linking, in other words, using multiple static libraries at the same time.