Refactored UNIX...
This commit is contained in:
@ -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"
|
||||||
|
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user