Added initial UNIX stuff, unfinished...
This commit is contained in:
@ -53,6 +53,7 @@ typedef enum {
|
|||||||
FNOP, FXAM, FABS, FSCALE,
|
FNOP, FXAM, FABS, FSCALE,
|
||||||
FSIN, FCOS, FSQRT, FCHS,
|
FSIN, FCOS, FSQRT, FCHS,
|
||||||
FXCH, FREM, FLDPI, FLDZ,
|
FXCH, FREM, FLDPI, FLDZ,
|
||||||
|
DECLARE,
|
||||||
} operation_index;
|
} operation_index;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
39
source/unix.c
Normal file
39
source/unix.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "unix.h"
|
||||||
|
|
||||||
|
static const uint16_t main_header_size = 0x40;
|
||||||
|
static const uint16_t text_sector_size = 0x38;
|
||||||
|
static const uint16_t data_sector_size = 0x38;
|
||||||
|
|
||||||
|
static const uint16_t full_header_size = main_header_size
|
||||||
|
+ text_sector_size
|
||||||
|
+ data_sector_size; // 0xb0
|
||||||
|
|
||||||
|
static const uint32_t softcore = 0x1000; // I DON'T KNOW WHAT IS THIS...
|
||||||
|
static const uint32_t hardcore = 0x400000; // I DON'T KNOW WHAT IS THIS...
|
||||||
|
|
||||||
|
uint8_t header_bytes [64] = {
|
||||||
|
0X7F, 0X45, 0X4C, 0X46, 0X02, 0X01, 0X01, 0X03,
|
||||||
|
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
|
||||||
|
0X02, 0X00, 0X3E, 0X00, 0X01, 0X00, 0X00, 0X00,
|
||||||
|
0XB0, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, // entry_point
|
||||||
|
0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
|
||||||
|
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
|
||||||
|
0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X38, 0X00,
|
||||||
|
0X02, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00,
|
||||||
|
};
|
||||||
|
|
||||||
|
void header (uint8_t has_program,
|
||||||
|
uint8_t for_linux,
|
||||||
|
uint8_t for_x86_64,
|
||||||
|
uint64_t entry_point) {
|
||||||
|
/* */
|
||||||
|
uint64_t enter = entry_point; // TEST
|
||||||
|
|
||||||
|
header_bytes [16] = (has_program) ? 0x02 : 0x03; // else linkable
|
||||||
|
header_bytes [ 7] = (for_linux) ? 0x03 : 0x00; // else system v
|
||||||
|
header_bytes [18] = (for_x86_64) ? 0x3e : 0x00; // else ?
|
||||||
|
|
||||||
|
if (entry_point != 0) {
|
||||||
|
memcpy (& header_bytes [24], & enter, 8);
|
||||||
|
}
|
||||||
|
}
|
9
source/unix.h
Normal file
9
source/unix.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
extern uint8_t elf_header_bytes [64];
|
||||||
|
|
||||||
|
extern void header (uint8_t has_program,
|
||||||
|
uint8_t for_linux,
|
||||||
|
uint8_t for_x86_64,
|
||||||
|
uint64_t entry_point);
|
166
tool/heyo.asm
166
tool/heyo.asm
@ -4,16 +4,182 @@ segment readable executable
|
|||||||
|
|
||||||
entry $
|
entry $
|
||||||
|
|
||||||
|
fff:
|
||||||
|
nop
|
||||||
|
|
||||||
mov eax, 1
|
mov eax, 1
|
||||||
|
nop
|
||||||
mov edi, 1
|
mov edi, 1
|
||||||
|
nop
|
||||||
mov esi, heyo
|
mov esi, heyo
|
||||||
|
nop
|
||||||
mov edx, 12
|
mov edx, 12
|
||||||
|
nop
|
||||||
syscall
|
syscall
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
mov eax, 1
|
||||||
|
nop
|
||||||
|
mov edi, 1
|
||||||
|
nop
|
||||||
|
mov esi, cyaa
|
||||||
|
nop
|
||||||
|
mov edx, 12
|
||||||
|
nop
|
||||||
|
syscall
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
mov eax, 1
|
||||||
|
nop
|
||||||
|
mov edi, 1
|
||||||
|
nop
|
||||||
|
mov esi, neko
|
||||||
|
nop
|
||||||
|
mov edx, 12
|
||||||
|
nop
|
||||||
|
syscall
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
mov rax, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov rcx, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov rdx, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov rbx, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov rsp, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov rbp, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov rsi, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov rdi, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r8, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r9, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r10, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r11, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r12, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r13, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r14, 1122334455667788h
|
||||||
|
nop
|
||||||
|
mov r15, 1122334455667788h
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
mov eax, 60
|
mov eax, 60
|
||||||
|
nop
|
||||||
mov edi, 0
|
mov edi, 0
|
||||||
|
nop
|
||||||
syscall
|
syscall
|
||||||
|
nop
|
||||||
|
jmp fff
|
||||||
|
nop
|
||||||
|
jmp nnn
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nnn:
|
||||||
|
|
||||||
segment readable writable
|
segment readable writable
|
||||||
|
|
||||||
heyo: db "heyo world!", 10
|
heyo: db "heyo world!", 10
|
||||||
|
cyaa: db "cyaa world!", 10
|
||||||
|
neko: db "neko world!", 10
|
||||||
|
|
||||||
|
;~176 / 00B0 ; header
|
||||||
|
;~504 / 01F8 ; executable
|
||||||
|
;~292 / 0124 ; readable
|
||||||
|
;~36 / 0024 ; writable
|
||||||
|
|
||||||
|
;~328 / 0148 ; executable - header
|
||||||
|
|
||||||
|
;~7F_45_4C_46_02_01_01_03_
|
||||||
|
;~00_00_00_00_00_00_00_00_ ; 0
|
||||||
|
;~02_00_3E_00_01_00_00_00_
|
||||||
|
;~B0_00_40_00_00_00_00_00_ ; header + hardcore
|
||||||
|
;~40_00_00_00_00_00_00_00_
|
||||||
|
;~00_00_00_00_00_00_00_00_ ; 0
|
||||||
|
;~00_00_00_00_40_00_38_00_
|
||||||
|
;~02_00_40_00_00_00_00_00_
|
||||||
|
|
||||||
|
;~01_00_00_00_05_00_00_00_ ; text
|
||||||
|
;~00_00_00_00_00_00_00_00_ ; 0
|
||||||
|
;~00_00_40_00_00_00_00_00_ ; hardcore
|
||||||
|
;~00_00_40_00_00_00_00_00_ ; hardcore
|
||||||
|
;~D4_01_00_00_00_00_00_00_ ; executable - writable
|
||||||
|
;~D4_01_00_00_00_00_00_00_ ; executable - writable
|
||||||
|
;~00_10_00_00_00_00_00_00_ ; softcore
|
||||||
|
|
||||||
|
;~01_00_00_00_06_00_00_00_ ; data
|
||||||
|
;~D4_01_00_00_00_00_00_00_ ; executable - writable
|
||||||
|
;~D4_11_40_00_00_00_00_00_ ; hardcore + softcore + executable - writable
|
||||||
|
;~D4_11_40_00_00_00_00_00_ ; hardcore + softcore + executable - writable
|
||||||
|
;~24_00_00_00_00_00_00_00_ ; writable
|
||||||
|
;~24_00_00_00_00_00_00_00_ ; writable
|
||||||
|
;~00_10_00_00_00_00_00_00_ ; softcore
|
||||||
|
|
||||||
|
;~90_B8_01_00_00_00_
|
||||||
|
;~90_BF_01_00_00_00_
|
||||||
|
;~90_BE_D4_11_40_00_
|
||||||
|
;~90_BA_0C_00_00_00_
|
||||||
|
;~90_0F_05_
|
||||||
|
;~90_
|
||||||
|
;~90_
|
||||||
|
;~90_B8_01_00_00_00_
|
||||||
|
;~90_BF_01_00_00_00_
|
||||||
|
;~90_BE_E0_11_40_00_
|
||||||
|
;~90_BA_0C_00_00_00_
|
||||||
|
;~90_0F_05_
|
||||||
|
;~90_
|
||||||
|
;~90_
|
||||||
|
;~90_B8_01_00_00_00_
|
||||||
|
;~90_BF_01_00_00_00_
|
||||||
|
;~90_BE_EC_11_40_00_
|
||||||
|
;~90_BA_0C_00_00_00_
|
||||||
|
;~90_0F_05_
|
||||||
|
;~90_
|
||||||
|
;~90_
|
||||||
|
;~90_48_B8_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_48_B9_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_48_BA_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_48_BB_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_48_BC_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_48_BD_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_48_BE_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_48_BF_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_B8_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_B9_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_BA_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_BB_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_BC_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_BD_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_BE_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_49_BF_88_77_66_55_44_33_22_11_
|
||||||
|
;~90_
|
||||||
|
;~90_
|
||||||
|
;~90_B8_3C_00_00_00_
|
||||||
|
;~90_BF_00_00_00_00_
|
||||||
|
;~90_0F_05_
|
||||||
|
;~90_E9_E2_FE_FF_FF_
|
||||||
|
;~90_EB_03_
|
||||||
|
;~90_
|
||||||
|
;~90_
|
||||||
|
;~90_
|
||||||
|
;~68_65_79_6F_20_77_6F_72_6C_64_21_0A_
|
||||||
|
;~63_79_61_61_20_77_6F_72_6C_64_21_0A_
|
||||||
|
;~6E_65_6B_6F_20_77_6F_72_6C_64_21_0A_
|
||||||
|
Reference in New Issue
Block a user