forked from KolibriOS/kolibrios
libc.obj:
- Update crt0 - Removed autoloader generation(use libc.def). git-svn-id: svn://kolibrios.org@9666 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
a971f7e19b
commit
36918e3217
@ -1,24 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
AR=ar
|
|
||||||
FASM=fasm
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cd $1
|
|
||||||
|
|
||||||
echo "Compile ASM files..."
|
|
||||||
|
|
||||||
rm -f *.o
|
|
||||||
cp __lib__.asm.bak __lib__.asm
|
|
||||||
|
|
||||||
for asm_file in $(find *.asm)
|
|
||||||
do
|
|
||||||
$FASM $asm_file >> /dev/null
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Create libc.obj.a library..."
|
|
||||||
ar -rsc ../../bin/lib/libc.obj.a *.o
|
|
||||||
rm -f *.asm *.o
|
|
||||||
echo "Done!"
|
|
@ -1,57 +0,0 @@
|
|||||||
// export_table_gen
|
|
||||||
// Copyright (C) maxcodehack and turbocat2001, 2021
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
if (argc != 3) {
|
|
||||||
printf("Usage: %s <symbols.txt> <exports.c>\n", argv[0]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
FILE *input, *output;
|
|
||||||
if ((input = fopen(argv[1], "r")) == NULL)
|
|
||||||
{
|
|
||||||
printf("error: file \"%s\" not found\n", argv[1]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
char buf[10000];
|
|
||||||
// Head
|
|
||||||
strcpy(buf, \
|
|
||||||
"#include <stdio.h>\n" \
|
|
||||||
"#include <string.h>\n" \
|
|
||||||
"#include <stdlib.h>\n" \
|
|
||||||
"#include <time.h>\n" \
|
|
||||||
"#include <sys/dirent.h>\n" \
|
|
||||||
"#include <sys/ksys.h>\n\n" \
|
|
||||||
"#include <math.h>\n\n" \
|
|
||||||
"#include <setjmp.h>\n\n" \
|
|
||||||
"ksys_dll_t EXPORTS[] = {\n");
|
|
||||||
|
|
||||||
// Generate
|
|
||||||
char symbol[256];
|
|
||||||
while(fscanf(input, "%s", symbol) != EOF) {
|
|
||||||
if(symbol[0]!='!'){
|
|
||||||
char temp[256];
|
|
||||||
sprintf(temp, "{\"%s\", &%s},\n", symbol, symbol);
|
|
||||||
strcat(buf, temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strcat(buf, "NULL,\n};");
|
|
||||||
fclose(input);
|
|
||||||
|
|
||||||
// Output generated
|
|
||||||
output = fopen(argv[2], "w");
|
|
||||||
if (output == NULL)
|
|
||||||
{
|
|
||||||
printf("Unable to write to file: '%s'!\n", argv[2]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fputs(buf, output);
|
|
||||||
fclose(output);
|
|
||||||
|
|
||||||
printf("Done, check %s!\n", argv[2]);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
if(argc!=3){
|
|
||||||
printf("Usage: LoadGen <symbols.txt> <loader_dir>\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
argv[2][strlen(argv[1])-2]='\0';
|
|
||||||
FILE* symbols_txt = fopen(argv[1], "r");
|
|
||||||
if(!symbols_txt){
|
|
||||||
fprintf(stderr, "File '%s' not found!\n", argv[1]);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
char line[256];
|
|
||||||
while(fgets(line, 256, symbols_txt)) {
|
|
||||||
if(line[0]!='!'){
|
|
||||||
if(line[strlen(line)-1]=='\n'){
|
|
||||||
line[strlen(line)-1]='\0';
|
|
||||||
}
|
|
||||||
char asm_name[PATH_MAX];
|
|
||||||
sprintf(asm_name, "%s/%s.asm", argv[2], line);
|
|
||||||
FILE *out = fopen(asm_name, "wb");
|
|
||||||
if(!out){
|
|
||||||
fprintf(stderr, "Error! File '%s' not created!\n", asm_name);
|
|
||||||
return -1;
|
|
||||||
}else{
|
|
||||||
printf("File '%s' created successfully!\n", asm_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(out, "format ELF\n");
|
|
||||||
fprintf(out, "include \"__lib__.inc\"\n");
|
|
||||||
fprintf(out, "fun equ __func@%s\n", line);
|
|
||||||
fprintf(out, "fun_str equ '%s'\n", line);
|
|
||||||
fprintf(out, "section '.text'\n");
|
|
||||||
fprintf(out, "fun_name db fun_str, 0\n");
|
|
||||||
fprintf(out, "section '.data'\n");
|
|
||||||
fprintf(out, "extrn lib_name\n");
|
|
||||||
fprintf(out, "public fun as fun_str\n");
|
|
||||||
fprintf(out, "fun dd fun_name\n");
|
|
||||||
fprintf(out, "lib dd lib_name\n");
|
|
||||||
|
|
||||||
fclose(out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
all:
|
|
||||||
$(CC) ExportGen.c -o ../ExportGen
|
|
||||||
$(CC) LoaderGen.c -o ../LoaderGen
|
|
@ -1,28 +0,0 @@
|
|||||||
ifndef GCC
|
|
||||||
GCC=kos32-gcc
|
|
||||||
endif
|
|
||||||
|
|
||||||
KPACK=kpack
|
|
||||||
FASM=fasm
|
|
||||||
|
|
||||||
CFLAGS = -c -nostdinc -I../include -DGNUC -D_BUILD_LIBC -fno-common -Os -fno-builtin -fno-leading-underscore -fno-pie
|
|
||||||
|
|
||||||
SRC=libc.c
|
|
||||||
LIB=libc.obj
|
|
||||||
|
|
||||||
all:
|
|
||||||
$(MAKE) -C ../linuxtools/src
|
|
||||||
mkdir -p exports
|
|
||||||
../linuxtools/ExportGen symbols.txt exports/exports.c
|
|
||||||
$(FASM) crt/crt0.asm ../../bin/lib/crt0.o
|
|
||||||
$(GCC) $(CFLAGS) $(SRC) -o $(LIB)
|
|
||||||
$(KPACK) $(LIB)
|
|
||||||
../linuxtools/LoaderGen symbols.txt ../loader
|
|
||||||
../linuxtools/LoaderBuild ../loader
|
|
||||||
$(MAKE) -C libtcc
|
|
||||||
rm -rf exports
|
|
||||||
install:
|
|
||||||
cp -f libc.obj ~/.kex/root/RD/1/LIB
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm ../../bin/lib/libc.obj.a ../../bin/lib/libtcc.a
|
|
@ -2,12 +2,7 @@ if tup.getconfig("NO_GCC") ~= "" then return end
|
|||||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../../../" or tup.getconfig("HELPERDIR")
|
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../../../" or tup.getconfig("HELPERDIR")
|
||||||
tup.include(HELPERDIR .. "/use_gcc.lua")
|
tup.include(HELPERDIR .. "/use_gcc.lua")
|
||||||
|
|
||||||
CFLAGS = " -c -w -nostdinc -DGNUC -D_BUILD_LIBC -Os -fno-common -fno-builtin -fno-leading-underscore -fno-pie"
|
CFLAGS = " -c -nostdinc -DGNUC -D_BUILD_LIBC -Os -fno-common -fno-builtin -fno-leading-underscore -fno-pie"
|
||||||
INCLUDES = " -I../include"
|
INCLUDES = " -I../include"
|
||||||
|
|
||||||
tup.rule("../linuxtools/src/ExportGen.c", "gcc %f -o %o" , "../linuxtools/ExportGen")
|
tup.rule("libc.c", "kos32-gcc" .. CFLAGS .. INCLUDES .. " -o %o %f " .. tup.getconfig("KPACK_CMD"), "libc.obj")
|
||||||
tup.rule("../linuxtools/src/LoaderGen.c", "gcc %f -o %o" , "../linuxtools/LoaderGen")
|
|
||||||
|
|
||||||
tup.rule({"symbols.txt",extra_inputs = {"../linuxtools/ExportGen"}}, "../linuxtools/ExportGen %f %o" , "exports/exports.c")
|
|
||||||
|
|
||||||
tup.rule({"libc.c",extra_inputs = {"exports/exports.c"}} , "kos32-gcc" .. CFLAGS .. INCLUDES .. " -o %o %f " .. tup.getconfig("KPACK_CMD"), "libc.obj")
|
|
||||||
|
@ -1,39 +1,36 @@
|
|||||||
|
;
|
||||||
|
; 2021, Edited by Coldy
|
||||||
|
;
|
||||||
|
; This module same as original crt0.asm, but cut:
|
||||||
|
; 1. virtual header block (hparams change to __app_params, hpath change to __app_path)
|
||||||
|
; 2. init heap of memory - not needed because 68.18 (68.19) init heap implicitly
|
||||||
|
; (it is does dll.obj)
|
||||||
|
; 3. loader (he lives in dll.obj)
|
||||||
|
;
|
||||||
|
|
||||||
format ELF
|
format ELF
|
||||||
section '.text' executable
|
section '.text' executable
|
||||||
public start
|
public start
|
||||||
public start as '_start'
|
public start as '_start'
|
||||||
;extrn mf_init
|
|
||||||
extrn main
|
|
||||||
include '../../../../../proc32.inc'
|
|
||||||
include '../../../../../macros.inc'
|
|
||||||
include '../../../../../dll.inc'
|
|
||||||
;include '../../../../../debug.inc'
|
|
||||||
|
|
||||||
;start_:
|
extrn main
|
||||||
virtual at 0
|
|
||||||
db 'MENUET01' ; 1. Magic number (8 bytes)
|
include '../../../../../../proc32.inc'
|
||||||
dd 0x01 ; 2. Version of executable file
|
include '../../../../../../macros.inc'
|
||||||
dd start ; 3. Start address
|
__DEBUG__ = 0
|
||||||
imgsz dd 0x0 ; 4. Size of image
|
|
||||||
dd 0x100000 ; 5. Size of needed memory
|
__app_params equ 0x1C ; Pointer to program arguments
|
||||||
dd 0x100000 ; 6. Pointer to stack
|
;__app_path equ 0x20 ; Pointer to program path
|
||||||
hparams dd 0x0 ; 7. Pointer to program arguments
|
|
||||||
hpath dd 0x0 ; 8. Pointer to program path
|
|
||||||
end virtual
|
|
||||||
|
|
||||||
start:
|
start:
|
||||||
;DEBUGF 'Start programm\n'
|
;DEBUGF 'Start programm\n'
|
||||||
;init heap of memory
|
|
||||||
mov eax,68
|
|
||||||
mov ebx,11
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov [argc], 0
|
mov [argc], 0
|
||||||
mov eax, [hparams]
|
mov eax, [__app_params]
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz .without_path
|
jz .without_path
|
||||||
mov eax, path
|
mov eax, path
|
||||||
cmp word ptr eax, 32fh ; '/#3' UTF8
|
cmp word ptr eax, 32fh ; '/#3' UTF8
|
||||||
jne .without_path
|
jne .without_path
|
||||||
mov word ptr eax, 12fh ; '/#1' fix to CP866
|
mov word ptr eax, 12fh ; '/#1' fix to CP866
|
||||||
.without_path:
|
.without_path:
|
||||||
@ -42,21 +39,21 @@ start:
|
|||||||
; retrieving parameters
|
; retrieving parameters
|
||||||
mov esi, params
|
mov esi, params
|
||||||
xor edx, edx ; dl - èä¸ò ïàðàìåòð(1) èëè ðàçäåëèòåëè(0)
|
xor edx, edx ; dl - èä¸ò ïàðàìåòð(1) èëè ðàçäåëèòåëè(0)
|
||||||
; dh - ñèìâîë ñ êîòîðîãî íà÷àëñÿ ïàðàìåòð (1 êàâû÷êè, 0 îñòàëüíîå)
|
; dh - ñèìâîë ñ êîòîðîãî íà÷àëñÿ ïàðàìåòð (1 êàâû÷êè, 0 îñòàëüíîå)
|
||||||
mov ecx, 1 ; cl = 1
|
mov ecx, 1 ; cl = 1
|
||||||
; ch = 0 ïðîñòî íîëü
|
; ch = 0 ïðîñòî íîëü
|
||||||
.parse:
|
.parse:
|
||||||
lodsb
|
lodsb
|
||||||
test al, al
|
test al, al
|
||||||
jz .run
|
jz .run
|
||||||
test dl, dl
|
test dl, dl
|
||||||
jnz .findendparam
|
jnz .findendparam
|
||||||
;{åñëè áûë ðàçäåëèòåëü
|
;{åñëè áûë ðàçäåëèòåëü
|
||||||
cmp al, ' '
|
cmp al, ' '
|
||||||
jz .parse ;çàãðóæåí ïðîáåë, ãðóçèì ñëåäóþùèé ñèìâîë
|
jz .parse ;çàãðóæåí ïðîáåë, ãðóçèì ñëåäóþùèé ñèìâîë
|
||||||
mov dl, cl ;íà÷èíàåòñÿ ïàðàìåòð
|
mov dl, cl ;íà÷èíàåòñÿ ïàðàìåòð
|
||||||
cmp al, '"'
|
cmp al, '"'
|
||||||
jz @f ;çàãðóæåíû êàâû÷êè
|
jz @f ;çàãðóæåíû êàâû÷êè
|
||||||
mov dh, ch ;ïàðàìåòð áåç êàâû÷åê
|
mov dh, ch ;ïàðàìåòð áåç êàâû÷åê
|
||||||
dec esi
|
dec esi
|
||||||
call push_param
|
call push_param
|
||||||
@ -70,9 +67,9 @@ start:
|
|||||||
|
|
||||||
.findendparam:
|
.findendparam:
|
||||||
test dh, dh
|
test dh, dh
|
||||||
jz @f ; áåç êàâû÷åê
|
jz @f ; áåç êàâû÷åê
|
||||||
cmp al, '"'
|
cmp al, '"'
|
||||||
jz .clear
|
jz .clear
|
||||||
jmp .parse
|
jmp .parse
|
||||||
@@:
|
@@:
|
||||||
cmp al, ' '
|
cmp al, ' '
|
||||||
@ -85,7 +82,6 @@ start:
|
|||||||
jmp .parse
|
jmp .parse
|
||||||
|
|
||||||
.run:
|
.run:
|
||||||
call load_imports
|
|
||||||
push argv
|
push argv
|
||||||
push [argc]
|
push [argc]
|
||||||
call main
|
call main
|
||||||
@ -93,7 +89,7 @@ start:
|
|||||||
xor eax,eax
|
xor eax,eax
|
||||||
dec eax
|
dec eax
|
||||||
int 0x40
|
int 0x40
|
||||||
dd -1
|
dd -1
|
||||||
.crash:
|
.crash:
|
||||||
jmp .exit
|
jmp .exit
|
||||||
;============================
|
;============================
|
||||||
@ -112,101 +108,9 @@ push_param:
|
|||||||
inc [argc]
|
inc [argc]
|
||||||
.dont_add:
|
.dont_add:
|
||||||
ret
|
ret
|
||||||
;==============================
|
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
load_imports:
|
|
||||||
;==============================
|
|
||||||
;parameters
|
|
||||||
; none
|
|
||||||
;description
|
|
||||||
; imports must be located at end of image (but before BSS sections)
|
|
||||||
; the address of end of imports (next byte after imports) is located in imgsz
|
|
||||||
; look at each import from that address up to illegal import
|
|
||||||
; legal import is such that:
|
|
||||||
; first pointer points to procedure name
|
|
||||||
; and is smaller than imgsz
|
|
||||||
; second pointer points lo library name, starting with 0x55, 0xAA
|
|
||||||
; and is smaller than imgsz
|
|
||||||
; each library should be initialized as appropriate, once
|
|
||||||
; so as library is initialized, its name will be replaced 0x00
|
|
||||||
mov ebx, [imgsz] ; byte after imports
|
|
||||||
.handle_next_import:
|
|
||||||
sub ebx, 4 ; ebx = pointer to pointer to library name
|
|
||||||
mov esi, dword[ebx] ; esi = pointer to library name
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
call load_library ; eax = pointer to library exports
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
test eax, eax
|
|
||||||
jz .done
|
|
||||||
sub ebx, 4 ; ebx = pointer to pointer to symbol name
|
|
||||||
push ebx
|
|
||||||
stdcall dll.GetProcAddress, eax, dword[ebx]
|
|
||||||
pop ebx
|
|
||||||
test eax, eax
|
|
||||||
jz .fail
|
|
||||||
mov dword[ebx], eax
|
|
||||||
jmp .handle_next_import
|
|
||||||
.done:
|
|
||||||
;DEBUGF 1, "Library: %s not loaded!\n", esi
|
|
||||||
;mcall -1
|
|
||||||
ret
|
|
||||||
.fail:
|
|
||||||
ret
|
|
||||||
|
|
||||||
;==============================
|
|
||||||
|
|
||||||
;==============================
|
|
||||||
load_library:
|
|
||||||
;==============================
|
|
||||||
;parameters
|
|
||||||
; ebx: library name address
|
|
||||||
;description
|
|
||||||
; each library should be initialized as appropriate, once
|
|
||||||
; so as library is initialized, its name will be replaced 0x00
|
|
||||||
; and 4 next bytes will be set to address of library
|
|
||||||
; first two bytes of library name must be 0x55, 0xAA (is like a magic)
|
|
||||||
cld ; move esi further, not back
|
|
||||||
cmp esi, [imgsz]
|
|
||||||
ja .fail
|
|
||||||
lodsb ; al = first byte of library name
|
|
||||||
cmp al, 0x55
|
|
||||||
jne .fail
|
|
||||||
lodsb ; al = second byte of library name
|
|
||||||
cmp al, 0xAA
|
|
||||||
jne .fail
|
|
||||||
lodsb ; al = third byte of library name (0x00 if the library is already loaded)
|
|
||||||
test al, al
|
|
||||||
jnz .load
|
|
||||||
lodsd ; if we here, then third byte is 0x00 => address of library is in next 4 bytes
|
|
||||||
; now eax contains address of library
|
|
||||||
ret
|
|
||||||
.load:
|
|
||||||
dec esi ; we checked on 0 before, let's go back
|
|
||||||
mov eax, 68
|
|
||||||
mov ebx, 19
|
|
||||||
mov ecx, esi
|
|
||||||
int 0x40 ; eax = address of exports
|
|
||||||
mov byte[esi], 0 ; library is loaded, let's place 0 in first byte of name
|
|
||||||
mov [esi + 1], eax ; now next 4 bytes of library name are replaced by address of library
|
|
||||||
; call lib_init
|
|
||||||
stdcall dll.GetProcAddress, eax, lib_init_str ; eax = address of lib_init
|
|
||||||
test eax, eax
|
|
||||||
jz .ret
|
|
||||||
stdcall dll.Init, eax
|
|
||||||
.ret:
|
|
||||||
mov eax, [esi + 1] ; put address of library into eax
|
|
||||||
ret
|
|
||||||
.fail:
|
|
||||||
mov eax, 0
|
|
||||||
ret
|
|
||||||
|
|
||||||
;==============================
|
|
||||||
|
|
||||||
lib_init_str db 'lib_init', 0
|
|
||||||
|
|
||||||
public argc as '__argc'
|
public argc as '__argc'
|
||||||
public params as '__argv'
|
public params as '__argv'
|
||||||
public path as '__path'
|
public path as '__path'
|
||||||
@ -214,8 +118,10 @@ public path as '__path'
|
|||||||
section '.bss'
|
section '.bss'
|
||||||
buf_len = 0x400
|
buf_len = 0x400
|
||||||
max_parameters=0x20
|
max_parameters=0x20
|
||||||
argc rd 1
|
argc rd 1
|
||||||
argv rd max_parameters
|
argv rd max_parameters
|
||||||
path rb buf_len
|
path rb buf_len
|
||||||
params rb buf_len
|
params rb buf_len
|
||||||
|
|
||||||
|
;section '.data'
|
||||||
|
;include_debug_strings ; ALWAYS present in data section
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
#include "ctype/is.c"
|
#include "ctype/is.c"
|
||||||
#include "ctype/tolower.c"
|
#include "ctype/tolower.c"
|
||||||
#include "ctype/toupper.c"
|
#include "ctype/toupper.c"
|
||||||
@ -146,6 +148,174 @@ __asm__(
|
|||||||
".include \"setjmp/setjmp.s\""
|
".include \"setjmp/setjmp.s\""
|
||||||
);
|
);
|
||||||
|
|
||||||
#include "libtcc/libtcc1.c"
|
#include "libtcc1/libtcc1.c"
|
||||||
#include "stdlib/___chkstk_ms.c"
|
#include "stdlib/___chkstk_ms.c"
|
||||||
#include "exports/exports.c"
|
|
||||||
|
|
||||||
|
ksys_dll_t EXPORTS[] = {
|
||||||
|
{"clearerr", &clearerr},
|
||||||
|
{"debug_printf", &debug_printf},
|
||||||
|
{"fclose", &fclose},
|
||||||
|
{"feof", &feof},
|
||||||
|
{"ferror", &ferror},
|
||||||
|
{"fflush", &fflush},
|
||||||
|
{"fgetc", &fgetc},
|
||||||
|
{"fgetpos", &fgetpos},
|
||||||
|
{"fgets", &fgets},
|
||||||
|
{"fopen", &fopen},
|
||||||
|
{"fprintf", &fprintf},
|
||||||
|
{"fputc", &fputc},
|
||||||
|
{"fputs", &fputs},
|
||||||
|
{"fread", &fread},
|
||||||
|
{"freopen", &freopen},
|
||||||
|
{"fscanf", &fscanf},
|
||||||
|
{"fseek", &fseek},
|
||||||
|
{"fsetpos", &fsetpos},
|
||||||
|
{"ftell", &ftell},
|
||||||
|
{"fwrite", &fwrite},
|
||||||
|
{"getchar", &getchar},
|
||||||
|
{"gets", &gets},
|
||||||
|
{"perror", &perror},
|
||||||
|
{"printf", &printf},
|
||||||
|
{"puts", &puts},
|
||||||
|
{"remove", &remove},
|
||||||
|
{"rename", &rename},
|
||||||
|
{"rewind", &rewind},
|
||||||
|
{"scanf", &scanf},
|
||||||
|
{"setbuf", &setbuf},
|
||||||
|
{"setvbuf", &setvbuf},
|
||||||
|
{"snprintf", &snprintf},
|
||||||
|
{"sprintf", &sprintf},
|
||||||
|
{"sscanf", &sscanf},
|
||||||
|
{"tmpfile", &tmpfile},
|
||||||
|
{"tmpnam", &tmpnam},
|
||||||
|
{"vfscanf", &vfscanf},
|
||||||
|
{"vprintf", &vprintf},
|
||||||
|
{"vfscanf", &vfscanf},
|
||||||
|
{"vsprintf", &vsprintf},
|
||||||
|
{"vsnprintf", &vsnprintf},
|
||||||
|
{"vsscanf", &vsscanf},
|
||||||
|
{"ungetc", &ungetc},
|
||||||
|
{"abs", &abs},
|
||||||
|
{"atoi", &atoi},
|
||||||
|
{"atol", &atol},
|
||||||
|
{"atoll", &atoll},
|
||||||
|
{"atof", &atof},
|
||||||
|
{"calloc", &calloc},
|
||||||
|
{"exit", &exit},
|
||||||
|
{"free", &free},
|
||||||
|
{"itoa", &itoa},
|
||||||
|
{"labs", &labs},
|
||||||
|
{"llabs", &llabs},
|
||||||
|
{"malloc", &malloc},
|
||||||
|
{"realloc", &realloc},
|
||||||
|
{"strtol", &strtol},
|
||||||
|
{"srand", &srand},
|
||||||
|
{"rand", &rand},
|
||||||
|
{"qsort", &qsort},
|
||||||
|
{"strtod", &strtod},
|
||||||
|
{"__assert_fail", &__assert_fail},
|
||||||
|
{"memchr", &memchr},
|
||||||
|
{"memcmp", &memcmp},
|
||||||
|
{"strncat", &strncat},
|
||||||
|
{"strchr", &strchr},
|
||||||
|
{"strcat", &strcat},
|
||||||
|
{"strcmp", &strcmp},
|
||||||
|
{"strcoll", &strcoll},
|
||||||
|
{"strcpy", &strcpy},
|
||||||
|
{"strcspn", &strcspn},
|
||||||
|
{"strdup", &strdup},
|
||||||
|
{"strerror", &strerror},
|
||||||
|
{"strlen", &strlen},
|
||||||
|
{"strncat", &strncat},
|
||||||
|
{"strncmp", &strncmp},
|
||||||
|
{"strncpy", &strncpy},
|
||||||
|
{"strrchr", &strrchr},
|
||||||
|
{"strrev", &strrev},
|
||||||
|
{"strspn", &strspn},
|
||||||
|
{"strstr", &strstr},
|
||||||
|
{"strtok", &strtok},
|
||||||
|
{"strxfrm", &strxfrm},
|
||||||
|
{"_errno", &_errno},
|
||||||
|
{"closedir", &closedir},
|
||||||
|
{"opendir", &opendir},
|
||||||
|
{"readdir", &readdir},
|
||||||
|
{"rewinddir", &rewinddir},
|
||||||
|
{"seekdir", &seekdir},
|
||||||
|
{"telldir", &telldir},
|
||||||
|
{"getcwd", &getcwd},
|
||||||
|
{"mkdir", &mkdir},
|
||||||
|
{"rmdir", &rmdir},
|
||||||
|
{"setcwd", &setcwd},
|
||||||
|
{"getcwd", &getcwd},
|
||||||
|
{"socket", &socket},
|
||||||
|
{"close", &close},
|
||||||
|
{"bind", &bind},
|
||||||
|
{"listen", &listen},
|
||||||
|
{"connect", &connect},
|
||||||
|
{"accept", &accept},
|
||||||
|
{"send", &send},
|
||||||
|
{"recv", &recv},
|
||||||
|
{"setsockopt", &setsockopt},
|
||||||
|
{"socketpair", &socketpair},
|
||||||
|
{"acosh", &acosh},
|
||||||
|
{"asinh", &asinh},
|
||||||
|
{"atanh", &atanh},
|
||||||
|
{"acosh", &acosh},
|
||||||
|
{"frexp", &frexp},
|
||||||
|
{"hypot", &hypot},
|
||||||
|
{"ldexp", &ldexp},
|
||||||
|
{"sinh", &sinh},
|
||||||
|
{"tanh", &tanh},
|
||||||
|
{"acos", &acos},
|
||||||
|
{"asin", &asin},
|
||||||
|
{"atan", &atan},
|
||||||
|
{"atan2", &atan2},
|
||||||
|
{"ceil", &ceil},
|
||||||
|
{"cos", &cos},
|
||||||
|
{"sin", &sin},
|
||||||
|
{"tan", &tan},
|
||||||
|
{"exp", &exp},
|
||||||
|
{"fabs", &fabs},
|
||||||
|
{"floor", &floor},
|
||||||
|
{"fmod", &fmod},
|
||||||
|
{"log", &log},
|
||||||
|
{"modf", &modf},
|
||||||
|
{"modfl", &modfl},
|
||||||
|
{"pow", &pow},
|
||||||
|
{"pow2", &pow2},
|
||||||
|
{"pow10", &pow10},
|
||||||
|
{"longjmp", &longjmp},
|
||||||
|
{"setjmp", &setjmp},
|
||||||
|
{"__is", &__is},
|
||||||
|
{"tolower", &tolower},
|
||||||
|
{"toupper", &toupper},
|
||||||
|
{"con_set_title", &con_set_title},
|
||||||
|
{"con_init", &con_init},
|
||||||
|
{"con_init_opt", &con_init_opt},
|
||||||
|
{"con_write_asciiz", &con_write_asciiz},
|
||||||
|
{"con_write_string", &con_write_string},
|
||||||
|
{"con_printf", &con_printf},
|
||||||
|
{"con_exit", &con_exit},
|
||||||
|
{"con_get_flags", &con_get_flags},
|
||||||
|
{"con_set_flags", &con_set_flags},
|
||||||
|
{"con_kbhit", &con_kbhit},
|
||||||
|
{"con_getch", &con_getch},
|
||||||
|
{"con_getch2", &con_getch2},
|
||||||
|
{"con_gets", &con_gets},
|
||||||
|
{"con_gets2", &con_gets2},
|
||||||
|
{"con_get_font_height", &con_get_font_height},
|
||||||
|
{"con_get_cursor_height", &con_get_cursor_height},
|
||||||
|
{"con_set_cursor_height", &con_set_cursor_height},
|
||||||
|
{"con_cls", &con_cls},
|
||||||
|
{"con_get_cursor_pos", &con_get_cursor_pos},
|
||||||
|
{"con_set_cursor_pos", &con_set_cursor_pos},
|
||||||
|
{"mktime", &mktime},
|
||||||
|
{"time", &time},
|
||||||
|
{"localtime", &localtime},
|
||||||
|
{"asctime", &asctime},
|
||||||
|
{"difftime", &difftime},
|
||||||
|
{"basename", &basename},
|
||||||
|
{"dirname", &dirname},
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
@ -1,179 +0,0 @@
|
|||||||
!____STDIO______
|
|
||||||
clearerr
|
|
||||||
debug_printf
|
|
||||||
fclose
|
|
||||||
feof
|
|
||||||
ferror
|
|
||||||
fflush
|
|
||||||
fgetc
|
|
||||||
fgetpos
|
|
||||||
fgets
|
|
||||||
fopen
|
|
||||||
fprintf
|
|
||||||
fputc
|
|
||||||
fputs
|
|
||||||
fread
|
|
||||||
freopen
|
|
||||||
fscanf
|
|
||||||
fseek
|
|
||||||
fsetpos
|
|
||||||
ftell
|
|
||||||
fwrite
|
|
||||||
getchar
|
|
||||||
gets
|
|
||||||
perror
|
|
||||||
printf
|
|
||||||
puts
|
|
||||||
remove
|
|
||||||
rename
|
|
||||||
rewind
|
|
||||||
scanf
|
|
||||||
setbuf
|
|
||||||
setvbuf
|
|
||||||
snprintf
|
|
||||||
sprintf
|
|
||||||
sscanf
|
|
||||||
tmpfile
|
|
||||||
tmpnam
|
|
||||||
vfscanf
|
|
||||||
vprintf
|
|
||||||
vfscanf
|
|
||||||
vsprintf
|
|
||||||
vsnprintf
|
|
||||||
vsscanf
|
|
||||||
ungetc
|
|
||||||
!____STDLIB____
|
|
||||||
abs
|
|
||||||
atoi
|
|
||||||
atol
|
|
||||||
atoll
|
|
||||||
atof
|
|
||||||
calloc
|
|
||||||
exit
|
|
||||||
free
|
|
||||||
itoa
|
|
||||||
labs
|
|
||||||
llabs
|
|
||||||
malloc
|
|
||||||
realloc
|
|
||||||
strtol
|
|
||||||
srand
|
|
||||||
rand
|
|
||||||
qsort
|
|
||||||
strtod
|
|
||||||
__assert_fail
|
|
||||||
!____STRING____
|
|
||||||
!memcpy
|
|
||||||
memchr
|
|
||||||
memcmp
|
|
||||||
!memmove
|
|
||||||
!memset
|
|
||||||
strncat
|
|
||||||
strchr
|
|
||||||
strcat
|
|
||||||
strcmp
|
|
||||||
strcoll
|
|
||||||
strcpy
|
|
||||||
strcspn
|
|
||||||
strdup
|
|
||||||
strerror
|
|
||||||
strlen
|
|
||||||
strncat
|
|
||||||
strncmp
|
|
||||||
strncpy
|
|
||||||
strrchr
|
|
||||||
strrev
|
|
||||||
strspn
|
|
||||||
strstr
|
|
||||||
strtok
|
|
||||||
strxfrm
|
|
||||||
_errno
|
|
||||||
!____SYS____
|
|
||||||
closedir
|
|
||||||
opendir
|
|
||||||
readdir
|
|
||||||
rewinddir
|
|
||||||
seekdir
|
|
||||||
telldir
|
|
||||||
getcwd
|
|
||||||
mkdir
|
|
||||||
rmdir
|
|
||||||
setcwd
|
|
||||||
getcwd
|
|
||||||
!____SOCKET____
|
|
||||||
socket
|
|
||||||
close
|
|
||||||
bind
|
|
||||||
listen
|
|
||||||
connect
|
|
||||||
accept
|
|
||||||
send
|
|
||||||
recv
|
|
||||||
setsockopt
|
|
||||||
socketpair
|
|
||||||
!____UNISTD____
|
|
||||||
!____MATH____
|
|
||||||
acosh
|
|
||||||
asinh
|
|
||||||
atanh
|
|
||||||
acosh
|
|
||||||
frexp
|
|
||||||
hypot
|
|
||||||
ldexp
|
|
||||||
sinh
|
|
||||||
tanh
|
|
||||||
acos
|
|
||||||
asin
|
|
||||||
atan
|
|
||||||
atan2
|
|
||||||
ceil
|
|
||||||
cos
|
|
||||||
sin
|
|
||||||
tan
|
|
||||||
exp
|
|
||||||
fabs
|
|
||||||
floor
|
|
||||||
fmod
|
|
||||||
log
|
|
||||||
modf
|
|
||||||
modfl
|
|
||||||
pow
|
|
||||||
pow2
|
|
||||||
pow10
|
|
||||||
!____LONGJMP____
|
|
||||||
longjmp
|
|
||||||
setjmp
|
|
||||||
!____CTYPE____
|
|
||||||
__is
|
|
||||||
tolower
|
|
||||||
toupper
|
|
||||||
!___CONIO___
|
|
||||||
con_set_title
|
|
||||||
con_init
|
|
||||||
con_init_opt
|
|
||||||
con_write_asciiz
|
|
||||||
con_write_string
|
|
||||||
con_printf
|
|
||||||
con_exit
|
|
||||||
con_get_flags
|
|
||||||
con_set_flags
|
|
||||||
con_kbhit
|
|
||||||
con_getch
|
|
||||||
con_getch2
|
|
||||||
con_gets
|
|
||||||
con_gets2
|
|
||||||
con_get_font_height
|
|
||||||
con_get_cursor_height
|
|
||||||
con_set_cursor_height
|
|
||||||
con_cls
|
|
||||||
con_get_cursor_pos
|
|
||||||
con_set_cursor_pos
|
|
||||||
!____TIME____
|
|
||||||
mktime
|
|
||||||
time
|
|
||||||
localtime
|
|
||||||
asctime
|
|
||||||
difftime
|
|
||||||
!____MISC____
|
|
||||||
basename
|
|
||||||
dirname
|
|
Loading…
Reference in New Issue
Block a user