Refactored UNIX...

This commit is contained in:
xolatile
2024-07-18 17:25:38 -04:00
parent 040b89d92d
commit 95e73027ee
3 changed files with 46 additions and 54 deletions

View File

@ -4,6 +4,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <string.h>
#include "eaxhla.tab.h" #include "eaxhla.tab.h"

View File

@ -1,69 +1,66 @@
#include "assembler.h" #include "assembler.h"
#include "unix.h" #include "unix.h"
uint8_t elf_main_header_byte [ELF_MAIN_HEADER_SIZE] = { #include <string.h>
unsigned char elf_main_header_byte[ELF_MAIN_HEADER_SIZE] = {
0X7F, 0X45, 0X4C, 0X46, 0X02, 0X01, 0X01, 0X03, 0X7F, 0X45, 0X4C, 0X46, 0X02, 0X01, 0X01, 0X03,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X02, 0X00, 0X3E, 0X00, 0X01, 0X00, 0X00, 0X00, 0X02, 0X00, 0X3E, 0X00, 0X01, 0X00, 0X00, 0X00,
0XB0, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, // entry_point 0XB0, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00,
0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X38, 0X00, 0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X38, 0X00,
0X02, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00
}; };
uint8_t elf_text_sector_byte [ELF_TEXT_SECTOR_SIZE] = { unsigned char elf_text_sector_byte[ELF_TEXT_SECTOR_SIZE] = {
0X01, 0X00, 0X00, 0X00, 0X05, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X00, 0X05, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // HDR + TXT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // HDR + TXT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00
}; };
uint8_t elf_data_sector_byte [ELF_DATA_SECTOR_SIZE] = { unsigned char elf_data_sector_byte[ELF_DATA_SECTOR_SIZE] = {
0X01, 0X00, 0X00, 0X00, 0X06, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X00, 0X06, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // HDR + TXT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X10, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, // +++ ^ 0X00, 0X10, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X10, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, // +++ ^ 0X00, 0X10, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // DAT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // DAT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
0X00, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00
}; };
void elf_main_header (uint8_t has_program, void elf_main_header(unsigned char has_program,
uint8_t for_linux, unsigned char for_linux,
uint8_t for_x86_64) { unsigned char for_x86_64) {
// unsigned int enter = text_entry_point + 0x4000b0u;
uint32_t enter = text_entry_point + 0x4000b0u;
elf_main_header_byte [16] = (has_program) ? 0x02 : 0x03; // library elf_main_header_byte[16] = (has_program) ? 0x02 : 0x03;
elf_main_header_byte [ 7] = (for_linux) ? 0x03 : 0x00; // system v elf_main_header_byte[ 7] = (for_linux) ? 0x03 : 0x00;
elf_main_header_byte [18] = (for_x86_64) ? 0x3e : 0x00; elf_main_header_byte[18] = (for_x86_64) ? 0x3e : 0x00;
memcpy (& elf_main_header_byte [24], & enter, sizeof (enter)); memcpy (& elf_main_header_byte[24], & enter, sizeof(enter));
} }
void elf_text_sector (uint64_t text_size, void elf_text_sector(unsigned long text_size, unsigned long data_size) {
uint64_t data_size) { unsigned long text = ELF_HEADER_SIZE + text_size - data_size;
//
uint64_t text = ELF_HEADER_SIZE + text_size - data_size;
memcpy (& elf_text_sector_byte [32], & text, sizeof (text)); memcpy (& elf_text_sector_byte[32], & text, sizeof(text));
memcpy (& elf_text_sector_byte [40], & text, sizeof (text)); memcpy (& elf_text_sector_byte[40], & text, sizeof(text));
} }
void elf_data_sector (uint64_t text_size, void elf_data_sector(unsigned long text_size, unsigned long data_size) {
uint64_t data_size) { unsigned long data = data_size;
// unsigned long core = ELF_HEADER_SIZE + text_size - data_size;
uint64_t data = data_size; unsigned long move = 0x401000 + core;
uint64_t core = ELF_HEADER_SIZE + text_size - data_size;
uint64_t move = 0x401000 + core;
memcpy (& elf_data_sector_byte [ 8], & core, sizeof (core)); memcpy (& elf_data_sector_byte[ 8], & core, sizeof(core));
memcpy (& elf_data_sector_byte [16], & move, sizeof (move)); memcpy (& elf_data_sector_byte[16], & move, sizeof(move));
memcpy (& elf_data_sector_byte [24], & move, sizeof (move)); memcpy (& elf_data_sector_byte[24], & move, sizeof(move));
memcpy (& elf_data_sector_byte [32], & data, sizeof (data)); memcpy (& elf_data_sector_byte[32], & data, sizeof(data));
memcpy (& elf_data_sector_byte [40], & data, sizeof (data)); memcpy (& elf_data_sector_byte[40], & data, sizeof(data));
} }

View File

@ -1,8 +1,5 @@
#ifndef UNIX_H #ifndef UNIX_H
#include <stdint.h>
#include <string.h>
#define ELF_MAIN_HEADER_SIZE (0x40) #define ELF_MAIN_HEADER_SIZE (0x40)
#define ELF_TEXT_SECTOR_SIZE (0x38) #define ELF_TEXT_SECTOR_SIZE (0x38)
#define ELF_DATA_SECTOR_SIZE (0x38) #define ELF_DATA_SECTOR_SIZE (0x38)
@ -11,19 +8,16 @@
+ ELF_TEXT_SECTOR_SIZE \ + ELF_TEXT_SECTOR_SIZE \
+ ELF_DATA_SECTOR_SIZE) + ELF_DATA_SECTOR_SIZE)
extern uint8_t elf_main_header_byte [ELF_MAIN_HEADER_SIZE]; extern unsigned char elf_main_header_byte[ELF_MAIN_HEADER_SIZE];
extern uint8_t elf_text_sector_byte [ELF_TEXT_SECTOR_SIZE]; extern unsigned char elf_text_sector_byte[ELF_TEXT_SECTOR_SIZE];
extern uint8_t elf_data_sector_byte [ELF_DATA_SECTOR_SIZE]; extern unsigned char elf_data_sector_byte[ELF_DATA_SECTOR_SIZE];
extern void elf_main_header (uint8_t has_program, extern void elf_main_header(unsigned char has_program,
uint8_t for_linux, unsigned char for_linux,
uint8_t for_x86_64); unsigned char for_x86_64);
extern void elf_text_sector (uint64_t text_size, extern void elf_text_sector(unsigned long text_size, unsigned long data_size);
uint64_t data_size); extern void elf_data_sector(unsigned long text_size, unsigned long data_size);
extern void elf_data_sector (uint64_t text_size,
uint64_t data_size);
#define UNIX_H #define UNIX_H
#endif #endif