diff options
author | Regina König | 2020-06-25 15:55:11 +0200 |
---|---|---|
committer | Regina König | 2020-06-25 15:55:11 +0200 |
commit | 945836811b78f7f1dd169a4b1909ed2565975728 (patch) | |
tree | 190a072fd0a7cd94c44c1c8dc9dfcb4c2e6ebade /documentation | |
parent | created new application to find out how to access memory information (diff) | |
download | memtest86-945836811b78f7f1dd169a4b1909ed2565975728.tar.gz memtest86-945836811b78f7f1dd169a4b1909ed2565975728.tar.xz memtest86-945836811b78f7f1dd169a4b1909ed2565975728.zip |
added outcommented example code into GetMemoryMap application and some further documentation files
Diffstat (limited to 'documentation')
-rw-r--r-- | documentation/UEFI general/get memory map | 32 | ||||
-rw-r--r-- | documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT | 2 | ||||
-rw-r--r-- | documentation/assembler/general | 46 | ||||
-rw-r--r-- | documentation/c_tutorial/praeprozessor_direktiven | 90 | ||||
-rw-r--r-- | documentation/c_tutorial/printf_formats | 11 | ||||
-rw-r--r-- | documentation/c_tutorial/standard_header | 28 | ||||
-rw-r--r-- | documentation/c_tutorial/struct | 72 | ||||
-rw-r--r-- | documentation/developer manual x86-64/0_0 general_information | 20 | ||||
-rw-r--r-- | documentation/developer manual x86-64/2_1.3 Notational Conventions | 92 |
9 files changed, 392 insertions, 1 deletions
diff --git a/documentation/UEFI general/get memory map b/documentation/UEFI general/get memory map new file mode 100644 index 0000000..14c246f --- /dev/null +++ b/documentation/UEFI general/get memory map @@ -0,0 +1,32 @@ +http://hypervsir.blogspot.com/2014/09/approach-to-retrieving-bios-memory-map.html + + + +BIOS routine: INT 0x15, AX=0xE820 +_______________ +GetMemoryMap() is one of the boot services. +EFI System Table -> Boot Services Table pointer -> function pointer (physical address) of GetMemoryMap. +Preboot Software must be in protected mode and be consistent with EFI environment (e.g. both 32bit or 64bit environment, +if not, processor mode switch must be preceded before calling); +the Page must be disabled, otherwise SetVirtualAddressMap() must be called for memory "fix-up" e.g. converting physical memory to virtual memory; and there are many other calling conventions e.g. interrupt status, eflags, stack space and alignment, for details, please read the UEFI specification. + +After calling this function, the OS bootloader can get the system memory map information for each region with the structure EFI_MEMORY_DESCRIPTOR. In this structure, there are some fields like memory type, memory start address, number of pages (the length), and memory attributes (cacheability attributes, e.g. WT/WB/UC/WC, and protection attributes, e.g. write/execution/read protections). + + + + + + + + + + + + + + + + + + + diff --git a/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT b/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT index 4f9044e..0716335 100644 --- a/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT +++ b/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT @@ -10,7 +10,7 @@ PROTOTYPE EFI_STATUS (EFIAPI *EFI_IMAGE_ENTRY_POINT) ( IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTabel + IN EFI_SYSTEM_TABLE *SystemTable ); PARAMETERS diff --git a/documentation/assembler/general b/documentation/assembler/general new file mode 100644 index 0000000..9619c1b --- /dev/null +++ b/documentation/assembler/general @@ -0,0 +1,46 @@ +REGISTER + +eax general purpose, spezielle Bedeutung bei Arithmetikbefehlen +ebx general purpose +ecx general purpose, spezielle Bedeutung bei Schleifen +edx general purpose +ebp basepointer +esi source for stringoperations +edi destination for stringoperations +esp stackpointer + +SEGMENT REGISTERS + +cs codesegment +ds data segment +ss stacksegment +es beliebiges Segment +fs beliebiges Segment +gs beliebiges Segment + +FURTHER REGISTERS +eip instruction pointer +ef flags + + + +eax, ebx, ecx, edx: + + eax +--------------------------- + | ax + -------------- + ah | al + ------- ------ + + + + +[SECTION .data] +gruss: db 'hello, world' +unglueck: dw 13 +million: dd 1000000 + + +[SECTION .text] + mov ax,[million] diff --git a/documentation/c_tutorial/praeprozessor_direktiven b/documentation/c_tutorial/praeprozessor_direktiven new file mode 100644 index 0000000..ba0c01d --- /dev/null +++ b/documentation/c_tutorial/praeprozessor_direktiven @@ -0,0 +1,90 @@ +#DEFINE +--------- + +zb um parametrisierte Makros zu schreiben: + +#define MAX(x,y) ( (x)<=(y) ?(y) :(x) ) + +---beachte, dass x und y auch in der Funktion in Klammern stehen müssen. +Beim Aufruf braucht man kein Emikolon am Ende, es ist aber auch nicht falsch + +#define TAUSCHE(x,y) { \ + int j; \ + j=x; x=y; y=j; \ + } + +Bedenke, dass der Präprozessor das Makro ersetzt. Zu lange Ausdrücke blähen den Code unnötig auf. Statt dessen sollte man manchmal lieber eine Funktion benutzen. + +Die define-Direktive ist im Übrigen eine rein für die Programmiersprache C gedachte Direktive. Ein reiner C++-Compiler wird define deshalb nicht erkennen und kompilieren. Die meisten Compiler kennen aber sowohl C als auch C++. + +Der Geltungsbereich von symbolischen Konstanten bzw. Makros reicht vom Punkt der Deklaration mit #define bis zur Aufhebung mit #undef. Die Aufhebung mittels #undef ist aber optional. Wird #undef nicht verwendet, reicht der Geltungsbereich bis zum Dateiende. + +#ifndef __STDIO_H + #define __STDIO_H +#endif + +-------------- +#define FERTIG + +int main(void) { + printf("Programmstart!\n"); + +#ifdef FERTIG + #error "Das Programm ist noch nicht fertig gestellt!!\n" Kompilererror. Das Programm lässt sichn nicht übersetzen +#endif + + +BEDINGTE KOMPILIERUNG UND VORDEFINIERTE MAKROS +----------------------------------------------- +__LINE__ Zeilennummer innerhalb der aktuellen Quellcodedatei +__FILE__ Name der aktuellen Quellcodedatei +__DATE__ Datum, wann das Programm compiliert wurde (als Zeichenkette) +__TIME__ Uhrzeit, wann das Programm compiliert wurde (als Zeichenkette) +__STDC__ Liefert eine 1, wenn sich der Compiler nach dem Standard-C richtet. +__STDC_VERSION__ Liefert die Zahl 199409L, wenn sich der Compiler nach dem C95-Standard richtet; die Zahl 199901L, wenn sich der Compiler nach dem C99-Standard richtet. Ansonsten ist dieses Makro nicht definiert. + +Vordefiniertes Makro Compiler +_MSC_VER Microsoft C ab Version 6.0 +_QC Microsoft Quick C ab Version 2.51 +__TURBOC__ Borland Turbo C, Turbo C++ und BC++ +__BORLANDC__ Borland C++ +__ZTC__ Zortech C und C++ +__SC__ Symantec C++ +__WATCOMC__ WATCOM C +__GNUC__ GNU C +__EMX__ Emx GNU C + +Vordefiniertes Makro Betriebssystem +__unix__ UNIX-System +__unix UNIX-System +__MS_DOS__ MS-DOS +__WIN32__ MS Windows ab 95 +__OS2__ OS2 +_Windows Zielsystem MS Windows +__NT__ MS Windows NT +__linux__ Linux-System +__FreeBSD__ FreeBSD +__OpenBSD__ OpenBSD +_SGI_SOURCE SGI-IRIX mit Extension *.sgi +_MIPS_ISA SGI-IRIX +__hpux HP-UX + + +#ifdef symbol +#ifdef ( symbol ) + +#elif symbol +#elif ( symbol ) + +#else + +#endif + +Gute Möglichkeit zum Debuggen: - __func__ gibt den Namen der aktuellen Funktion aus +void eine_funktion(void) { + printf("Name der Funktion: %s\n",__func__); +} + + + +__________________________________________________________________________________________ diff --git a/documentation/c_tutorial/printf_formats b/documentation/c_tutorial/printf_formats new file mode 100644 index 0000000..84cab65 --- /dev/null +++ b/documentation/c_tutorial/printf_formats @@ -0,0 +1,11 @@ +Zeichen Umwandlung +%d oder %i int +%c einzelnes Zeichen +%e oder %E double im Format [-]d.ddd e±dd bzw. [-]d.ddd E±dd +%f double im Format [-]ddd.ddd +%o int als Oktalzahl ausgeben +%p die Adresse eines Zeigers +%s Zeichenkette ausgeben +%u unsigned int +%x oder %X int als Hexadezimalzahl ausgeben +%% Prozentzeichen diff --git a/documentation/c_tutorial/standard_header b/documentation/c_tutorial/standard_header new file mode 100644 index 0000000..ebc4664 --- /dev/null +++ b/documentation/c_tutorial/standard_header @@ -0,0 +1,28 @@ +(C89) +assert.h Fehlersuche und Debugging +ctype.h Zeichentest und Konvertierung +errno.h Fehlercodes +float.h Limits/Eigenschaften für Gleitpunkttypen +limits.h Implementierungskonstanten +locale.h länderspezifische Eigenschaften +math.h mathematische Funktionen +setjmp.h unbedingte Sprünge +signal.h Signale +stdarg.h variable Parameterübergabe +stddef.h Standard Datentyp +stdio.h Standard-I/O +stdlib.h nützliche Funktionen +string.h Zeichenkettenoperationen +time.h Datum und Zeit + +(C95 / C99) +complex.h komplexe Arithmetik (Trigonometrie etc) +Fenv.h Kontrolle de GLeitpunktzahlen-Umgebung +inttypes.h für genauere Integertypen +iso646.h alternative Schreibweisen für logische Operatoren; zur Verwendung von Zeichensätzen im ISO-646-Format +stdbool.h boolesche Datentypen +stdint.h ganzzahlige Typen vorgegebener Breite +tgmath.h typengenerische Mathematik-Funktionen +wchar.h Umwandlung von Strings in Zahlenwerte für den erweiterten Zeichensatz; String- und Speicherbearbeitung für den erweiterten Zeichensatz; Ein- und Ausgabe für den erweiterten Zeichensatz +wctype.h Zeichenuntersuchung für den erweiterten Zeichensatz + diff --git a/documentation/c_tutorial/struct b/documentation/c_tutorial/struct new file mode 100644 index 0000000..e08892b --- /dev/null +++ b/documentation/c_tutorial/struct @@ -0,0 +1,72 @@ +struct index { + int seite; + char titel[30]; +} lib; + +entspricht +struct index lib; + +bzw wenn Strukturname unnötig: +struct { + int seite; + char titel[30]; +} lib; + + +struct index { + int seite; + char titel[30]; +} lib1, lib2, lib3; + +struct index { + int seite; + char titel[30]; +} lib = { 308, "Strukturen" }; + +struct index lib = { 55, "Einführung in C" }; + + +/* struct2.c */ +#include <stdio.h> +#include <stdlib.h> +#define MAX 30 + +struct adres { + char vname[MAX]; + char nname[MAX]; + long PLZ; + char ort[MAX]; + int geburtsjahr; +} adressen; + +/* Funktion zur Ausgabe des Satzes */ +void ausgabe(struct adres x) { + printf("\n\nSie gaben ein:\n\n"); + printf("Vorname.........:%s", x.vname); + printf("Nachname........:%s", x.nname); + printf("Postleitzahl....:%ld\n",x.PLZ); + printf("Ort.............:%s", x.ort); + printf("Geburtsjahr.....:%d\n", x.geburtsjahr); +} + +int main(void) { + printf("Vorname : "); + fgets(adressen.vname, MAX, stdin); + printf("Nachname : "); + fgets(adressen.nname, MAX, stdin); + printf("Postleitzahl : "); + do { + scanf("%5ld",&adressen.PLZ); + } while(getchar()!= '\n'); + printf("Wohnort : "); + fgets(adressen.ort, MAX, stdin); + printf("Geburtsjahr : "); + do { + scanf("%4d",&adressen.geburtsjahr); + } while(getchar()!='\n' ); + + ausgabe(adressen); + return EXIT_SUCCESS; +} + +struct index lib = { 55, "Einführung in C" }; diff --git a/documentation/developer manual x86-64/0_0 general_information b/documentation/developer manual x86-64/0_0 general_information new file mode 100644 index 0000000..1fb2bca --- /dev/null +++ b/documentation/developer manual x86-64/0_0 general_information @@ -0,0 +1,20 @@ +Intel 64 and IA-32 Architectures Software Developer's Manual + +Volume 1: Basic Architecture (Order no 253665) +Volume 2 (A|B|C|D): Instruction Set Reference (253666|253667|326018|334569) + + opcode structure + Chapter + 1 About this Manual + 2 Instruction Format + 3 Instruction Set Reference A-L + 4 Instruction Set Reference M-U + 5 Instruction Set Reference V-Z + 6 Safer Mode Extensions Reference + Appendix + A Opcode Map + B Instructions Format and Encodings + C Intel C/C++ Compiler Intrinsics and Functional Equivalents + +Volume 3 (A|B|C|D): System Programming Guide (253668|253669|326019|332831) + operating system support environment. Target OS and BIOS designers. + 3B: programming environment for classes of software that host os. diff --git a/documentation/developer manual x86-64/2_1.3 Notational Conventions b/documentation/developer manual x86-64/2_1.3 Notational Conventions new file mode 100644 index 0000000..5ace83e --- /dev/null +++ b/documentation/developer manual x86-64/2_1.3 Notational Conventions @@ -0,0 +1,92 @@ +1.3.1 Bits and Bytes +--------------------- + Little Endian - bytes of a word are numbered starting from least significant byte + Data Structure + Highest_addr Byte_Offest + 28 + 24 + 20 + 16 + 12 + 8 + 4 + Lowest_addr 0 + Byte3 Byte2 Byte1 Byte0 + Bit_Offset 0 - 7 8 - 15 16 - 23 24 - 31 + +1.3.2 Reserved Bits +-------------------- + Avoid any software dependence upon the state of reserved bits. They should be regarded as unpredictable. + +1.3.3 Instruction Operands +--------------------------- + When symbolically represented: label: mnemonic argument1, argument2, argument3 + label: identifier + mnemonic: reserved name for a class if instruction opcodes + arguments: optional. Either literals or identifiers for data items. + identifiers: either reserved names of registers + or assigned to data items + if two: right - source, left - destination + !! Some assembly languages put the source and destination in reverse order !! + +1.3.4 Hexadecimal and Binary Numbers +------------------------------------- + Base 16: string of hexadecimal digits followed by the character H (eg F82EH) + Base 2: string of 1s and 0s, sometimes followed by B + +1.3.5 Segmented Addressing +--------------------------- + Processor uses byte addressing -> memory organized and accessed as a sequence of bytes. + address space: range of memory that can be addressed. + + Segmented addressing: program may have many independet address spaces (segments). + eg keep code (instructions) and stack in separate segments. + Specify a byte address within a segment: + Segment-register:Byte-address + + examples: + DS:FF79H DS: segment pointed by the DS register, FF79H: address + CS:EIP CS: code segment, EIP: address of instruction + + +1.3.6 Exceptions +----------------- + example: + #PF(fault code) PF: Page-fault exception, reports error code + #GP(0) GP: general-protection exception, error code = 0 + +1.3.7 A new Syntax for CPUID, CR, and MSR Values +------------------------------------------------- +-- CPUID: optain feature flags, status and system information + + CPUID.01H:ECX.SSE[bit 25] = 1 + | | |_ Value (or range) of output + | |_ Output register and feature flag + | or field name with bit pos + |__ Input value for EAX register + +-- CR: check control register bits + + CR4.OSFXSR[bit 9] = 1 + | | |_ Value (or range) of output + | |_ Feature flag or field name with bit position(s) + |_ Example CR name + +-- MSR: read model-specific registers + + IA32_MISC_ENABLE.ENABLEOPCODE[bit 2] = 1 + | | |_ Value (or range) of output + | |_ Feature flag or field name with bit position(s) + |_ Example MSR name + + + + + + + + + + + + |