/data/Tupfile.lua |
---|
25,6 → 25,7 |
{"LANG.INC", build_type .. "/lang.inc"}, |
{"NOTIFY3.PNG", "common/notify3.png"}, |
{"TOOLBAR.PNG", PROGS .. "/cmm/txtread/toolbar.png"}, |
{"UNIMG", PROGS .. "/fs/unimg/unimg"}, |
{"VMODE", "common/vmode"}, |
{"3D/HOUSE.3DS", "common/3d/house.3ds"}, |
{"DEVELOP/T_EDIT.INI", PROGS .. "/other/t_edit/t_edit.ini"}, |
177,15 → 178,14 |
{"kolibrios/develop/TinyBasic/", "common/develop/TinyBasic/*"}, |
{"kolibrios/utils/cnc_editor/cnc_editor", PROGS .. "/other/cnc_editor/cnc_editor"}, |
{"kolibrios/utils/cnc_editor/kolibri.NC", PROGS .. "/other/cnc_editor/kolibri.NC"}, |
{"kolibrios/emul/", "common/emul/*"}, |
{"kolibrios/emul/dosbox/", "common/emul/DosBox/*"}, |
{"kolibrios/emul/e80/readme.txt", PROGS .. "/emulator/e80/trunk/readme.txt"}, |
{"kolibrios/emul/e80/keyboard.png", PROGS .. "/emulator/e80/trunk/keyboard.png"}, |
{"kolibrios/emul/fceu/fceu", PROGS .. "/emulator/fceu/fceu"}, |
{"kolibrios/emul/fceu/FCEU ReadMe.txt", PROGS .. "/emulator/fceu/FCEU ReadMe.txt"}, |
{"kolibrios/emul/", "common/emul/gameboy"}, |
{"kolibrios/emul/", "common/emul/pokemini"}, |
{"kolibrios/emul/", "common/emul/scummvm"}, |
{"kolibrios/emul/", "common/emul/zsnes"}, |
{"kolibrios/emul/kwine/kwine", PROGS .. "/emulator/kwine/bin/kwine"}, |
{"kolibrios/emul/kwine/lib/", PROGS .. "/emulator/kwine/bin/kwine/lib/*"}, |
{"kolibrios/demos/ak47.lif", "common/demos/ak47.lif"}, |
{"kolibrios/demos/life2", "common/demos/life2"}, |
{"kolibrios/demos/life3tb.png", PROGS .. "/games/life3/trunk/life3tb.png"}, |
/data/rus/settings/menu.dat |
---|
2,13 → 2,13 |
£à®¢®© æ¥âà /sys/allgames |
¥¬ª¨ > /@1 |
à 䨪 > /@3 |
ã«ì⨬¥¤¨ > /@4 |
¬ã«ïâ®àë > /@18 |
¢ãª ¨ ¢¨¤¥® > /@4 |
§à ¡®âª > /@5 |
¬ã«ïâ®àë > /@6 |
¨á⥬ > /@7 |
¡à ¡®âª ¤ ëå > /@13 |
¥âì > /@14 |
§®¥ > /@17 |
ä¨á > /@10 |
¥âì > /@11 |
§®¥ > /@14 |
®ªã¬¥â æ¨ï /sys/docpack |
¯ã᪠¯à®£à ¬¬ë /sys/run |
¢¥à襨¥ à ¡®âë /sys/end |
42,84 → 42,62 |
¥¤ ªâ®à Animage /sys/media/animage |
«®¦¥¨¥ 䨫ìâ஢ /sys/media/imgf/imgf |
«¨âà /sys/media/palitra |
#4 **** ã«ì⨬¥¤¨ **** |
¨¯¥âª /sys/pipetka |
#4 **** ¢ãª ¨ ¢¨¤¥® **** |
㤨®¯«¥¥à Pixie /sys/media/pixie |
㤨®¯«¥¥à AC97SND /sys/media/ac97snd |
¨¤¥®¯«¥¥à Fplay /kolibrios/media/fplay |
Midi-¯«¥¥à /sys/media/midamp |
#5 **** §à ¡®âª **** |
ਬ¥àë > /@6 |
¯ ª®¢é¨ª KPack /sys/kpack |
Flat Assembler /sys/develop/fasm |
®áª ®â« ¤ª¨ /sys/develop/board |
HEX-। ªâ®à /sys/develop/heed |
Diff tool /sys/develop/diff |
â« ¤ç¨ª /sys/develop/mtdbg |
¨¯¥âª /sys/pipetka |
Hex2Dec2Bin /sys/develop/h2d2b |
¡«¨æ ᨬ¢®«®¢ /sys/ASCIIVju |
ASCII-ª®¤ë /sys/develop/keyascii |
SCAN-ª®¤ë /sys/develop/scancode |
#6 **** §à ¡®âª -> ਬ¥àë **** |
®â®ª¨ /sys/develop/thread |
Color Slider /sys/demos/cslide |
®á®«ìë© ¯à¨¬¥à 1 /sys/develop/testcon2 |
®á®«ìë© ¯à¨¬¥à 2 /sys/develop/test_gets |
ª á®®¡é¥¨© /sys/demos/use_mb |
#6 **** ¬ã«ïâ®àë **** |
DOSBox DOS Emulator /kolibrios/emul/DosBox/dosbox |
e80 (ZX Spectrum) /kolibrios/emul/e80/e80 |
FCE Ultra - NES /kolibrios/emul/fceu/fceu |
PokeMini /kolibrios/emul/pokemini |
ScummVM /kolibrios/emul/scummvm |
ZSNES Super Nintendo /kolibrios/emul/zsnes |
#7 **** ¨á⥬ **** |
áâனª¨ > /@8 |
¨áâ¥¬ë¥ á¥á®àë > /@9 |
¡®â á ä ©« ¬¨ > /@10 |
¥áâ¨à®¢ ¨¥ > /@11 |
¯¥æ. ¢®§¬®¦®á⨠> /@12 |
¨á⥬ ï ¯ ¥«ì /sys/syspanel |
©«®¢ë¥ ¬¥¥¤¦¥àë > /@8 |
¯¥æ. ¢®§¬®¦®á⨠> /@9 |
«¥¤ àì /sys/calendar |
®áª ®â« ¤ª¨ /sys/develop/board |
ãä¥à ®¡¬¥ /sys/develop/clipview |
¥à¬¨ « /sys/terminal |
#8 **** ¨á⥬ -> áâனª¨ **** |
áâனá⢠/sys/setup |
áâ ®¢¨âì ä® /sys/media/palitra |
â¨«ì ®ª® /sys/skincfg |
®àï稥 ª« ¢¨è¨ /sys/mykey |
¨¤¥®à¥¦¨¬ ¤«ï ATI /sys/vmode |
#9 **** ¨á⥬ -> ¥á®àë **** |
¨á¯¥âç¥à ¯à®æ¥áᮢ /sys/cpu |
PCI-ãáâனá⢠/sys/pcidev |
CPUID /sys/cpuid |
GHOST Monitor /sys/gmon |
K. Bus disconnected /sys/kbd |
HDD ¨ä®à¬¥à /sys/hdd_info |
#10 **** ¨á⥬ -> ¡®â á ä ©« ¬¨ **** |
¨àâã «ìë¥ ¤¨áª¨ /sys/tmpdisk |
®á®«ì SHELL /sys/shell |
®åà ¥¨¥ ®¡à § /sys/rdsave |
#8 **** ¨á⥬ -> ©«®¢ë¥ ¬¥¥¤¦¥àë **** |
KFAR /sys/File Managers/kfar |
fNav /sys/File Managers/fNav/fNav |
KFM /sys/File Managers/kfm |
Eolite /sys/File Managers/Eolite |
¨àâã «ìë¥ ¤¨áª¨ /sys/tmpdisk |
®á®«ì SHELL /sys/shell |
®åà ¥¨¥ ®¡à § /sys/rdsave |
#11 **** ¨á⥬ -> ¥áâ¨à®¢ ¨¥ **** |
¥áâ § é¨âë /sys/test |
¥áâ ¬®¨â®à /sys/disptest |
à ä¨ç¥áª¨© ¡¥ç¬ ઠ/sys/mgb |
FSPEED ᪮à®áâì /sys/fspeed |
#12 **** ¨á⥬ -> ¯¥æ.¢®§¬®¦®á⨠**** |
#9 **** ¨á⥬ -> ¯¥æ.¢®§¬®¦®á⨠**** |
ªà ï «ã¯ /sys/magnify |
ªà ï ª« ¢¨ âãà /sys/zkey |
#13 **** ¡à ¡®âª ¤ ëå **** |
#10 **** ä¨á **** |
«ìªã«ïâ®à /sys/calc |
¥¤ ªâ®à Tinypad /sys/tinypad |
¥¤ ªâ®à TextEdit /sys/develop/t_edit |
¡«¨çë© ¯à®æ¥áá®à /sys/table |
®áâ஥¨¥ £à 䨪®¢ /sys/graph |
HEX-। ªâ®à /sys/develop/heed |
§ à娢 â®à Unz /sys/unz |
#14 **** ¥âì **** |
¥à¢¥àë > /@15 |
«¨¥âë > /@16 |
à®á¬®âà RTF /sys/rtfread |
#11 **** ¥âì **** |
¥à¢¥àë > /@12 |
«¨¥âë > /@13 |
áâனª¨ á¥â¨ /sys/network/netcfg |
â âãá ¯®¤ª«î票ï /sys/network/netstat |
#15 **** ¥âì -> ¥à¢¥àë **** |
#12 **** ¥âì -> ¥à¢¥àë **** |
FTP daemon /sys/network/ftpd |
#16 **** ¥âì -> «¨¥âë **** |
#13 **** ¥âì -> «¨¥âë **** |
IRC ª«¨¥â /sys/network/ircc |
FTP ª«¨¥â /sys/network/ftpc |
TFTP ª«¨¥â /sys/network/tftpc |
130,19 → 108,12 |
VNC «¨¥â /sys/network/vncc |
â¥à¥â § £àã§ç¨ª /sys/network/downloader |
¥ªáâ®¢ë© ¡à 㧥à /sys/network/webview |
#17 **** §®¥ **** |
#14 **** §®¥ **** |
®§¤ ¨¥ áªà¨è®â®¢ /sys/scrshoot |
«®£®¢ë¥ ç áë /sys/demos/aclock |
à®á¬®âà RTF /sys/rtfread |
¡«¨æ ¥¤¥«¥¥¢ /sys/period |
ॠ¦ñà KJ|ABuIIIA /sys/games/klavisha |
¨ àë¥ ç áë /sys/demos/bcdclk |
©¬¥à /sys/demos/timer |
#18 **** ¬ã«ïâ®àë **** |
DOSBox DOS Emulator /kolibrios/emul/DosBox/dosbox |
e80 (ZX Spectrum) /kolibrios/emul/e80/e80 |
FCE Ultra - NES /kolibrios/emul/fceu/fceu |
Gameboy Color /kolibrios/emul/gameboy |
ScummVM (adventure) /kolibrios/emul/scummvm |
ZSNES Super Nintendo /kolibrios/emul/zsnes |
§ à娢 â®à Unz /sys/unz |
## |
/programs/emulator/kwine/bin/kwine |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/emulator/kwine/bin/lib/kernel32.dll |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/emulator/kwine/bin/lib/msvcrt.dll |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/emulator/kwine/bin/samples.zip |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/emulator/kwine/kwine.asm |
---|
0,0 → 1,664 |
; ------------------------------------------------------------- ; |
; KWINE is a fork of program PELoad written by 0CodErr |
; author - rgimad |
; ------------------------------------------------------------- ; |
ORG 0 |
BITS 32 |
; ------------------------------------------------------------- ; |
PATH_SIZE equ 4096 |
PARAMS_SIZE equ 4096 |
STACK_SIZE equ 4096 |
END_ equ IMAGE_BASE - (PATH_SIZE + PARAMS_SIZE + STACK_SIZE) |
; ------------------------------------------------------------- ; |
IMAGE_BASE equ 400000H |
; ------------------------------------------------------------- ; |
MENUET01 db 'MENUET01' |
version dd 1 |
program.start dd start_ |
program.end dd END_ |
program.memory dd END_ + PATH_SIZE + PARAMS_SIZE + STACK_SIZE |
program.stack dd END_ + PATH_SIZE + PARAMS_SIZE + STACK_SIZE |
program.params dd END_ + PATH_SIZE |
program.path dd END_ |
; ------------------------------------------------------------- ; |
load.library: |
mov eax, 68 |
mov ebx, 19 |
mov ecx, [esp + 4] |
int 64 |
ret 4 |
; ------------------------------------------------------------- ; |
getprocaddress: |
mov edx, [esp + 8] |
xor eax, eax |
test edx, edx |
jz .end |
.next: |
xor eax, eax |
cmp [edx], dword 0 |
jz .end |
mov esi, [edx] |
mov edi, [esp + 4] |
.next_: |
lodsb |
scasb |
jne .fail |
or al, al |
jnz .next_ |
jmp .ok |
.fail: |
add edx, 8 |
jmp .next |
.ok: |
mov eax, [edx + 4] |
.end: |
ret 8 |
; ------------------------------------------------------------- ; |
realloc.app.mem: |
mov eax, 64 |
mov ebx, 1 |
mov ecx, [esp + 4] |
int 64 |
ret 4 |
; ------------------------------------------------------------- ; |
set.current.directory: |
mov eax, 30 |
mov ebx, 1 |
mov ecx, [esp + 4] |
int 64 |
ret 4 |
; ------------------------------------------------------------- ; |
%if 0 ; comment |
int2str: |
%define number [esp + 8 + 8 * 4] |
%define buffer [esp + 4 + 8 * 4] |
pushad |
mov edi, buffer |
mov eax, " " ; 4 spaces |
stosd |
stosd |
stosw |
xor al, al |
stosb |
dec edi |
dec edi |
mov ecx, 10 |
mov eax, number |
.next: |
xor edx, edx |
div ecx ; ecx = 10 |
add edx, 48 ; edx = (eax MOD ecx) + 48 |
mov [edi], dl |
dec edi |
test eax, eax |
jnz .next |
popad |
ret 8 |
%undef number |
%undef buffer |
%endif ; endcomment |
; ------------------------------------------------------------- ; |
; test_file_path db "/hd3/1/mntest.exe",0 |
; complex |
; address |
; data |
; hello |
; numbers +- |
; proc |
; sptrim |
; se |
; clear |
; locals +- |
; tokenise - |
; mntest |
file_path dd 0 |
lib_name dd 0 |
lib dd 0 |
func dd 0 |
func_name dd 0 |
; ------------------------------------------------------------- ; |
sz_pe_load db "PELoad",0 |
; ------------------------------------------------------------- ; |
con_init dd 0 |
con_write_asciiz dd 0 |
con_exit dd 0 |
console dd 0 |
sz_con_init db "con_init",0 |
sz_con_write_asciiz db "con_write_asciiz",0 |
sz_con_exit db "con_exit",0 |
sz_console db "/sys/lib/console.obj",0 |
; ------------------------------------------------------------- ; |
MZ dw 0 |
PE dw 0 |
lfa_new dd 0 |
NumberOfSections dd 0 |
SizeOfOptionalHeader dd 0 |
EntryPoint dd 0 |
SizeOfImage dd 0 |
SizeOfHeaders dd 0 |
DataDirectories dd 0 |
SectionsTable dd 0 |
Import dd 0 |
; ------------------------------------------------------------- ; |
ERROR_MESSAGE dd 0 |
err_params db "Parameters error",0 |
err_file_path db "No input file path",0 |
err_read_file db "Read file error",0 |
err_mz_not_found db "No DOS signature found",0 |
err_pe_not_found db "No PE signature found",0 |
err_load_library db "Error load library: ",0 |
err_func_not_found db "Not found function: ",0 |
; ------------------------------------------------------------- ; |
%if 0 ; comment |
msg_buffer resb 256 |
sz_new_line db 10,0 |
sz_space db " ",0 |
sz_space_colon_space db " : ",0 |
%endif ; endcomment |
sz_empty db "",0 |
start_: |
; ------------------------------------------------------------- ; |
; find params and file path |
; mov eax, test_file_path |
mov eax, [program.params] |
cmp [eax], byte 34 ; quote |
jne .no_quote |
inc eax |
mov edi, eax |
.find_quote_or_zero: |
cmp [edi], byte 0 |
je .found |
cmp [edi], byte 34 ; quote |
je .found |
inc edi |
jmp .find_quote_or_zero |
.no_quote: |
mov edi, eax |
.find_space_or_zero: |
cmp [edi], byte 0 |
je .found |
cmp [edi], byte 32 ; space |
je .found |
inc edi |
jmp .find_space_or_zero |
.found: |
mov [edi], byte 0 |
mov [file_path], eax |
; check file path |
mov eax, [file_path] |
mov al, [eax] |
test al, al |
jne file_path_ok |
mov [ERROR_MESSAGE], dword err_file_path |
jmp ERROR |
file_path_ok: |
; check MZ signature (IMAGE_DOS_HEADER.e_magic) |
push dword [file_path];filepath |
dec esp |
mov [esp], byte 0 |
push dword MZ;buffer |
push dword 2;count |
push dword 0 |
push dword 0;position |
push dword 0 |
mov ebx, esp |
mov eax, 70 |
int 64 |
test eax, eax |
je read_ok |
mov [ERROR_MESSAGE], dword err_read_file |
jmp ERROR |
read_ok: |
cmp word [MZ], "MZ" |
je MZ_exists |
mov [ERROR_MESSAGE], dword err_mz_not_found |
jmp ERROR |
MZ_exists: |
; get lfa_new (IMAGE_DOS_HEADER.e_lfanew) |
push dword [file_path];filepath |
dec esp |
mov [esp], byte 0 |
push dword lfa_new;buffer |
push dword 4;count |
push dword 0 |
push dword 60;position |
push dword 0 |
mov ebx, esp |
mov eax, 70 |
int 64 |
; check PE signature (IMAGE_OPTIONAL_HEADER.Magic) |
push dword [file_path];filepath |
dec esp |
mov [esp], byte 0 |
push dword PE;buffer |
push dword 2;count |
push dword 0 |
push dword [lfa_new];position |
push dword 0 |
mov ebx, esp |
mov eax, 70 |
int 64 |
cmp word [PE], "PE" |
je PE_exists |
mov [ERROR_MESSAGE], dword err_pe_not_found |
jmp ERROR |
PE_exists: |
; get size of headers (IMAGE_OPTIONAL_HEADER.SizeOfHeaders) |
push dword [file_path];filepath |
dec esp |
mov [esp], byte 0 |
push dword SizeOfHeaders;buffer |
push dword 4;count |
push dword 0 |
mov eax, [lfa_new] |
add eax, 84 |
push eax;position |
push dword 0 |
mov ebx, esp |
mov eax, 70 |
int 64 |
; resize app memory and load headers |
mov eax, IMAGE_BASE |
add eax, [SizeOfHeaders] |
push eax |
call realloc.app.mem |
push dword [file_path];filepath |
dec esp |
mov [esp], byte 0 |
push dword IMAGE_BASE;buffer |
push dword [SizeOfHeaders];count |
push dword 0 |
push dword 0;position |
push dword 0 |
mov ebx, esp |
mov eax, 70 |
int 64 |
add esp, (25 * 5) ; restore our stack top |
mov edx, [lfa_new] |
; get SizeOfImage (IMAGE_OPTIONAL_HEADER.SizeOfImage) |
mov eax, [IMAGE_BASE + edx + 80] |
mov [SizeOfImage], eax |
; get EntryPoint (IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint) |
mov eax, [IMAGE_BASE + edx + 40] |
mov [EntryPoint], eax |
; get DataDirectories (IMAGE_OPTIONAL_HEADER.DataDirectory) |
lea eax, [edx + 120] |
mov [DataDirectories], eax |
; get SizeOfOptionalHeader (IMAGE_FILE_HEADER.SizeOfOptionalHeader) |
movzx eax, word [IMAGE_BASE + edx + 20] |
mov [SizeOfOptionalHeader], ax |
; get SectionsTable |
lea eax, [edx + 24] |
add ax, [SizeOfOptionalHeader] |
mov [SectionsTable], eax |
; get Import |
mov eax, IMAGE_BASE |
add eax, [DataDirectories] |
add eax, 1 * 8 |
mov eax, [eax] |
mov [Import], eax |
; get NumberOfSections (IMAGE_FILE_HEADER.NumberOfSections) |
movzx eax, word [IMAGE_BASE + edx + 6] |
mov [NumberOfSections], eax |
; resize app memory and load sections to their virtual address |
mov eax, IMAGE_BASE |
add eax, [SizeOfImage] |
push eax |
call realloc.app.mem |
mov ecx, [NumberOfSections] |
next_section: |
lea eax, [ecx - 1] |
lea eax, [eax * 4 + eax] |
lea eax, [eax * 8] |
add eax, IMAGE_BASE |
add eax, [SectionsTable] |
push dword [file_path] ; filepath |
dec esp |
mov [esp], byte 0 |
mov edx, [eax + 12] |
add edx, IMAGE_BASE |
push edx ; buffer (IMAGE_SECTION_HEADER.VirtualAddress) |
push dword [eax + 16] ; count (IMAGE_SECTION_HEADER.SizeOfRawData) |
push dword 0 |
push dword [eax + 20] ; position (IMAGE_SECTION_HEADER.PointerToRawData) |
push dword 0 |
mov ebx, esp |
mov eax, 70 |
int 64 |
dec ecx |
jnz next_section |
mov eax, [NumberOfSections] |
lea eax, [eax * 4 + eax] |
lea eax, [eax * 4 + eax] |
add esp, eax ; restore our stack top |
; ========================================================== |
%if 0 ; comment |
push sz_console |
call load.library |
; mov [console], eax |
mov ecx, eax |
mov ebx, getprocaddress |
push ecx |
push sz_con_init |
call ebx |
mov [con_init], eax |
push ecx |
push sz_con_write_asciiz |
call ebx |
mov [con_write_asciiz], eax |
push ecx |
push sz_con_exit |
call ebx |
mov [con_exit], eax |
push sz_pe_load |
push -1 |
push -1 |
push -1 |
push -1 |
call [con_init] |
mov ecx, [NumberOfSections] |
next_sect: |
lea eax, [ecx - 1] |
lea eax, [eax * 4 + eax] |
lea eax, [eax * 8] |
add eax, IMAGE_BASE |
add eax, [SectionsTable] |
push eax |
push eax |
call [con_write_asciiz] |
push sz_space_colon_space |
call [con_write_asciiz] |
pop eax |
add eax, 20 |
mov eax, [eax] |
push eax |
push msg_buffer |
call int2str |
push msg_buffer |
call [con_write_asciiz] |
push sz_new_line |
call [con_write_asciiz] |
dec ecx |
jnz next_sect |
%endif ; endcomment |
; ============================================== |
; program.path = program.path_without_filename & "lib/" |
mov edi, [program.path] |
xor al, al |
xor ecx, ecx |
dec ecx |
repne scasb |
std |
mov al, "/" |
repne scasb |
cld |
inc edi |
inc edi |
mov eax, "lib/" |
stosd |
; |
mov [lib_name], edi |
xor ecx, ecx |
next_descriptor: |
lea eax, [ecx * 4 + ecx] |
lea eax, [eax * 4] |
add eax, IMAGE_BASE |
add eax, [Import] |
mov edx, [eax + 12] |
add edx, IMAGE_BASE |
%if 0 ; comment |
pushad |
push edx |
call [con_write_asciiz] |
push sz_new_line |
call [con_write_asciiz] |
popad |
%endif ; endcomment |
pushad |
; concatenate (program.path_without_filename & "lib/") & lib_name |
mov esi, edx |
mov edi, [lib_name] |
.copy_lib_name: |
lodsb |
stosb |
test al, al |
jnz .copy_lib_name |
; try to load library |
push dword [program.path] |
call load.library |
test eax, eax |
jnz .lib_loaded |
; concatenate "Error load library: " & lib_name |
sub edi, [lib_name] |
mov esi, edi |
mov edi, err_load_library |
xor al, al |
xor ecx, ecx |
dec ecx |
repne scasb |
dec edi |
mov ecx, esi |
mov esi, edx |
rep movsb |
; |
popad |
mov [ERROR_MESSAGE], dword err_load_library |
jmp ERROR |
.lib_loaded: |
mov [lib], eax |
popad |
xor ebx, ebx |
next_function: |
mov edx, [eax + 16] |
lea esi, [edx + ebx * 4 + IMAGE_BASE] |
mov [func], esi |
mov edx, [esi] |
test edx, edx |
jz .done |
inc edx |
inc edx |
add edx, IMAGE_BASE |
%if 0 ; comment |
pushad |
push edx |
call [con_write_asciiz] |
push sz_new_line |
call [con_write_asciiz] |
popad |
%endif ; endcomment |
pushad |
mov [func_name], edx |
; look for address of imported function |
push dword [lib] |
push edx |
call getprocaddress |
test eax, eax |
jnz .func_found |
popad |
; concatenate "Not found function: " & name of function |
mov edi, err_func_not_found |
xor al, al |
xor ecx, ecx |
dec ecx |
repne scasb |
dec edi |
mov esi, edx |
.copy_func_name: |
lodsb |
stosb |
test al, al |
jnz .copy_func_name |
; |
dec edi |
mov eax, " in " |
stosd |
mov esi, [lib_name] |
.copy_lib_name: |
lodsb |
stosb |
test al, al |
jnz .copy_lib_name |
mov [ERROR_MESSAGE], dword err_func_not_found |
jmp ERROR |
.func_found: |
mov edx, [func] |
mov [edx], eax |
popad |
inc ebx |
jmp next_function |
.done: |
inc ecx |
lea eax, [ecx * 4 + ecx] |
lea eax, [eax * 4] |
add eax, IMAGE_BASE |
add eax, [Import] |
mov eax, [eax + 12] |
cmp eax, dword 0 |
jnz next_descriptor |
; set.current.directory |
mov edi, [file_path] |
xor al, al |
xor ecx, ecx |
dec ecx |
repne scasb |
std |
mov al, "/" |
repne scasb |
cld |
mov [edi + 1], byte 0 |
push dword [file_path] |
call set.current.directory |
mov [edi + 1], byte "/" ; restore full file_path |
; ---------------------- ; |
; call load_console_lib ; |
; ---------------------- ; |
; go to EntryPoint |
mov eax, [EntryPoint] |
add eax, IMAGE_BASE |
jmp eax |
; push dword [EntryPoint] |
; push msg_buffer |
; call int2str |
; push msg_buffer |
; call [con_write_asciiz] |
%if 0 ; comment |
push 0 |
call [con_exit] |
%endif ; endcomment |
%if 0 ; comment |
; dump --------------------------------------- |
push dword dump_path;filepath |
dec esp |
mov [esp], byte 0 |
push dword 0 ;buffer |
mov eax, IMAGE_BASE |
add eax, [SizeOfImage] |
push eax;count |
push dword 0 |
push dword 0;position |
push dword 2 |
mov ebx, esp |
mov eax, 70 |
int 64 |
xor eax, eax |
dec eax |
int 64 |
dump_path db "/hd3/1/dump.bin",0 |
%endif ; endcomment |
; ========================================================== |
ERROR: |
push sz_console |
call load.library |
; mov [console], eax |
mov ecx, eax |
mov ebx, getprocaddress |
push ecx |
push sz_con_init |
call ebx |
mov [con_init], eax |
push ecx |
push sz_con_write_asciiz |
call ebx |
mov [con_write_asciiz], eax |
push ecx |
push sz_con_exit |
call ebx |
mov [con_exit], eax |
push sz_pe_load |
push -1 |
push -1 |
push -1 |
push -1 |
call [con_init] |
push dword [ERROR_MESSAGE] |
call [con_write_asciiz] |
push 0 |
call [con_exit] |
xor eax, eax |
dec eax |
int 64 |
; load_console_lib: |
; push sz_console |
; call load.library |
; push eax |
; push sz_con_init |
; call getprocaddress |
; mov [con_init], eax |
; push sz_empty |
; push -1 |
; push -1 |
; push -1 |
; push -1 |
; call [con_init] |
; ret |
/programs/emulator/kwine/lib/kernel32.dll.asm |
---|
0,0 → 1,868 |
; ------------------------------------------------------------- ; |
; KWINE is a fork of program PELoad written by 0CodErr |
; author - rgimad |
; ------------------------------------------------------------- ; |
; standard device (Winbase.h) |
%define STD_INPUT_HANDLE -10 |
%define STD_OUTPUT_HANDLE -11 |
%define STD_ERROR_HANDLE -12 |
; starting point for file pointer move (Winbase.h) |
%define FILE_BEGIN 0 ; zero or beginning of file |
%define FILE_CURRENT 1 ; current value of file pointer |
%define FILE_END 2 ; current end-of-file position |
; file system operation codes (kernel/trunk/fs/fs_lfn.inc) |
%define F70_READ_F 0 ; read file |
%define F70_READ_D 1 ; read folder |
%define F70_CREATE_F 2 ; create/rewrite file |
%define F70_WRITE_F 3 ; write/append to file |
%define F70_SETSIZE_F 4 ; set end of file |
%define F70_GETATTR_FD 5 ; get file/directory attributes structure |
%define F70_SETATTR_FD 6 ; set file/directory attributes structure |
%define F70_START_F 7 ; start application |
%define F70_DELETE_FD 8 ; delete file |
%define F70_CREATE_D 9 ; create directory |
; action to take on file that exists or does not exist (Winbase.h) |
%define CREATE_NEW 1 ; creates a new file, only if it does not already exist |
%define CREATE_ALWAYS 2 ; creates new file, always |
%define OPEN_EXISTING 3 ; opens file, only if it exists |
%define OPEN_ALWAYS 4 ; opens file, always |
%define TRUNCATE_EXISTING 5 ; opens file and truncates it so that its size is zero bytes, only if it exists |
%define INVALID_HANDLE_VALUE -1 |
%define INVALID_FILE_SIZE -1 |
GLOBAL EXPORTS |
section '.exprt' align 16 |
;********************************************************************************** |
EXPORTS: ;///////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
dd sz_ExitProcess, ExitProcess |
dd sz_GetStdHandle, GetStdHandle |
dd sz_SetConsoleMode, SetConsoleMode |
dd sz_WriteFile, WriteFile |
dd sz_ReadFile, ReadFile |
dd sz_GetCommandLineA, GetCommandLineA |
dd sz_GlobalAlloc, GlobalAlloc |
dd sz_GlobalFree, GlobalFree |
dd sz_GlobalReAlloc, GlobalReAlloc |
dd sz_Sleep, Sleep |
dd sz_FlushConsoleInputBuffer, FlushConsoleInputBuffer |
dd sz_CloseHandle, CloseHandle |
dd sz_GetFileSize, GetFileSize |
dd sz_CreateFileA, CreateFileA |
dd sz_SetFilePointer, SetFilePointer |
dd sz_VirtualAlloc, VirtualAlloc |
dd sz_VirtualFree, VirtualFree |
dd sz_SetConsoleCursorPosition, SetConsoleCursorPosition |
dd sz_DeleteFileA, DeleteFileA |
dd sz_FindClose, FindClose |
dd sz_FindFirstFileA, FindFirstFileA |
dd sz_GetLocalTime, GetLocalTime |
dd sz_GetLastError, GetLastError |
dd sz_GetProcessHeap, GetProcessHeap |
dd sz_HeapAlloc, HeapAlloc |
dd sz_HeapFree, HeapFree |
dd sz_HeapReAlloc, HeapReAlloc |
dd 0 |
sz_ExitProcess db "ExitProcess",0 |
sz_GetStdHandle db "GetStdHandle",0 |
sz_SetConsoleMode db "SetConsoleMode",0 |
sz_WriteFile db "WriteFile",0 |
sz_ReadFile db "ReadFile",0 |
sz_GetCommandLineA db "GetCommandLineA",0 |
sz_GlobalAlloc db "GlobalAlloc",0 |
sz_GlobalFree db "GlobalFree",0 |
sz_GlobalReAlloc db "GlobalReAlloc",0 |
sz_Sleep db "Sleep",0 |
sz_FlushConsoleInputBuffer db "FlushConsoleInputBuffer",0 |
sz_CloseHandle db "CloseHandle",0 |
sz_GetFileSize db "GetFileSize",0 |
sz_CreateFileA db "CreateFileA",0 |
sz_SetFilePointer db "SetFilePointer",0 |
sz_VirtualAlloc db "VirtualAlloc",0 |
sz_VirtualFree db "VirtualFree",0 |
sz_SetConsoleCursorPosition db "SetConsoleCursorPosition",0 |
sz_DeleteFileA db "DeleteFileA",0 |
sz_FindClose db "FindClose",0 |
sz_FindFirstFileA db "FindFirstFileA",0 |
sz_GetLocalTime db "GetLocalTime",0 |
sz_GetLastError db "GetLastError",0 |
sz_GetProcessHeap db "GetProcessHeap",0 |
sz_HeapAlloc db "HeapAlloc",0 |
sz_HeapFree db "HeapFree",0 |
sz_HeapReAlloc db "HeapReAlloc",0 |
section '.code' align 16 |
align 16 |
;********************************************************************************** |
ExitProcess: ;///////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
xor eax, eax |
dec eax |
int 64 |
; ret not need |
align 16 |
;********************************************************************************** |
GetStdHandle: ;//////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
push ebx |
push esi |
push edi |
; if already loaded then do nothing |
cmp [console], dword 0 |
jne .do_nothing |
push sz_console |
call load.library |
mov [console], eax |
mov ecx, eax |
mov ebx, getprocaddress |
push ecx |
push sz_con_init |
call ebx |
mov [con_init], eax |
push ecx |
push sz_con_write_asciiz |
call ebx |
mov [con_write_asciiz], eax |
push ecx |
push sz_con_exit |
call ebx |
mov [con_exit], eax |
push ecx |
push sz_con_gets |
call ebx |
mov [con_gets], eax |
push ecx |
push sz_con_write_string |
call ebx |
mov [con_write_string], eax |
push ecx |
push sz_con_set_flags |
call ebx |
mov [con_set_flags], eax |
push ecx |
push sz_con_set_cursor_pos |
call ebx |
mov [con_set_cursor_pos], eax |
push ecx |
push sz_con_printf |
call ebx |
mov [con_printf], eax |
mov eax, [28] |
cmp [eax], byte 34 ; quote |
jne .no_quote |
inc eax |
.no_quote: |
push eax |
push -1 |
push -1 |
push -1 |
push -1 |
call [con_init] |
.do_nothing: |
mov eax, con_handle ; return pointer to console descriptor |
pop edi |
pop esi |
pop ebx |
ret 4 |
align 16 |
;********************************************************************************** |
WriteFile: ;/////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hFile [ebp + 8] ; handle to the file |
%define lpBuffer [ebp + 12] ; pointer to buffer containing data |
%define nNumberOfBytesToWrite [ebp + 16] ; number of bytes to be written |
%define lpNumberOfBytesWritten [ebp + 20] ; pointer to variable that receives number of bytes written |
%define lpOverlapped [ebp + 24] ; pointer to OVERLAPPED structure |
push ebp |
mov ebp, esp |
push ebx |
push esi |
push edi |
;--------- |
mov eax, hFile |
cmp [eax + 8], dword "CON" |
je .con |
lea edx, [eax + 8] |
push edx ;filepath |
dec esp |
mov [esp], byte 0 |
push dword lpBuffer ;buffer |
push dword nNumberOfBytesToWrite;count |
push dword 0 |
push dword [eax + 4];position ; in InternalFileInfo in libio |
push dword F70_WRITE_F |
mov ebx, esp |
mov eax, 70 |
int 64 |
add esp, 25 ; restore stack |
mov edx, lpNumberOfBytesWritten |
mov [edx], ebx |
mov edx, hFile |
add [edx + 4], ebx |
jmp .exit |
.con: |
; push dword lpBuffer |
; call [con_printf] |
; add esp, 4 |
push dword nNumberOfBytesToWrite |
push dword lpBuffer |
call [con_write_string] |
; push dword lpBuffer |
; call [con_write_asciiz] |
.exit: |
;--------- |
pop edi |
pop esi |
pop ebx |
pop ebp |
ret 20 |
%undef hFile |
%undef lpBuffer |
%undef nNumberOfBytesToWrite |
%undef lpNumberOfBytesWritten |
%undef lpOverlapped |
align 16 |
;********************************************************************************** |
ReadFile: ;//////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hFile [ebp + 8] ; handle to the file |
%define lpBuffer [ebp + 12] ; pointer to buffer that receives data |
%define nNumberOfBytesToRead [ebp + 16] ; maximum number of bytes to read |
%define lpNumberOfBytesRead [ebp + 20] ; pointer to variable that receives number of bytes read |
%define lpOverlapped [ebp + 24] ; pointer to OVERLAPPED structure |
push ebp |
mov ebp, esp |
push ebx |
push esi |
push edi |
; push dword 0 |
; call GetStdHandle |
;--------- |
mov eax, hFile |
cmp [eax + 8], dword "CON" |
je .con |
; lea eax, [eax + 8] |
; push eax |
; call [con_write_asciiz] |
lea edx, [eax + 8] |
push edx ;filepath |
dec esp |
mov [esp], byte 0 |
push dword lpBuffer ;buffer |
push dword nNumberOfBytesToRead;count |
push dword 0 |
push dword [eax + 4];position ; in InternalFileInfo in libio |
push dword F70_READ_F |
mov ebx, esp |
mov eax, 70 |
int 64 |
add esp, 25 ; restore stack |
mov edx, lpNumberOfBytesRead |
mov [edx], ebx |
mov edx, hFile |
add [edx + 4], ebx |
jmp .exit |
.con: |
push dword nNumberOfBytesToRead |
push dword lpBuffer |
call [con_gets] |
.exit: |
;--------- |
pop edi |
pop esi |
pop ebx |
pop ebp |
ret 20 |
%undef hFile |
%undef lpBuffer |
%undef nNumberOfBytesToRead |
%undef lpNumberOfBytesRead |
%undef lpOverlapped |
align 16 |
;********************************************************************************** |
SetConsoleMode: ;////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
; ignore input parameters |
xor eax, eax |
dec eax |
ret 8 |
align 16 |
;********************************************************************************** |
GetCommandLineA: ;///////////////////////////////////////////////////////////////// |
;********************************************************************************** |
push edi |
mov edi, [28] |
xor al, al |
xor ecx, ecx |
dec ecx |
repne scasb |
mov eax, edi |
pop edi |
ret |
align 16 |
;********************************************************************************** |
GlobalAlloc: ;///////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define uFlags [esp + 4 +1*4] ; memory allocation attributes |
%define dwBytes [esp + 8 +1*4] ; number of bytes to allocate |
push ebx |
; uFlags ignored |
mov eax, 68 |
mov ebx, 12 |
mov ecx, dwBytes |
int 64 |
pop ebx |
ret 8 |
%undef uFlags |
%undef dwBytes |
align 16 |
;********************************************************************************** |
GlobalFree: ;////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hMem [esp + 4 +1*4] ; handle to global memory object |
push ebx |
mov eax, 68 |
mov ebx, 13 |
mov ecx, hMem |
int 64 |
pop ebx |
ret 4 |
%undef hMem |
align 16 |
;********************************************************************************** |
GlobalReAlloc: ;/////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hMem [esp + 4 +1*4] ; handle to global memory object |
%define dwBytes [esp + 8 +1*4] ; new size of memory block in bytes |
%define uFlags [esp + 12 +1*4] ; reallocation options |
push ebx |
; uFlags ignored |
mov eax, 68 |
mov ebx, 20 |
mov ecx, dwBytes |
mov edx, hMem |
int 64 |
pop ebx |
ret 12 |
%undef hMem |
%undef dwBytes |
%undef uFlags |
align 16 |
;********************************************************************************** |
Sleep: ;/////////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define dwMilliseconds [esp + 4 +1*4] ; time interval |
push ebx |
mov eax, dwMilliseconds |
mov ebx, 10 |
cmp eax, ebx |
jae .ae |
add eax, 10 ; avoid zero result if dwMilliseconds < 10 |
.ae: |
xor edx, edx |
div ebx |
mov ebx, eax |
mov eax, 5 |
int 64 |
pop ebx |
ret 4 |
%undef dwMilliseconds |
align 16 |
;********************************************************************************** |
FlushConsoleInputBuffer: ;///////////////////////////////////////////////////////// |
;********************************************************************************** |
; not implemented correctly |
xor eax, eax |
dec eax |
ret 4 |
align 16 |
;********************************************************************************** |
CloseHandle: ;///////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hObject [esp + 4 +1*4] |
push ebx |
mov eax, 68 |
mov ebx, 13 |
mov ecx, hObject |
int 64 |
pop ebx |
ret 4 |
%undef hObject |
align 16 |
;********************************************************************************** |
GetFileSize: ;///////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hFile [esp + 4 +3*4] |
%define lpFileSizeHigh [esp + 8 +3*4] |
push ebx |
push esi |
push edi |
; lpFileSizeHigh ignored |
mov [esp - (25 + 40) + 0], dword F70_GETATTR_FD |
mov [esp - (25 + 40) + 8], dword 0 |
mov [esp - (25 + 40) + 20], byte 0 |
lea eax, [esp - 40] |
mov [esp - (25 + 40) + 16], eax |
lea ebx, [esp - (25 + 40)] |
mov eax, hFile |
lea eax, [eax + 8] ; as in InternalFileInfo in libio |
mov [esp - (25 + 40) + 21], eax |
mov eax, 70 |
int 64 |
test eax, eax |
jz .no_error |
mov eax, INVALID_FILE_SIZE |
jmp .exit |
.no_error: |
mov eax, [esp - (25 + 40) + 25 + 32] ; file.size |
.exit: |
pop edi |
pop esi |
pop ebx |
ret 8 |
%undef hFile |
%undef lpFileSizeHigh |
align 16 |
;********************************************************************************** |
CreateFileA: ;////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define lpFileName [esp + 4 +3*4] |
%define dwDesiredAccess [esp + 8 +3*4] |
%define dwShareMode [esp + 12 +3*4] |
%define lpSecurityAttributes [esp + 16 +3*4] |
%define dwCreationDisposition [esp + 20 +3*4] |
%define dwFlagsAndAttributes [esp + 24 +3*4] |
%define hTemplateFile [esp + 28 +3*4] |
push ebx |
push esi |
push edi |
;--------- |
; push dword 0 |
; call GetStdHandle |
; push dword lpFileName |
; call [con_write_asciiz] |
mov eax, 68 |
mov ebx, 12 |
mov ecx, 4096 |
int 64 |
mov edx, eax |
lea edi, [eax + 8] ; as in InternalFileInfo in libio |
mov esi, lpFileName |
.copy_name: |
lodsb |
stosb |
test al, al |
jnz .copy_name |
mov eax, dwCreationDisposition |
cmp eax, CREATE_ALWAYS |
je .create_always |
cmp eax, OPEN_EXISTING |
je .open_existing |
mov eax, INVALID_HANDLE_VALUE |
jmp .exit |
.open_existing: |
lea eax, [edx + 8] |
push eax ;filepath |
dec esp |
mov [esp], byte 0 |
push dword 0 ; buffer |
push dword 0 ; count |
push dword 0 |
push dword 0 |
push dword F70_READ_F |
mov ebx, esp |
mov eax, 70 |
int 64 |
add esp, 25 ; restore stack |
test eax, eax |
jz .no_error |
mov eax, INVALID_HANDLE_VALUE |
jmp .exit |
.no_error: |
mov eax, edx ; return pointer to file descriptor |
jmp .exit |
.create_always: |
lea eax, [edx + 8] |
push eax ;filepath |
dec esp |
mov [esp], byte 0 |
push dword 0 ; buffer |
push dword 0 ; count |
push dword 0 |
push dword 0 |
push dword F70_CREATE_F |
mov ebx, esp |
mov eax, 70 |
int 64 |
add esp, 25 ; restore stack |
mov eax, edx ; return pointer to file descriptor |
jmp .exit |
.exit: |
;--------- |
pop edi |
pop esi |
pop ebx |
ret 28 |
%undef lpFileName |
%undef dwDesiredAccess |
%undef dwShareMode |
%undef lpSecurityAttributes |
%undef dwCreationDisposition |
%undef dwFlagsAndAttributes |
%undef hTemplateFile |
align 16 |
;********************************************************************************** |
SetFilePointer: ;////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hFile [esp + 4 +3*4] |
%define lDistanceToMove [esp + 8 +3*4] |
%define lpDistanceToMoveHigh [esp + 12 +3*4] |
%define dwMoveMethod [esp + 16 +3*4] |
push ebx |
push esi |
push edi |
;--------- |
mov eax, hFile |
cmp dwMoveMethod, dword FILE_BEGIN |
je .FILE_BEGIN |
cmp dwMoveMethod, dword FILE_CURRENT |
je .FILE_CURRENT |
jmp .FILE_END |
.FILE_BEGIN: |
mov edx, lDistanceToMove |
mov [eax + 4], edx |
jmp .exit |
.FILE_CURRENT: |
mov edx, lDistanceToMove |
add [eax + 4], edx |
jmp .exit |
.FILE_END: |
push dword 0 |
push eax |
call GetFileSize |
mov edx, eax |
mov eax, hFile |
mov [eax + 4], edx |
mov edx, lDistanceToMove |
add [eax + 4], edx |
.exit: |
mov eax, [eax + 4] |
;--------- |
pop edi |
pop esi |
pop ebx |
ret 16 |
%undef hFile |
%undef lDistanceToMove |
%undef lpDistanceToMoveHigh |
%undef dwMoveMethod |
align 16 |
;********************************************************************************** |
VirtualAlloc: ;//////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define lpAddress [esp + 4 +1*4] |
%define dwSize [esp + 8 +1*4] |
%define flAllocationType [esp + 12 +1*4] |
%define flProtect [esp + 16 +1*4] |
push ebx |
mov eax, 68 |
mov ebx, 12 |
mov ecx, dwSize |
int 64 |
pop ebx |
ret 16 |
%undef lpAddress |
%undef dwSize |
%undef flAllocationType |
%undef flProtect |
align 16 |
;********************************************************************************** |
VirtualFree: ;///////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define lpAddress [esp + 4 +1*4] |
%define dwSize [esp + 8 +1*4] |
%define dwFreeType [esp + 12 +1*4] |
push ebx |
mov eax, 68 |
mov ebx, 13 |
mov ecx, lpAddress |
int 64 |
pop ebx |
ret 12 |
%undef lpAddress |
%undef dwSize |
%undef dwFreeType |
align 16 |
;********************************************************************************** |
SetConsoleCursorPosition: ;//////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hConsoleOutput [esp + 4 +3*4] |
%define dwCursorPosition [esp + 8 +3*4] |
push ebx |
push esi |
push edi |
mov edx, dwCursorPosition |
shld eax, edx, 16 |
shr edx, 16 |
push eax |
push edx |
call [con_set_cursor_pos] |
pop edi |
pop esi |
pop ebx |
ret 8 |
%undef hConsoleOutput |
%undef dwCursorPosition |
align 16 |
;********************************************************************************** |
DeleteFileA: ;///////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define lpFileName [esp + 4 +1*4] ; name of file |
push ebx |
mov [esp - (25 + 40) + 0], dword F70_DELETE_FD |
mov [esp - (25 + 40) + 8], dword 0 |
mov [esp - (25 + 40) + 20], byte 0 |
lea eax, [esp - 40] |
mov [esp - (25 + 40) + 16], eax |
lea ebx, [esp - (25 + 40)] |
mov eax, lpFileName |
mov [esp - (25 + 40) + 21], eax |
mov eax, 70 |
int 64 |
pop ebx |
ret 4 |
%undef lpFileName |
align 16 |
;********************************************************************************** |
FindClose: ;/////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hFindFile [esp + 4 +1*4] ; file search handle |
ret 4 |
%undef hFindFile |
align 16 |
;********************************************************************************** |
FindFirstFileA: ;////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define lpFileName [esp + 4 +3*4] ; name of file |
%define lpFindFileData [esp + 8 +3*4] ; pointer to WIN32_FIND_DATA structure |
push ebx |
push esi |
push edi |
pop edi |
pop esi |
pop ebx |
ret 8 |
%undef lpFileName |
%undef lpFindFileData |
align 16 |
;********************************************************************************** |
GetLocalTime: ;/////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define lpSystemTime [esp + 4] ; pointer to SYSTEMTIME structure |
; yet not implemented |
; mov eax, lpSystemTime |
; mov [eax + 0], dword 12345678H |
; mov [eax + 4], dword 12345678H |
; mov [eax + 8], dword 12345678H |
; mov [eax + 12], dword 12345678H |
; MSDN: This function does not return a value. |
ret 4 |
%undef lpSystemTime |
align 16 |
;********************************************************************************** |
GetLastError: ;//////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
xor eax, eax |
ret |
align 16 |
;********************************************************************************** |
GetProcessHeap: ;//////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
xor eax, eax |
dec eax |
ret |
align 16 |
;********************************************************************************** |
HeapAlloc: ;/////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hHeap [esp + 4 +1*4] |
%define dwFlags [esp + 8 +1*4] |
%define dwBytes [esp + 12 +1*4] |
push ebx |
mov eax, 68 |
mov ebx, 12 |
mov ecx, dwBytes |
int 64 |
pop ebx |
ret 12 |
%undef hHeap |
%undef dwFlags |
%undef dwBytes |
align 16 |
;********************************************************************************** |
HeapFree: ;//////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hHeap [esp + 4 +1*4] |
%define dwFlags [esp + 8 +1*4] |
%define lpMem [esp + 12 +1*4] |
push ebx |
mov eax, 68 |
mov ebx, 13 |
mov ecx, lpMem |
int 64 |
pop ebx |
ret 12 |
%undef hHeap |
%undef dwFlags |
%undef lpMem |
align 16 |
;********************************************************************************** |
HeapReAlloc: ;///////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
%define hHeap [esp + 4 +1*4] |
%define dwFlags [esp + 8 +1*4] |
%define lpMem [esp + 12 +1*4] |
%define dwBytes [esp + 16 +1*4] |
push ebx |
mov eax, 68 |
mov ebx, 20 |
mov ecx, dwBytes |
mov edx, lpMem |
int 64 |
pop ebx |
ret 16 |
%undef hHeap |
%undef dwFlags |
%undef lpMem |
%undef dwBytes |
; ------------------------------------------------------------- ; |
load.library: |
mov eax, 68 |
mov ebx, 19 |
mov ecx, [esp + 4] |
int 64 |
ret 4 |
; ------------------------------------------------------------- ; |
getprocaddress: |
mov edx, [esp + 8] |
xor eax, eax |
test edx, edx |
jz .end |
.next: |
xor eax, eax |
cmp [edx], dword 0 |
jz .end |
mov esi, [edx] |
mov edi, [esp + 4] |
.next_: |
lodsb |
scasb |
jne .fail |
or al, al |
jnz .next_ |
jmp .ok |
.fail: |
add edx, 8 |
jmp .next |
.ok: |
mov eax, [edx + 4] |
.end: |
ret 8 |
; ------------------------------------------------------------- ; |
section '.data' align 16 |
con_init dd 0 |
con_write_asciiz dd 0 |
con_exit dd 0 |
con_gets dd 0 |
con_write_string dd 0 |
con_set_flags dd 0 |
con_set_cursor_pos dd 0 |
con_printf dd 0 |
console dd 0 |
sz_con_init db "con_init",0 |
sz_con_write_asciiz db "con_write_asciiz",0 |
sz_con_exit db "con_exit",0 |
sz_con_gets db "con_gets",0 |
sz_con_write_string db "con_write_string",0 |
sz_console db "/sys/lib/console.obj",0 |
sz_con_set_flags db "con_set_flags",0 |
sz_con_set_cursor_pos db "con_set_cursor_pos",0 |
sz_con_printf db "con_printf",0 |
con_handle: |
dd 0 |
dd 0 |
dd "CON" |
/programs/emulator/kwine/lib/msvcrt.dll.asm |
---|
0,0 → 1,243 |
; ------------------------------------------------------------- ; |
; KWINE is a fork of program PELoad written by 0CodErr |
; author - rgimad |
; ------------------------------------------------------------- ; |
GLOBAL EXPORTS |
section '.exprt' align 16 |
;********************************************************************************** |
EXPORTS: ;///////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
dd sz__getch, _getch |
dd sz__kbhit, _kbhit |
dd sz_printf, printf |
dd sz_puts, puts |
dd sz_gets, gets |
dd sz_strlen, strlen |
dd 0 |
sz__getch db "_getch",0 |
sz__kbhit db "_kbhit",0 |
sz_printf db "printf",0 |
sz_puts db "puts",0 |
sz_gets db "gets",0 |
sz_strlen db "strlen",0 |
section '.code' align 16 |
align 16 |
;********************************************************************************** |
_getch: ;////////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
push ebx |
push esi |
push edi |
call load_console_lib |
pop ecx |
call [con_getch] |
push ecx |
pop edi |
pop esi |
pop ebx |
ret |
align 16 |
;********************************************************************************** |
_kbhit: ;////////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
push ebx |
push esi |
push edi |
call load_console_lib |
pop ecx |
call [con_kbhit] |
push ecx |
pop edi |
pop esi |
pop ebx |
ret |
align 16 |
;********************************************************************************** |
printf: ;////////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
;pushad |
;push ebx |
;push esi |
;push edi |
call load_console_lib |
;popad |
pop ecx |
call [con_printf] |
push ecx |
;pop edi |
;pop esi |
;pop ebx |
ret |
align 16 |
;********************************************************************************** |
puts: ;////////////////////////////////////////////////////////////////////////// cdecl |
;********************************************************************************** |
;push ebx |
;push esi |
;push edi |
call load_console_lib |
pop ecx ; pop return address |
call [con_write_asciiz] |
push ecx ; push return address again |
;pop edi |
;pop esi |
;pop ebx |
ret |
align 16 |
;********************************************************************************** |
gets: ;////////////////////////////////////////////////////////////////////////// cdecl |
;********************************************************************************** |
;push ebx |
;push esi |
;push edi |
call load_console_lib |
pop ecx |
pop edx |
push 25 ;; second arg of con_gets assume by default |
push edx |
call [con_gets] |
push ecx |
;pop edi |
;pop esi |
;pop ebx |
ret |
align 16 |
;********************************************************************************** |
strlen: ;////////////////////////////////////////////////////////////////////////// |
;********************************************************************************** |
push ebx |
push esi |
push edi |
call load_console_lib |
xor eax,eax |
mov edi, dword [esp + 4 + 4 + 4 + 4] |
.while1: |
inc eax |
cmp byte [eax + edi], 0 |
jnz .while1 |
pop edi |
pop esi |
pop ebx |
ret |
load_console_lib: ;; stdcall ? |
; if already loaded then do nothing |
cmp [console], dword 0 |
jne .do_nothing |
push sz_console |
call load.library |
mov [console], eax |
mov ecx, eax |
mov ebx, getprocaddress |
;; |
push ecx |
push sz_con_init |
call ebx |
mov [con_init], eax |
;; |
push ecx |
push sz_con_getch |
call ebx |
mov [con_getch], eax |
;; |
push ecx |
push sz_con_kbhit |
call ebx |
mov [con_kbhit], eax |
;; |
push ecx |
push sz_con_printf |
call ebx |
mov [con_printf], eax |
;; |
push ecx |
push sz_con_write_asciiz |
call ebx |
mov [con_write_asciiz], eax |
;; |
push ecx |
push sz_con_gets |
call ebx |
mov [con_gets], eax |
push ecx |
push sz_con_init |
call ebx |
mov [con_init], eax |
push con_caption |
push -1 |
push -1 |
push -1 |
push -1 |
call [con_init] |
.do_nothing: |
ret |
; ------------------------------------------------------------- ; stdcall |
load.library: |
mov eax, 68 |
mov ebx, 19 |
mov ecx, [esp + 4] |
int 64 |
ret 4 |
; ------------------------------------------------------------- ; |
getprocaddress: |
mov edx, [esp + 8] |
xor eax, eax |
test edx, edx |
jz .end |
.next: |
xor eax, eax |
cmp [edx], dword 0 |
jz .end |
mov esi, [edx] |
mov edi, [esp + 4] |
.next_: |
lodsb |
scasb |
jne .fail |
or al, al |
jnz .next_ |
jmp .ok |
.fail: |
add edx, 8 |
jmp .next |
.ok: |
mov eax, [edx + 4] |
.end: |
ret 8 |
; ------------------------------------------------------------- ; |
section '.data' align 16 |
con_caption db "test!",0 |
con_init dd 0 |
con_getch dd 0 |
con_kbhit dd 0 |
con_printf dd 0 |
con_write_asciiz dd 0 |
con_gets dd 0 |
console dd 0 |
sz_con_init db "con_init",0 |
sz_con_getch db "con_getch",0 |
sz_con_kbhit db "con_kbhit",0 |
sz_con_printf db "con_printf",0 |
sz_con_write_asciiz db "con_write_asciiz",0 |
sz_con_gets db "con_gets",0 |
sz_console db "/sys/lib/console.obj",0 |
/programs/emulator/kwine/make.bat |
---|
0,0 → 1,22 |
@echo off |
set NASM="nasm\nasm.exe" |
%NASM% -f coff "lib\msvcrt.dll.asm" -o "..\lib\msvcrt.dll" |
strip --strip-debug "../lib/msvcrt.dll" |
%NASM% -f coff "lib/kernel32.dll.asm" -o "../lib/kernel32.dll" |
strip --strip-debug "../lib/kernel32.dll" |
%NASM% -f bin "kwine.asm" -o "../kwine" |
if %errorlevel% == 0 ( |
echo compiled succesfully. |
ubuntu1804 run "mcopy -D o -i ../kolibri.img ../lib/msvcrt.dll ::kwine/lib/msvcrt.dll" |
ubuntu1804 run "mcopy -D o -i ../kolibri.img ../lib/kernel32.dll ::kwine/lib/kernel32.dll" |
ubuntu1804 run "mcopy -D o -i ../kolibri.img ../kwine ::kwine/kwine" |
qemu-system-x86_64 -fda ../kolibri.img -m 256 |
) else ( |
echo compilation failed. |
) |
pause |
/programs/emulator/kwine/make_old.txt |
---|
0,0 → 1,5 |
@echo off |
fasm lib\kernel32.dll.asm ..\lib\kernel32.dll |
fasm lib\msvcrt.dll.asm ..\lib\msvcrt.dll |
fasm kwine.asm ..\kwine |
pause |
/programs/emulator/kwine/readme.txt |
---|
0,0 → 1,8 |
kwine - kolibri wine. |
Developers: |
- 0CodErr founder of project (PEload) |
- rgimad some improvements |
Topic: |
http://board.kolibrios.org/viewtopic.php?f=9&t=2318&p=74314#p74308 |
/programs/fs/unimg/unimg |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |