Fix multiple bugs throughout the codebase

This commit is contained in:
Alex 2023-04-21 17:25:00 +03:00
parent baacbbdbd7
commit e5b83f6b72
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
4 changed files with 15 additions and 14 deletions

View File

@ -17,8 +17,6 @@ void PutCharToKernelConsole(char c)
int main(int argc, char *argv[], char *envp[])
{
for (int i = 0; i < 14; i++)
PutCharToKernelConsole("\nHello World!\n"[i]);
print("%p %p %p\n", (void *)(uint64_t)&argc, (void *)&argv, (void *)&envp);
print("I have %d arguments\n", argc);
for (int i = 0; i < argc; i++)
@ -49,7 +47,7 @@ int main(int argc, char *argv[], char *envp[])
}
char buf[1024];
uint64_t read = FileRead(test, (uint8_t *)buf, 1024);
uint64_t read = FileRead(test, 0, (uint8_t *)buf, 1024);
print("Read %ld bytes from file\n", read);
print("File contents: %s\n", buf);
FileClose(test);

View File

@ -126,18 +126,21 @@ static inline void PutCharToKernelConsole(char c)
: "rcx", "r11", "memory");
}
void Print(char *String)
void Print__(char *String)
{
for (short i = 0; String[i] != '\0'; i++)
PutCharToKernelConsole(String[i]);
}
void PrintNL(char *String)
void PrintNL__(char *String)
{
Print(String);
Print("\n");
Print__(String);
Print__("\n");
}
#define Print(x) Print__(x)
#define PrintNL(x) PrintNL__(x)
void *memcpy(void *dest, const void *src, size_t n)
{
uint8_t *d = dest;
@ -338,7 +341,7 @@ void (*ELF_LAZY_RESOLVE_MAIN(struct LibAddressCollection *Info, long RelIndex))(
// PrintNL("R_X86_64_NONE");
if (*GOTEntry == 0)
{
PrintNL("GOTEntry is 0");
// PrintNL("GOTEntry is 0");
break;
}
Lock = 0;
@ -473,7 +476,7 @@ int ld_load(int argc, char *argv[], char *envp[])
break;
uintptr_t lib_addr = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0);
uintptr_t lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0);
uintptr_t lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_MEMORY_IMAGE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0);
if (lib_addr == 0 || lib_mm_image == 0)
{
enum SyscallsErrorCodes ret = KernelCTL(KCTL_REGISTER_ELF_LIB, (uint64_t)IPCBuffer->Libraries[i].Name, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0);
@ -483,7 +486,7 @@ int ld_load(int argc, char *argv[], char *envp[])
return -0x11B;
}
lib_addr = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0);
lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0);
lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_MEMORY_IMAGE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0);
}
if (LibsForLazyResolver->Next == NULL)

View File

@ -24,8 +24,8 @@ enum FileFlags
File *FileOpen(const char *Path, uint64_t Flags);
void FileClose(File *File);
uint64_t FileRead(File *File, uint8_t *Buffer, uint64_t Size);
uint64_t FileWrite(File *File, uint8_t *Buffer, uint64_t Size);
uint64_t FileRead(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size);
uint64_t FileWrite(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size);
uint64_t FileSeek(File *File, uint64_t Offset, uint64_t Whence);
uint64_t FileStatus(File *File);

View File

@ -24,12 +24,12 @@ void FileClose(File *File)
KrnlFreePages((uintptr_t)File, sizeof(File) / __FILE_GetPageSize() + 1);
}
uint64_t FileRead(File *File, uint8_t *Buffer, uint64_t Size)
uint64_t FileRead(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size)
{
return syscall3(_FileRead, (uint64_t)File->KernelPrivate, (uint64_t)Buffer, Size);
}
uint64_t FileWrite(File *File, uint8_t *Buffer, uint64_t Size)
uint64_t FileWrite(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size)
{
return syscall3(_FileWrite, (uint64_t)File->KernelPrivate, (uint64_t)Buffer, Size);
}