128 lines
3.2 KiB
C
128 lines
3.2 KiB
C
|
// pico8-fill-in.c // 16.11.2020 04:02
|
||
|
|
||
|
#include <stddef.h>
|
||
|
#include <stdio.h>
|
||
|
#include <setjmp.h>
|
||
|
#include <string.h>
|
||
|
#include <stdarg.h>
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---strcpy-chk-1.html
|
||
|
// TODO: actually check for overflows
|
||
|
char * __strcpy_chk(char * dest, const char * src, size_t destlen) {
|
||
|
char *d = dest;
|
||
|
|
||
|
//printf("FUCK STRCPY %s :::: %s\n", src, dest);
|
||
|
|
||
|
while (*src != '\0') {
|
||
|
*d++ = *src++;
|
||
|
}
|
||
|
*d++ = *src++;
|
||
|
//printf("STRCPY FINAL %s\n", dest);
|
||
|
|
||
|
return dest;
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---stpcpy-chk-1.html
|
||
|
char * __stpcpy_chk(char * dest, const char * src, size_t destlen) {
|
||
|
|
||
|
printf("FUCK STPCPY %s :::: %s\n", src, dest);
|
||
|
|
||
|
return stpcpy(dest, src);
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---strncpy-chk-1.html
|
||
|
char * __strncpy_chk(char * dest, const char * src, size_t n, size_t dest_1len) {
|
||
|
|
||
|
printf("FUCK STRNCPY %s :::: %s\n", src, dest);
|
||
|
|
||
|
return strncpy(dest, src, n);
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---strcat-chk-1.html
|
||
|
// TODO: There's some good info being dumped here
|
||
|
char * __strcat_chk(char * dest, const char * src, size_t destlen) {
|
||
|
//printf("!!! strcat %s :::: %s\n", src, dest);
|
||
|
|
||
|
char *res = strncat(dest, src, destlen);
|
||
|
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---memcpy-chk-1.html
|
||
|
void * __memcpy_chk(void * dest, const void * src, size_t len, size_t destlen) {
|
||
|
|
||
|
//puts("FUCK MEMCPY \n");
|
||
|
|
||
|
return memcpy(dest, src, len);
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---memset-chk-1.html
|
||
|
void * __memset_chk(void * dest, int c, size_t len, size_t destlen) {
|
||
|
|
||
|
puts("FUCK MEMSET\n");
|
||
|
|
||
|
return memset(dest, c, len);
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---printf-chk-1.html
|
||
|
int __printf_chk(int flag, const char * format, ...) {
|
||
|
va_list args;
|
||
|
|
||
|
//printf("\nPRINTF\n");
|
||
|
|
||
|
va_start(args, format);
|
||
|
int ret = vprintf(format, args);
|
||
|
va_end(args);
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---fprintf-chk-1.htm
|
||
|
int __fprintf_chk(FILE * stream, int flag, const char * format, ...) {
|
||
|
va_list args;
|
||
|
|
||
|
//printf("\nFPRINTF\n");
|
||
|
|
||
|
va_start(args, format);
|
||
|
int ret = vfprintf(stream, format, args);
|
||
|
va_end(args);
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
// https://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libc---sprintf-chk-1.html
|
||
|
// TODO: some intresting info
|
||
|
int __sprintf_chk(char * str, int flag, size_t strlen, const char * format, ...) {
|
||
|
va_list args;
|
||
|
|
||
|
//printf("!!!ORIGINAL %s\n", str);
|
||
|
|
||
|
va_start(args, format);
|
||
|
// int ret = vsnprintf(str, strlen, format, args);
|
||
|
// TOOD: Look more into the nature of this function getting passed a -1
|
||
|
// strlen and how else it might be mitigated ?
|
||
|
int ret = vsprintf(str, format, args);
|
||
|
va_end(args);
|
||
|
|
||
|
//printf("!!! sprintf !!!ADR:%p !!!STRLEN:%i !!!RET::%i !!!FORMAT::%s\n!!!OUTPUT::%s\n", str, strlen, ret, format, str);
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
void __longjmp_chk () {
|
||
|
// puts("FUCK LONG JMP\n");
|
||
|
asm("pop %rbp");
|
||
|
goto *(&longjmp);
|
||
|
}
|
||
|
|
||
|
void __fread_chk () {
|
||
|
// asm ("pop %rbp");
|
||
|
puts("FUCK FREAD\n");
|
||
|
// stub
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|