forked from KolibriOS/kolibrios
add new version 'load_lib.mac',
'animage' use new macros 'load_lib.mac' git-svn-id: svn://kolibrios.org@8227 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ab4b9e7585
commit
b9e8e3f735
@ -125,9 +125,11 @@ proc strcmp, str1:dword, str2:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
|
if defined dll.Load
|
||||||
s_libdir:
|
s_libdir:
|
||||||
db '/sys/lib/'
|
db '/sys/lib/'
|
||||||
.fname rb 32
|
.fname rb 32
|
||||||
|
end if
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
proc mem.Alloc, size
|
proc mem.Alloc, size
|
||||||
push ebx ecx
|
push ebx ecx
|
||||||
|
534
programs/load_lib.mac
Normal file
534
programs/load_lib.mac
Normal file
@ -0,0 +1,534 @@
|
|||||||
|
; The macros for load any library/libraries:
|
||||||
|
; Copyright (c) 2009, <Lrz>
|
||||||
|
; All rights reserved.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
macro @use_library mem_alloc,mem_free,mem_realloc,dll_load
|
||||||
|
{
|
||||||
|
local lp1
|
||||||
|
local lp2
|
||||||
|
local lp3
|
||||||
|
local lp4
|
||||||
|
local lp5
|
||||||
|
local lp6
|
||||||
|
local file_name
|
||||||
|
local l_lib_m1
|
||||||
|
local l_lib_m2
|
||||||
|
local l_lib_m3
|
||||||
|
local l_lib_m4
|
||||||
|
|
||||||
|
library_fun_memory_alloc equ mem_alloc
|
||||||
|
library_fun_memory_free equ mem_free
|
||||||
|
library_fun_memory_realloc equ mem_realloc
|
||||||
|
library_fun_dll_load equ dll_load
|
||||||
|
|
||||||
|
align 4
|
||||||
|
arrea_xx dd 0
|
||||||
|
file_name db '/sys/@notify',0
|
||||||
|
|
||||||
|
if lang eq ru
|
||||||
|
l_lib_m1 db '"‘¨á⥬ ï ®è¨¡ª ',13,10,'<27>¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,0
|
||||||
|
l_lib_m2 db '"‘¨á⥬ ï ®è¨¡ª ',13,10,'Žè¨¡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,0
|
||||||
|
l_lib_m3 db 39,13,10,'¥ ©¤¥ äãªæ¨ï ',39,0
|
||||||
|
l_lib_m4 db 39,'" -tE',0
|
||||||
|
else
|
||||||
|
l_lib_m1 db '"System error',13,10,'Sorry I cannot found library ',39,0
|
||||||
|
l_lib_m2 db '"System error',13,10,'Error on load import library ',39,0
|
||||||
|
l_lib_m3 db 39,13,10,'cannot found function ',39,0
|
||||||
|
l_lib_m4 db 39,'" -tE',0
|
||||||
|
end if
|
||||||
|
|
||||||
|
align 4
|
||||||
|
run_notify_struct:
|
||||||
|
.Function dd 7
|
||||||
|
.Position dd 0
|
||||||
|
.Flags dd ?
|
||||||
|
.Count dd 0
|
||||||
|
.Buffer dd 0
|
||||||
|
db 0
|
||||||
|
.FileName dd file_name
|
||||||
|
|
||||||
|
@library_name equ dword [esp+16]
|
||||||
|
@cur_dir_path equ dword [esp+12]
|
||||||
|
@library_path equ dword [esp+8]
|
||||||
|
@point_dir_name equ dword [esp+4]
|
||||||
|
|
||||||
|
;description:
|
||||||
|
; £®â®¢¨¬ ⥪áâ ¤«ï ¯®ª § ç¥à¥§ @notify:
|
||||||
|
; 1) ¢ë¤¥«ï¥¬ ¯ ¬ïâì ¢ [arrea_xx] ® ¥ ¡®«ìè¥ ®¤®£® à §
|
||||||
|
; 2) ª®¯¨à㥬 § £®«®¢®ª (¥á«¨ ¥áâì ¨¬ï äãªæ¨¨ â® ¤®¡ ¢«ï¥¬ ¥£® ª § £®«®¢ªã) ¨ ⥪áâ á®®¡é¥¨ï ¢ [arrea_xx]
|
||||||
|
;input:
|
||||||
|
; ebp+8 - library name
|
||||||
|
; ebp+12 - 0 ¨«¨ ¨¬ï äãªæ¨¨, ª®â®àãî ¥ 㤠«®áì íªá¯®àâ¨à®¢ âì
|
||||||
|
;output:
|
||||||
|
; eax = -1
|
||||||
|
align 4
|
||||||
|
l_lib_init_error_window:
|
||||||
|
push ebp
|
||||||
|
mov ebp,esp
|
||||||
|
cmp dword[arrea_xx],0
|
||||||
|
jne .no_msg ;¥á«¨ à ìè¥ ¡ë«® ᮧ¤ ® ¤à㣮¥ á®®¡é¥¨¥
|
||||||
|
pushad
|
||||||
|
|
||||||
|
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||||
|
mcall SF_SYS_MISC,SSF_MEM_ALLOC,4096
|
||||||
|
mov [arrea_xx],eax
|
||||||
|
|
||||||
|
mov edi,eax
|
||||||
|
mov esi,l_lib_m2 ;á®®¡é¥¨¥ ¥á«¨ ¥ 㤠«®áì ¨¬¯®àâ¨à®¢ âì äãªæ¨î
|
||||||
|
cmp dword[ebp+12],0
|
||||||
|
je @f
|
||||||
|
mov esi,l_lib_m1 ;á®®¡é¥¨¥ ¥á«¨ ¥ 㤠«®áì § £à㧨âì ¡¨¡«¨®â¥ªã
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
movsb
|
||||||
|
cmp byte[esi],0
|
||||||
|
jne @b
|
||||||
|
;¤®¡ ¢«ï¥¬ ¨¬ï ¡¨¡«¨®â¥ª¨
|
||||||
|
mov esi,[ebp+8]
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
movsb
|
||||||
|
cmp byte[esi],0
|
||||||
|
jne @b
|
||||||
|
|
||||||
|
cmp dword[ebp+12],0
|
||||||
|
je .lp1
|
||||||
|
;¤®¡ ¢«ï¥¬ á¥à¥¤¨ã á®®¡é¥¨ï
|
||||||
|
mov esi,l_lib_m3
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
movsb
|
||||||
|
cmp byte[esi],0
|
||||||
|
jne @b
|
||||||
|
;¤®¡ ¢«ï¥¬ ¨¬ï äãªæ¨¨
|
||||||
|
mov esi,[ebp+12]
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
movsb
|
||||||
|
cmp byte[esi],0
|
||||||
|
jne @b
|
||||||
|
|
||||||
|
.lp1: ;á®®¡é¥¨¥ ¥á«¨ ¥ 㤠«®áì § £à㧨âì ¡¨¡«¨®â¥ªã
|
||||||
|
;¤®¡ ¢«ï¥¬ ª®¥æ á®®¡é¥¨ï
|
||||||
|
mov esi,l_lib_m4
|
||||||
|
align 4
|
||||||
|
@@:
|
||||||
|
movsb
|
||||||
|
cmp byte[esi],0
|
||||||
|
jne @b
|
||||||
|
mov byte[edi],0
|
||||||
|
|
||||||
|
popad
|
||||||
|
.no_msg:
|
||||||
|
or eax,-1
|
||||||
|
pop ebp
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
align 4
|
||||||
|
@copy_path:
|
||||||
|
mov esi,@cur_dir_path
|
||||||
|
mov edi,@library_path
|
||||||
|
xor eax,eax
|
||||||
|
cld
|
||||||
|
align 4
|
||||||
|
.lp1:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test eax,eax
|
||||||
|
jnz .lp1
|
||||||
|
mov esi,edi
|
||||||
|
dec esi ;¯¥à¥å®¤ ᨬ¢®« ª®æ áâப¨ @cur_dir_path
|
||||||
|
std
|
||||||
|
align 4
|
||||||
|
.lp2:
|
||||||
|
lodsb
|
||||||
|
cmp al,'/'
|
||||||
|
jnz .lp2
|
||||||
|
mov edi,esi
|
||||||
|
add edi,2
|
||||||
|
cld
|
||||||
|
mov esi,@point_dir_name
|
||||||
|
test esi,esi
|
||||||
|
jz .str_lp4
|
||||||
|
|
||||||
|
;¯à®¢¥àª ®â®á¨â¥«ìëå ¯ã⥩ c ¤¢ã¬ï â®çª ¬¨ '../'
|
||||||
|
cmp word[esi],'..'
|
||||||
|
jne .lp3
|
||||||
|
dec edi ;¤«ï ¯¥à¥å®¤ '/'
|
||||||
|
.lp6:
|
||||||
|
add esi,3 ;¯à®¯ã᪠¥¬ ®¤® ¯®¤ï⨥ '../'
|
||||||
|
.lp5:
|
||||||
|
dec edi ;¨¤¥¬ ¯® ¯ ¯ª ¬
|
||||||
|
cmp byte[edi],'/'
|
||||||
|
jnz .lp5
|
||||||
|
cmp word[esi],'..'
|
||||||
|
je .lp6
|
||||||
|
inc edi ;¤«ï ¯¥à¥å®¤ '/'
|
||||||
|
|
||||||
|
;ª®¯¨à®¢ ¨¥ ®â®á¨â¥«ì®£® ¯ãâ¨
|
||||||
|
align 4
|
||||||
|
.lp3:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test eax,eax
|
||||||
|
jnz .lp3
|
||||||
|
dec edi
|
||||||
|
.str_lp4:
|
||||||
|
mov esi,@library_name
|
||||||
|
align 4
|
||||||
|
.lp4:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test eax,eax
|
||||||
|
jnz .lp4
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
macro sys_load_library library_name__, library_path__, system_path__, myimport, point_dir_name__
|
||||||
|
{
|
||||||
|
local i_begin
|
||||||
|
local i_error
|
||||||
|
local i_exit
|
||||||
|
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,system_path__ ; load of sys directory
|
||||||
|
test eax,eax
|
||||||
|
jnz i_begin
|
||||||
|
|
||||||
|
if point_dir_name__ eq
|
||||||
|
copy_path library_name__, [32], library_path__,0
|
||||||
|
else
|
||||||
|
;the macros making way /current path a program/ + name system library
|
||||||
|
copy_path library_name__, [32], library_path__,point_dir_name__
|
||||||
|
end if
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative
|
||||||
|
test eax,eax
|
||||||
|
jnz i_begin
|
||||||
|
jmp i_error
|
||||||
|
align 4
|
||||||
|
i_begin:
|
||||||
|
import_boxlib myimport
|
||||||
|
test eax,eax
|
||||||
|
jz i_exit
|
||||||
|
i_error:
|
||||||
|
push eax
|
||||||
|
push dword library_name__
|
||||||
|
call l_lib_init_error_window
|
||||||
|
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify
|
||||||
|
i_exit:
|
||||||
|
}
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
macro load_library library_name__, library_path__, system_path__, myimport, point_dir_name__
|
||||||
|
{
|
||||||
|
local i_begin
|
||||||
|
local i_error
|
||||||
|
local i_exit
|
||||||
|
|
||||||
|
if point_dir_name__ eq
|
||||||
|
copy_path library_name__, [32], library_path__,0
|
||||||
|
else
|
||||||
|
;the macros making way /current path a program/ + name system library
|
||||||
|
copy_path library_name__, [32], library_path__,point_dir_name__
|
||||||
|
end if
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative
|
||||||
|
test eax,eax
|
||||||
|
jnz i_begin
|
||||||
|
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,system_path__ ; load of sys directory
|
||||||
|
test eax,eax
|
||||||
|
jnz i_begin
|
||||||
|
jmp i_error
|
||||||
|
align 4
|
||||||
|
i_begin:
|
||||||
|
import_boxlib myimport
|
||||||
|
test eax,eax
|
||||||
|
jz i_exit
|
||||||
|
i_error:
|
||||||
|
push eax
|
||||||
|
push dword library_name__
|
||||||
|
call l_lib_init_error_window
|
||||||
|
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify
|
||||||
|
i_exit:
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
;description:
|
||||||
|
; ¬ ªà®á § £à㧪¨ ¡¨¡«¨®â¥ª ¨§ á¨á⥬®© ¯ ¯ª¨, ¥á«¨ ¡¨¡«¨®â¥ª ¥ ©¤¥
|
||||||
|
; ⮣¤ ¯®¨áª ¨¤¥â ¢ ⥪ã饩 ¯ ¯ª¥ á ¯à®£à ¬¬®©
|
||||||
|
macro sys_load_libraries _start,_end
|
||||||
|
{
|
||||||
|
local cycle0
|
||||||
|
local end_steep
|
||||||
|
local cycle0n
|
||||||
|
local cycle1
|
||||||
|
local cycle1n
|
||||||
|
local cycle1e
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
library_name__ equ [ebp]
|
||||||
|
library_path__ equ [ebp+4]
|
||||||
|
system_path__ equ [ebp+8]
|
||||||
|
my_import equ [ebp+12]
|
||||||
|
point_dir_name__ equ [ebp+16]
|
||||||
|
adr_load_lib equ dword [ebp+20]
|
||||||
|
status_lib equ dword [ebp+24]
|
||||||
|
|
||||||
|
mov ebp,_start
|
||||||
|
mov ecx,(_end-_start)/ll_struc_size
|
||||||
|
align 4
|
||||||
|
cycle0:
|
||||||
|
push ecx
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,system_path__ ; load of sys directory
|
||||||
|
test eax,eax
|
||||||
|
jnz end_steep
|
||||||
|
|
||||||
|
;the macros making way /current path a program/ + name system library
|
||||||
|
copy_path library_name__, [32], library_path__,point_dir_name__
|
||||||
|
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative
|
||||||
|
test eax,eax
|
||||||
|
jnz end_steep
|
||||||
|
or status_lib,1 ; status of code - enable error - not found library
|
||||||
|
|
||||||
|
push eax
|
||||||
|
push dword library_name__
|
||||||
|
call l_lib_init_error_window
|
||||||
|
jmp cycle0n
|
||||||
|
|
||||||
|
align 4
|
||||||
|
end_steep:
|
||||||
|
mov adr_load_lib,eax ;save adr lib in memory
|
||||||
|
import_boxlib my_import
|
||||||
|
test eax,eax
|
||||||
|
jz cycle0n
|
||||||
|
or status_lib,2 ; status of code - enable error - import error
|
||||||
|
push eax
|
||||||
|
push dword library_name__
|
||||||
|
call l_lib_init_error_window
|
||||||
|
cycle0n:
|
||||||
|
pop ecx
|
||||||
|
add ebp,ll_struc_size
|
||||||
|
dec ecx
|
||||||
|
jnz cycle0
|
||||||
|
|
||||||
|
;¢ë¢®¤ á®®¡é¥¨ï ®¡ ®è¨¡ª¥ ¯à¨ § £à㧪¥
|
||||||
|
mov ebp,_start
|
||||||
|
mov ecx,(_end-_start)/ll_struc_size
|
||||||
|
align 4
|
||||||
|
cycle1:
|
||||||
|
mov eax,status_lib
|
||||||
|
test eax,eax
|
||||||
|
jz cycle1n
|
||||||
|
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify
|
||||||
|
mov eax,-1
|
||||||
|
jmp cycle1e
|
||||||
|
align 4
|
||||||
|
cycle1n:
|
||||||
|
add ebp,ll_struc_size
|
||||||
|
dec ecx
|
||||||
|
jnz cycle1
|
||||||
|
cycle1e:
|
||||||
|
}
|
||||||
|
|
||||||
|
;description:
|
||||||
|
; ¬ ªà®á § £à㧪¨ ¡¨¡«¨®â¥ª ¨§ ⥪ã饩 ¯ ¯ª¨ á ¯à®£à ¬¬®©, ¥á«¨ ¡¨¡«¨®â¥ª ¥ ©¤¥
|
||||||
|
; ⮣¤ ¯®¨áª ¨¤¥â ¢ á¨á⥬®© ¯ ¯ª¥
|
||||||
|
macro load_libraries _start,_end
|
||||||
|
{
|
||||||
|
local cycle0
|
||||||
|
local end_steep
|
||||||
|
local cycle0n
|
||||||
|
local cycle1
|
||||||
|
local cycle1n
|
||||||
|
local cycle1e
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
library_name__ equ [ebp]
|
||||||
|
library_path__ equ [ebp+4]
|
||||||
|
system_path__ equ [ebp+8]
|
||||||
|
my_import equ [ebp+12]
|
||||||
|
point_dir_name__ equ [ebp+16]
|
||||||
|
adr_load_lib equ dword [ebp+20]
|
||||||
|
status_lib equ dword [ebp+24]
|
||||||
|
|
||||||
|
mov ebp,_start
|
||||||
|
mov ecx,(_end-_start)/ll_struc_size
|
||||||
|
align 4
|
||||||
|
cycle0:
|
||||||
|
push ecx
|
||||||
|
|
||||||
|
;the macros making way /current path a program/ + name system library
|
||||||
|
copy_path library_name__, [32], library_path__,point_dir_name__
|
||||||
|
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative
|
||||||
|
test eax,eax
|
||||||
|
jnz end_steep
|
||||||
|
|
||||||
|
mcall SF_SYS_MISC,SSF_LOAD_DLL,system_path__ ; load of sys directory
|
||||||
|
test eax,eax
|
||||||
|
jnz end_steep
|
||||||
|
or status_lib,1 ; status of code - enable error - not found library
|
||||||
|
|
||||||
|
push eax
|
||||||
|
push dword library_name__
|
||||||
|
call l_lib_init_error_window
|
||||||
|
jmp cycle0n
|
||||||
|
|
||||||
|
align 4
|
||||||
|
end_steep:
|
||||||
|
mov adr_load_lib,eax ;save adr lib in memory
|
||||||
|
import_boxlib my_import
|
||||||
|
test eax,eax
|
||||||
|
jz cycle0n
|
||||||
|
or status_lib,2 ; status of code - enable error - import error
|
||||||
|
push eax
|
||||||
|
push dword library_name__
|
||||||
|
call l_lib_init_error_window
|
||||||
|
cycle0n:
|
||||||
|
pop ecx
|
||||||
|
add ebp,ll_struc_size
|
||||||
|
dec ecx
|
||||||
|
jnz cycle0
|
||||||
|
|
||||||
|
;¢ë¢®¤ á®®¡é¥¨ï ®¡ ®è¨¡ª¥ ¯à¨ § £à㧪¥
|
||||||
|
mov ebp,_start
|
||||||
|
mov ecx,(_end-_start)/ll_struc_size
|
||||||
|
align 4
|
||||||
|
cycle1:
|
||||||
|
mov eax,status_lib
|
||||||
|
test eax,eax
|
||||||
|
jz cycle1n
|
||||||
|
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify
|
||||||
|
mov eax,-1
|
||||||
|
jmp cycle1e
|
||||||
|
align 4
|
||||||
|
cycle1n:
|
||||||
|
add ebp,ll_struc_size
|
||||||
|
dec ecx
|
||||||
|
jnz cycle1
|
||||||
|
cycle1e:
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
macro copy_path lib_name,dir_path,lib_path,point_dir_name
|
||||||
|
{
|
||||||
|
pushad ;save all registers
|
||||||
|
push dword lib_name
|
||||||
|
push dword dir_path
|
||||||
|
push dword lib_path
|
||||||
|
push dword point_dir_name
|
||||||
|
call @copy_path
|
||||||
|
|
||||||
|
add esp,16
|
||||||
|
;notify_window_run lib_path ;unblok for test load path
|
||||||
|
popad ;restore all registers
|
||||||
|
}
|
||||||
|
|
||||||
|
; ¢ª«îç ¥¬ ¯®ª § á®®¡é¥¨ï ç¥à¥§ @notify:
|
||||||
|
macro notify_window_run message
|
||||||
|
{
|
||||||
|
push eax ebx
|
||||||
|
mov eax,message ;¯ à ¬¥âàë ¤«ï ª®¬ ¤®© áâப¨
|
||||||
|
mov [run_notify_struct.Flags],eax
|
||||||
|
mcall SF_FILE,run_notify_struct
|
||||||
|
pop ebx eax
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
;input:
|
||||||
|
; eax - ¤à¥á ¡¨¡«¨®â¥ª¨ ¢ ¯ ¬ïâ¨
|
||||||
|
; myimport - ¨¬¯®àâ¨àã¥¬ë¥ äãªæ¨¨
|
||||||
|
;output:
|
||||||
|
; eax - ¥á«¨ ã¤ ç® â® 0 ¨«¨ 㪠§ â¥«ì ¨¬ï äãªæ¨¨ ª®â®àãî ¥ 㤠«®áì § £à㧨âì
|
||||||
|
macro import_boxlib myimport
|
||||||
|
{
|
||||||
|
local import_loop
|
||||||
|
local import_find
|
||||||
|
local lp
|
||||||
|
local import_find_next
|
||||||
|
local import_found
|
||||||
|
local import_done
|
||||||
|
local exit
|
||||||
|
local import_not_found
|
||||||
|
; initialize import
|
||||||
|
|
||||||
|
mov edx, eax
|
||||||
|
mov esi,myimport
|
||||||
|
import_loop:
|
||||||
|
lodsd ;mov eax,dword[esi] ;add esi,4 ;¯®«ãç ¥¬ ¢ eax 㪠§ â¥«ì ¨¬ï ¨¬¯®àâ¨à㥬®© äãªæ¨¨
|
||||||
|
test eax, eax
|
||||||
|
jz import_done ;¥á«¨ 㪠§ â¥«ì ¨¬ï äãªæ¨¨ = 0 (¢ ¯®«ì§®¢ ⥫ì᪮© ¯à®£à ¬¬¥)
|
||||||
|
push edx ;á®åà 塞 ç «® ¡¨¡«¨®â¥çëå 㪠§ ⥫¥© äãªæ¨¨
|
||||||
|
import_find:
|
||||||
|
mov ebx, [edx]
|
||||||
|
test ebx, ebx
|
||||||
|
jz import_not_found ;¥á«¨ 㪠§ â¥«ì ¨¬ï äãªæ¨¨ = 0 (¢ ¡¨¡«¨®â¥ª¥)
|
||||||
|
push eax ;eax - 㪠§ â¥«ì ¨¬ï íªá¯®àâ¨à㥬®© äãªæ¨¨ (¢ ¯®«ì§®¢ ⥫ì᪮© ¯à®£à ¬¬¥)
|
||||||
|
lp:
|
||||||
|
mov cl, [eax]
|
||||||
|
cmp cl, [ebx] ;áà ¢¨¢ ¥¬ ¨¬¥ äãªæ¨© ¢ ¡¨¡«¨®â¥ª¥ ¨ ¢ ¯®«ì§®¢ ⥫ì᪮© ¯à®£à ¬¬¥
|
||||||
|
jnz import_find_next ;¥á«¨ §¢ ¨ï ¥ ᮢ¯ «¨
|
||||||
|
test cl, cl
|
||||||
|
jz import_found ;¥á«¨ §¢ ¨ï ᮢ¯ «¨, ¨ 㦥 ª®¥æ áâப¨ (cl=0)
|
||||||
|
inc eax
|
||||||
|
inc ebx
|
||||||
|
jmp lp
|
||||||
|
import_find_next:
|
||||||
|
pop eax
|
||||||
|
add edx, 8 ;8 = 4 ¡ ©â 㪠§ â¥«ì §¢ ¨¥ ¨ 4 ¡ ©â 㪠§ ⥫ì äãªæ¨î
|
||||||
|
jmp import_find
|
||||||
|
import_found:
|
||||||
|
pop ebx ;¢®áâ ¢«¨¢ ¥¬ 㪠§ â¥«ì ¨¬ï äãªæ¨¨ (ª®â®àë© ¡ë« ¢ eax) ¨ ®á¢®¡®¦¤ ¥¬ á⥪
|
||||||
|
mov eax, [edx+4] ;eax = 㪠§ ⥫ì äãªæ¨î (¢ ¡¨¡«¨®â¥ª¥)
|
||||||
|
mov [esi-4], eax ;ª®¯¨à㥬 㪠§ ⥫ì ( äãªæ¨î) ¢ ¯à®£à ¬¬ã, -4 áâ ¢¨¬ ¯®â®¬ã çâ® esi ¡ë«® ᤢ¨ãâ® ª®¬ ¤®© lodsd
|
||||||
|
pop edx ;ãáâ ¢«¨¢ ¥¬ edx ç «® ¡¨¡«¨®â¥çëå äãªæ¨©
|
||||||
|
;--- ¯à®¢¥à塞 ᮢ¯ ¤ ¥â «¨ ¨¬ï íªá¯®àâ¨à®¢ ®© äãªæ¨¨ á 'lib_init'
|
||||||
|
if library_fun_memory_alloc eq
|
||||||
|
else
|
||||||
|
cmp dword[ebx],'lib_'
|
||||||
|
jne import_loop
|
||||||
|
cmp dword[ebx+4],'init'
|
||||||
|
jne import_loop
|
||||||
|
;cmp byte[ebx+8],0
|
||||||
|
;jne import_loop
|
||||||
|
;--- ¥á«¨ ¨¬ï äãªæ¨¨ ᮢ¯ «® á 'lib_init' ¯®¯ ¤ ¥¬ áî¤
|
||||||
|
;¯®¤ª«î票¥ äãªæ¨© ¤«ï à ¡®âë á ¯ ¬ïâìî
|
||||||
|
;push eax
|
||||||
|
;call dll.Init
|
||||||
|
pushad
|
||||||
|
mov esi,eax
|
||||||
|
mov eax,library_fun_memory_alloc
|
||||||
|
mov ebx,library_fun_memory_free
|
||||||
|
mov ecx,library_fun_memory_realloc
|
||||||
|
mov edx,library_fun_dll_load
|
||||||
|
call dword esi
|
||||||
|
popad
|
||||||
|
end if
|
||||||
|
jmp import_loop
|
||||||
|
import_not_found:
|
||||||
|
add esp,4
|
||||||
|
jmp exit
|
||||||
|
import_done:
|
||||||
|
xor eax,eax ;=0 ¢á¥ § £à㧨«®áì 㤠ç®
|
||||||
|
exit:
|
||||||
|
}
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
ll_struc_size = 28;($-library_name__) ; constant size of struct
|
||||||
|
struc l_libs library_name__, library_path__, system_path__, my_import, point_dir_name; struct for loading libraries
|
||||||
|
{
|
||||||
|
.library_name__ dd library_name__ ; ¨¬ï § £à㦠¥¬®© ¡¨¡«¨®â¥ª¨
|
||||||
|
|
||||||
|
.library_path__ dd library_path__ ; 㪠§ â¥«ì ¡ãä¥à ¢ ª®â®à®¬ ¡ã¤¥â á®ä®à¨¬¨à®¢ ¯ãâì ª ¡¨¡«¨®â¥ª¨, ¥á«¨ 㦮 ¢ëç¨á«¨âì ¯ãâì ¤® «¨¡ë á ¬¥áâ § ¯ã᪠¯à®£à ¬¬ë, ®¡ëç® ã¦®, ¢ á«ãç ïå, ¥á«¨ «¨¡ à ᯮ«®¦¥ ¢ ⮩ ¦¥ ¯ ¯ª¥
|
||||||
|
.complete_path dd system_path__ ; ¯ãâì ª®â®àë© ç¥âª® ᮤ¥à¦¨â ¯ãâì
|
||||||
|
.my_import dd my_import
|
||||||
|
if point_dir_name eq
|
||||||
|
.point_dir_name__ dd 0
|
||||||
|
else
|
||||||
|
.point_dir_name__ dd point_dir_name ; ¨¬ï ¢«®¦¥®© ¤¨à४â®à¨¨ ¢ ªâ®à®© åà ïâìáï ¯®¤£à㦠¥¬ë¥ ¬®¤ã«¨.
|
||||||
|
end if
|
||||||
|
.adr_load_lib dd 0
|
||||||
|
.status_lib dd 0 ;status of load library
|
||||||
|
;
|
||||||
|
}
|
@ -35,7 +35,7 @@
|
|||||||
; design by golus
|
; design by golus
|
||||||
|
|
||||||
use32
|
use32
|
||||||
org 0x0
|
org 0
|
||||||
db 'MENUET01'
|
db 'MENUET01'
|
||||||
dd 1, START, IM_END, I_END
|
dd 1, START, IM_END, I_END
|
||||||
dd stacktop, file_path, cur_dir_path
|
dd stacktop, file_path, cur_dir_path
|
||||||
@ -44,13 +44,13 @@ include '../../../config.inc' ;for nightbuild
|
|||||||
include '../../../macros.inc'
|
include '../../../macros.inc'
|
||||||
include '../../../proc32.inc'
|
include '../../../proc32.inc'
|
||||||
include '../../../KOSfuncs.inc'
|
include '../../../KOSfuncs.inc'
|
||||||
include '../../../develop/libraries/box_lib/load_lib.mac'
|
include '../../../load_lib.mac'
|
||||||
include '../../../dll.inc'
|
include '../../../dll.inc'
|
||||||
include '../../../develop/libraries/libs-dev/libio/libio.inc'
|
include '../../../develop/libraries/libs-dev/libio/libio.inc'
|
||||||
include '../../../develop/libraries/libs-dev/libimg/libimg.inc'
|
include '../../../develop/libraries/libs-dev/libimg/libimg.inc'
|
||||||
;include '../../../debug.inc'
|
;include '../../../debug.inc'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||||
|
|
||||||
;---------------------------------------------------------
|
;---------------------------------------------------------
|
||||||
; *** ª®áâ âë ¤«ï ¨â¥à䥩á ***
|
; *** ª®áâ âë ¤«ï ¨â¥à䥩á ***
|
||||||
|
@ -1,27 +1,13 @@
|
|||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
head_f_i:
|
|
||||||
head_f_l db 'System error',0
|
|
||||||
;---------------------------------------------------------------------
|
|
||||||
system_dir_1: db '/sys/lib/libimg.obj',0
|
system_dir_1: db '/sys/lib/libimg.obj',0
|
||||||
err_message_found_lib_1 db 39,'libimg.obj',39,' - Not found!',0
|
system_dir_2 db '/sys/lib/proc_lib.obj',0
|
||||||
err_message_import_1 db 39,'libimg.obj',39,' - Wrong import!',0
|
|
||||||
|
|
||||||
system_dir_ProcLib db '/sys/lib/proc_lib.obj',0
|
|
||||||
err_message_found_lib2 db 39,'proc_lib.obj',39,' - Not found!',0
|
|
||||||
err_message_import2 db 39,'proc_lib.obj',39,' - Wrong import!',0
|
|
||||||
|
|
||||||
system_dir_3: db '/sys/lib/kmenu.obj',0
|
system_dir_3: db '/sys/lib/kmenu.obj',0
|
||||||
err_message_found_lib_3 db 39,'kmenu.obj',39,' - Not found!',0
|
|
||||||
err_message_import_3 db 39,'kmenu.obj',39,' - Wrong import!',0
|
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
l_libs_start:
|
l_libs_start:
|
||||||
lib1 l_libs system_dir_1+9, cur_dir_path, library_path, system_dir_1,\
|
lib1 l_libs system_dir_1+9, library_path, system_dir_1, import_libimg
|
||||||
err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
|
lib2 l_libs system_dir_2+9, library_path, system_dir_2, ProcLib_import
|
||||||
lib2 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \
|
lib3 l_libs system_dir_3+9, library_path, system_dir_3, import_libkmenu
|
||||||
err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
|
|
||||||
lib3 l_libs system_dir_3+9, cur_dir_path, library_path, system_dir_3,\
|
|
||||||
err_message_found_lib_3, head_f_l, import_libkmenu, err_message_import_3, head_f_i
|
|
||||||
end_l_libs:
|
end_l_libs:
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
align 4
|
align 4
|
||||||
|
Loading…
Reference in New Issue
Block a user