forked from KolibriOS/kolibrios
small update copyright year in kernel
git-svn-id: svn://kolibrios.org@9715 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2021. All rights reserved. ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License. ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -127,8 +127,8 @@ proc fs_execute
|
||||
jz .err_0
|
||||
|
||||
mov [slot], eax
|
||||
shl eax, 8
|
||||
lea edi, [SLOT_BASE+eax]
|
||||
shl eax, BSF sizeof.APPDATA
|
||||
lea edi, [SLOT_BASE + eax]
|
||||
mov [slot_base], edi
|
||||
; clean extended information about process
|
||||
mov ecx, sizeof.APPDATA/4
|
||||
@@ -169,26 +169,26 @@ proc fs_execute
|
||||
jz .err_hdr
|
||||
|
||||
; add new process to the list
|
||||
mov ebx, [sys_proc+LHEAD.prev]
|
||||
mov ebx, [sys_proc + LHEAD.prev]
|
||||
__list_add eax, ebx, sys_proc
|
||||
; fill the structure fields:
|
||||
mov ebx, [hdr_emem]
|
||||
mov [eax+PROC.mem_used], ebx
|
||||
mov [eax + PROC.mem_used], ebx
|
||||
|
||||
; write that main thread of app belongs to new process
|
||||
mov ebx, [slot_base]
|
||||
mov [ebx+APPDATA.process], eax
|
||||
mov [ebx + APPDATA.process], eax
|
||||
|
||||
; initialize the thread list of process: at this moment it consists only of one main thread
|
||||
lea edx, [ebx+APPDATA.list]
|
||||
lea ecx, [eax+PROC.thr_list]
|
||||
lea edx, [ebx + APPDATA.list]
|
||||
lea ecx, [eax + PROC.thr_list]
|
||||
list_add_tail edx, ecx
|
||||
|
||||
; allocate space and copy app header data locals and cmdline string there, put pointer to exec_params of new thread
|
||||
mov eax, [cmdline_size]
|
||||
add eax, sizeof.APP_HDR
|
||||
stdcall kernel_alloc, eax
|
||||
mov [ebx+APPDATA.exec_params], eax
|
||||
mov [ebx + APPDATA.exec_params], eax
|
||||
mov edi, eax
|
||||
lea esi, [hdr_cmdline]
|
||||
mov ecx, sizeof.APP_HDR/4
|
||||
@@ -231,17 +231,17 @@ test_app_header:
|
||||
jne .check_01_header
|
||||
|
||||
mov ecx, [APP_HEADER_00.start]
|
||||
mov [ebx+APP_HDR.eip], ecx
|
||||
mov [ebx + APP_HDR.eip], ecx
|
||||
mov edx, [APP_HEADER_00.mem_size]
|
||||
mov [ebx+APP_HDR._emem], edx
|
||||
mov [ebx + APP_HDR._emem], edx
|
||||
shr edx, 1
|
||||
sub edx, 0x10
|
||||
mov [ebx+APP_HDR.esp], edx
|
||||
mov [ebx + APP_HDR.esp], edx
|
||||
mov ecx, [APP_HEADER_00.i_param]
|
||||
mov [ebx+APP_HDR.cmdline], ecx
|
||||
mov [ebx+APP_HDR.path], 0
|
||||
mov [ebx + APP_HDR.cmdline], ecx
|
||||
mov [ebx + APP_HDR.path], 0
|
||||
mov edx, [APP_HEADER_00.i_end]
|
||||
mov [ebx+APP_HDR._edata], edx
|
||||
mov [ebx + APP_HDR._edata], edx
|
||||
ret
|
||||
|
||||
.check_01_header:
|
||||
@@ -252,7 +252,7 @@ test_app_header:
|
||||
jne .fail
|
||||
@@:
|
||||
mov ecx, [APP_HEADER_01.start]
|
||||
mov [ebx+0x08], ecx
|
||||
mov [ebx + 0x08], ecx
|
||||
mov edx, [APP_HEADER_01.mem_size]
|
||||
|
||||
; \begin{diamond}[20.08.2006]
|
||||
@@ -262,15 +262,15 @@ test_app_header:
|
||||
jb .fail
|
||||
; \end{diamond}[20.08.2006]
|
||||
|
||||
mov [ebx+APP_HDR._emem], edx
|
||||
mov [ebx + APP_HDR._emem], edx
|
||||
mov ecx, [APP_HEADER_01.stack_top]
|
||||
mov [ebx+APP_HDR.esp], ecx
|
||||
mov [ebx + APP_HDR.esp], ecx
|
||||
mov edx, [APP_HEADER_01.i_param]
|
||||
mov [ebx+APP_HDR.cmdline], edx
|
||||
mov [ebx + APP_HDR.cmdline], edx
|
||||
mov ecx, [APP_HEADER_01.i_icon]
|
||||
mov [ebx+APP_HDR.path], ecx
|
||||
mov [ebx + APP_HDR.path], ecx
|
||||
mov edx, [APP_HEADER_01.i_end]
|
||||
mov [ebx+APP_HDR._edata], edx
|
||||
mov [ebx + APP_HDR._edata], edx
|
||||
ret
|
||||
.fail:
|
||||
xor eax, eax
|
||||
@@ -294,7 +294,7 @@ alloc_thread_slot:
|
||||
bsf eax, [edx]
|
||||
jnz .found
|
||||
add edx, 4
|
||||
cmp edx, thr_slot_map+32
|
||||
cmp edx, thr_slot_map + 32
|
||||
jb .l1
|
||||
|
||||
popfd
|
||||
@@ -303,7 +303,7 @@ alloc_thread_slot:
|
||||
.found:
|
||||
btr [edx], eax
|
||||
sub edx, thr_slot_map
|
||||
lea eax, [eax+edx*8]
|
||||
lea eax, [eax + edx*8]
|
||||
popfd
|
||||
ret
|
||||
|
||||
@@ -331,8 +331,8 @@ proc create_process stdcall, app_size:dword
|
||||
jz .fail
|
||||
mov [process], eax
|
||||
|
||||
lea edi, [eax+PROC.heap_lock]
|
||||
mov ecx, (PROC.ht_free-PROC.heap_lock)/4
|
||||
lea edi, [eax + PROC.heap_lock]
|
||||
mov ecx, (PROC.ht_free - PROC.heap_lock)/4
|
||||
|
||||
list_init eax
|
||||
add eax, PROC.thr_list
|
||||
@@ -355,19 +355,19 @@ proc create_process stdcall, app_size:dword
|
||||
|
||||
mov eax, edi
|
||||
call get_pg_addr
|
||||
mov [edi-4096+PROC.pdt_0_phys], eax
|
||||
mov [edi - 4096 + PROC.pdt_0_phys], eax
|
||||
|
||||
mov ecx, (OS_BASE shr 20)/4
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
|
||||
mov ecx, (OS_BASE shr 20)/4
|
||||
mov esi, sys_proc+PROC.pdt_0+(OS_BASE shr 20)
|
||||
mov esi, sys_proc + PROC.pdt_0 + (OS_BASE shr 20)
|
||||
rep movsd
|
||||
|
||||
mov eax, [edi-8192+PROC.pdt_0_phys]
|
||||
mov eax, [edi - 8192 + PROC.pdt_0_phys]
|
||||
or eax, PG_SWR
|
||||
mov [edi-4096+(page_tabs shr 20)], eax
|
||||
mov [edi - 4096 + (page_tabs shr 20)], eax
|
||||
|
||||
lea edx, [edi-4096]
|
||||
mov esi, [app_tabs]
|
||||
@@ -447,7 +447,7 @@ align 4
|
||||
mov esi, ecx
|
||||
list_del esi
|
||||
|
||||
mov esi, [esi+PROC.dlls_list_ptr]
|
||||
mov esi, [esi + PROC.dlls_list_ptr]
|
||||
call destroy_all_hdlls
|
||||
|
||||
mov esi, [esp]
|
||||
@@ -475,7 +475,7 @@ align 4
|
||||
align 4
|
||||
get_pid:
|
||||
mov eax, [current_slot]
|
||||
mov eax, [eax+APPDATA.tid]
|
||||
mov eax, [eax + APPDATA.tid]
|
||||
ret
|
||||
|
||||
pid_to_slot:
|
||||
@@ -488,10 +488,7 @@ pid_to_slot:
|
||||
push ecx
|
||||
mov ebx, [thread_count]
|
||||
shl ebx, BSF sizeof.APPDATA ; multiply by size
|
||||
; add 2*32 cause:
|
||||
; [TASK_TABLE; TASK_TABLE + 32) isnt a task actually
|
||||
; skip first process in the task table
|
||||
;mov ecx, 2*32 ;sizeof.TASKDATA
|
||||
mov ecx, sizeof.APPDATA
|
||||
|
||||
.loop:
|
||||
@@ -499,7 +496,7 @@ pid_to_slot:
|
||||
;ebx = maximum permitted offset
|
||||
cmp [SLOT_BASE + ecx + APPDATA.state], TSTATE_FREE
|
||||
jz .endloop ;skip empty slots
|
||||
cmp [ecx + SLOT_BASE + APPDATA.tid], eax;check PID
|
||||
cmp [SLOT_BASE + ecx + APPDATA.tid], eax
|
||||
jz .pid_found
|
||||
.endloop:
|
||||
add ecx, sizeof.APPDATA
|
||||
@@ -698,7 +695,7 @@ proc new_sys_threads
|
||||
mov ebx, esi ;ebx=esi - pointer to extended information about current thread
|
||||
|
||||
mov edi, eax
|
||||
shl edi, 8
|
||||
shl edi, BSF sizeof.APPDATA
|
||||
add edi, SLOT_BASE
|
||||
mov edx, edi ;edx=edi - pointer to extended infomation about new thread
|
||||
mov ecx, sizeof.APPDATA/4
|
||||
@@ -711,7 +708,7 @@ proc new_sys_threads
|
||||
rep movsb ;copy process name
|
||||
|
||||
|
||||
mov eax, [ebx+APPDATA.tls_base]
|
||||
mov eax, [ebx + APPDATA.tls_base]
|
||||
test eax, eax
|
||||
jz @F
|
||||
|
||||
@@ -721,13 +718,13 @@ proc new_sys_threads
|
||||
test eax, eax
|
||||
jz .failed1;eax=0
|
||||
@@:
|
||||
mov [edx+APPDATA.tls_base], eax
|
||||
mov [edx + APPDATA.tls_base], eax
|
||||
|
||||
mov eax, [ebx+APPDATA.process]
|
||||
mov [edx+APPDATA.process], eax
|
||||
mov eax, [ebx + APPDATA.process]
|
||||
mov [edx + APPDATA.process], eax
|
||||
|
||||
lea ebx, [edx+APPDATA.list]
|
||||
lea ecx, [eax+PROC.thr_list]
|
||||
lea ebx, [edx + APPDATA.list]
|
||||
lea ecx, [eax + PROC.thr_list]
|
||||
list_add_tail ebx, ecx ;add thread to process child's list
|
||||
|
||||
lea eax, [app_cmdline]
|
||||
@@ -796,16 +793,16 @@ endp
|
||||
align 4
|
||||
common_app_entry:
|
||||
mov ebp, [current_slot]
|
||||
mov ebp, [ebp+APPDATA.exec_params]
|
||||
mov ebp, [ebp + APPDATA.exec_params]
|
||||
test ebp, ebp
|
||||
jz .exit
|
||||
; APPDATA.exec_params have first thread only,
|
||||
; so second and next threads don't get here (they jump to .exit)
|
||||
stdcall map_process_image, [ebp+APP_HDR._emem],\
|
||||
[ebp+APP_HDR.img_base], [ebp+APP_HDR.img_size]
|
||||
mov esi, [ebp+APP_HDR.path_string]
|
||||
mov edi, [ebp+APP_HDR.path]
|
||||
mov ecx, [ebp+APP_HDR.filename_size]
|
||||
stdcall map_process_image, [ebp + APP_HDR._emem],\
|
||||
[ebp + APP_HDR.img_base], [ebp + APP_HDR.img_size]
|
||||
mov esi, [ebp + APP_HDR.path_string]
|
||||
mov edi, [ebp + APP_HDR.path]
|
||||
mov ecx, [ebp + APP_HDR.filename_size]
|
||||
cmp ecx, 1023
|
||||
jc @f
|
||||
mov ecx, 1022
|
||||
@@ -813,7 +810,7 @@ common_app_entry:
|
||||
push esi
|
||||
test edi, edi
|
||||
jz @f
|
||||
stdcall is_region_userspace, edi, [ebp+APP_HDR.filename_size]
|
||||
stdcall is_region_userspace, edi, [ebp + APP_HDR.filename_size]
|
||||
jnz @f
|
||||
mov al, '/'
|
||||
stosb
|
||||
@@ -821,14 +818,14 @@ common_app_entry:
|
||||
mov byte [edi], 0
|
||||
@@:
|
||||
call kernel_free
|
||||
mov edi, [ebp+APP_HDR.cmdline]
|
||||
mov edi, [ebp + APP_HDR.cmdline]
|
||||
test edi, edi
|
||||
jz .check_tls_header
|
||||
lea esi, [ebp+sizeof.APP_HDR]
|
||||
mov ecx, [ebp+APP_HDR.cmdline_size]
|
||||
lea esi, [ebp + sizeof.APP_HDR]
|
||||
mov ecx, [ebp + APP_HDR.cmdline_size]
|
||||
cmp ecx, 256
|
||||
jb .copy_cmdline
|
||||
mov edi, [ebp+APP_HDR._emem]
|
||||
mov edi, [ebp + APP_HDR._emem]
|
||||
add edi, 4095
|
||||
and edi, -4096
|
||||
sub edi, ecx
|
||||
@@ -852,7 +849,7 @@ common_app_entry:
|
||||
call init_heap
|
||||
stdcall user_alloc, 4096
|
||||
mov edx, [current_slot]
|
||||
mov [edx+APPDATA.tls_base], eax
|
||||
mov [edx + APPDATA.tls_base], eax
|
||||
mov [tls_data_l+2], ax
|
||||
shr eax, 16
|
||||
mov [tls_data_l+4], al
|
||||
@@ -862,7 +859,7 @@ common_app_entry:
|
||||
; { Patch by Coldy, For DLL autoload
|
||||
.try_load_dll:
|
||||
; Test app header version
|
||||
mov ecx, dword[ebp+APP_HDR.img_base]
|
||||
mov ecx, dword[ebp + APP_HDR.img_base]
|
||||
cmp dword[ecx+8], 2
|
||||
jne .cleanup
|
||||
;if APP_HEADER.version = 2 => load lib/dll.obj & change eip to APP_STARTUP_THUNK
|
||||
@@ -887,7 +884,7 @@ common_app_entry:
|
||||
|
||||
;.change_eip:
|
||||
mov ecx, [current_slot]
|
||||
mov ecx, [ecx+APPDATA.pl0_stack]
|
||||
mov ecx, [ecx + APPDATA.pl0_stack]
|
||||
mov [ecx+REG_EIP], eax
|
||||
|
||||
; } End patch by Coldy, For DLL autoload
|
||||
@@ -895,9 +892,9 @@ common_app_entry:
|
||||
stdcall free_kernel_space, [ebp+APP_HDR.img_base]
|
||||
stdcall kernel_free, ebp
|
||||
mov ebx, [current_slot]
|
||||
cmp [ebx+APPDATA.debugger_slot], 0
|
||||
cmp [ebx + APPDATA.debugger_slot], 0
|
||||
je .exit
|
||||
mov [ebx+APPDATA.state], TSTATE_RUN_SUSPENDED
|
||||
mov [ebx + APPDATA.state], TSTATE_RUN_SUSPENDED
|
||||
mov [ebx + APPDATA.state], TSTATE_RUN_SUSPENDED
|
||||
call change_task
|
||||
.exit:
|
||||
@@ -927,16 +924,16 @@ proc set_app_params stdcall,slot:dword, params:dword, flags:dword
|
||||
mov ebx, eax
|
||||
|
||||
shl eax, BSF sizeof.APPDATA
|
||||
mov [eax+SLOT_BASE+APPDATA.fpu_state], edi
|
||||
mov [eax+SLOT_BASE+APPDATA.exc_handler], 0
|
||||
mov [eax+SLOT_BASE+APPDATA.except_mask], 0
|
||||
mov [eax+SLOT_BASE+APPDATA.terminate_protection], 80000001h
|
||||
mov [SLOT_BASE + eax + APPDATA.fpu_state], edi
|
||||
mov [SLOT_BASE + eax + APPDATA.exc_handler], 0
|
||||
mov [SLOT_BASE + eax + APPDATA.except_mask], 0
|
||||
mov [SLOT_BASE + eax + APPDATA.terminate_protection], 80000001h
|
||||
|
||||
;set default io permission map
|
||||
mov ecx, [SLOT_BASE+sizeof.APPDATA+APPDATA.io_map]
|
||||
mov [eax+SLOT_BASE+APPDATA.io_map], ecx
|
||||
mov ecx, [SLOT_BASE+sizeof.APPDATA+APPDATA.io_map+4]
|
||||
mov [eax+SLOT_BASE+APPDATA.io_map+4], ecx
|
||||
mov ecx, [SLOT_BASE + sizeof.APPDATA + APPDATA.io_map]
|
||||
mov [SLOT_BASE + eax + APPDATA.io_map], ecx
|
||||
mov ecx, [SLOT_BASE + sizeof.APPDATA + APPDATA.io_map + 4]
|
||||
mov [SLOT_BASE + eax + APPDATA.io_map + 4], ecx
|
||||
|
||||
mov esi, fpu_data
|
||||
mov ecx, [xsave_area_size]
|
||||
@@ -947,45 +944,45 @@ proc set_app_params stdcall,slot:dword, params:dword, flags:dword
|
||||
cmp [thread_count], ebx
|
||||
adc [thread_count], 0 ; update number of processes
|
||||
shl ebx, BSF sizeof.APPDATA
|
||||
lea edx, [ebx+SLOT_BASE+APP_EV_OFFSET]
|
||||
mov [SLOT_BASE+APPDATA.fd_ev+ebx], edx
|
||||
mov [SLOT_BASE+APPDATA.bk_ev+ebx], edx
|
||||
lea edx, [SLOT_BASE + ebx + APP_EV_OFFSET]
|
||||
mov [SLOT_BASE + ebx + APPDATA.fd_ev], edx
|
||||
mov [SLOT_BASE + ebx + APPDATA.bk_ev], edx
|
||||
|
||||
add edx, APP_OBJ_OFFSET-APP_EV_OFFSET
|
||||
mov [SLOT_BASE+APPDATA.fd_obj+ebx], edx
|
||||
mov [SLOT_BASE+APPDATA.bk_obj+ebx], edx
|
||||
add edx, APP_OBJ_OFFSET - APP_EV_OFFSET
|
||||
mov [SLOT_BASE + ebx + APPDATA.fd_obj], edx
|
||||
mov [SLOT_BASE + ebx + APPDATA.bk_obj], edx
|
||||
|
||||
mov ecx, [def_cursor]
|
||||
mov [SLOT_BASE+APPDATA.cursor+ebx], ecx
|
||||
mov [SLOT_BASE + ebx + APPDATA.cursor], ecx
|
||||
mov eax, [pl0_stack]
|
||||
mov [SLOT_BASE+APPDATA.pl0_stack+ebx], eax
|
||||
mov [SLOT_BASE + ebx + APPDATA.pl0_stack], eax
|
||||
add eax, RING0_STACK_SIZE
|
||||
mov [SLOT_BASE+APPDATA.saved_esp0+ebx], eax
|
||||
mov [SLOT_BASE + ebx + APPDATA.saved_esp0], eax
|
||||
|
||||
push ebx
|
||||
stdcall kernel_alloc, maxPathLength
|
||||
pop ebx
|
||||
mov esi, [current_slot]
|
||||
mov esi, [esi+APPDATA.cur_dir]
|
||||
mov esi, [esi + APPDATA.cur_dir]
|
||||
mov ecx, maxPathLength/4
|
||||
mov edi, eax
|
||||
mov [ebx+SLOT_BASE+APPDATA.cur_dir], eax
|
||||
mov [SLOT_BASE + ebx + APPDATA.cur_dir], eax
|
||||
rep movsd
|
||||
|
||||
mov [ebx+SLOT_BASE+APPDATA.event_mask], dword 1+2+4;set default event flags (see 40 function)
|
||||
mov [SLOT_BASE + ebx + APPDATA.event_mask], dword 1+2+4;set default event flags (see 40 function)
|
||||
inc dword [process_number]
|
||||
mov eax, [process_number]
|
||||
mov [ebx+SLOT_BASE+APPDATA.tid], eax ;set TID
|
||||
mov [SLOT_BASE + ebx + APPDATA.tid], eax ;set TID
|
||||
|
||||
mov eax, [slot]
|
||||
mov [ebx+SLOT_BASE+APPDATA.wnd_number], al
|
||||
mov [SLOT_BASE + ebx + APPDATA.wnd_number], al
|
||||
mov ebx, eax
|
||||
shl ebx, BSF sizeof.WDATA
|
||||
lea ecx, [draw_data+ebx];ecx - pointer to draw data
|
||||
lea ecx, [draw_data + ebx];ecx - pointer to draw data
|
||||
|
||||
; set window state to 'normal' (non-minimized/maximized/rolled-up) state
|
||||
mov [ebx+window_data+WDATA.fl_wstate], WSTATE_NORMAL
|
||||
mov [ebx+window_data+WDATA.fl_redraw], 1
|
||||
mov [window_data + ebx + WDATA.fl_wstate], WSTATE_NORMAL
|
||||
mov [window_data + ebx + WDATA.fl_redraw], 1
|
||||
|
||||
;set draw data to full screen
|
||||
xor eax, eax
|
||||
@@ -998,50 +995,50 @@ proc set_app_params stdcall,slot:dword, params:dword, flags:dword
|
||||
|
||||
mov ebx, [pl0_stack]
|
||||
mov esi, [params]
|
||||
lea ecx, [ebx+REG_EIP]
|
||||
lea ecx, [ebx + REG_EIP]
|
||||
xor eax, eax
|
||||
|
||||
mov [ebx+REG_RET], dword common_app_entry
|
||||
mov [ebx+REG_EDI], eax
|
||||
mov [ebx+REG_ESI], eax
|
||||
mov [ebx+REG_EBP], eax
|
||||
mov [ebx+REG_ESP], ecx;ebx+REG_EIP
|
||||
mov [ebx+REG_EBX], eax
|
||||
mov [ebx+REG_EDX], eax
|
||||
mov [ebx+REG_ECX], eax
|
||||
mov [ebx+REG_EAX], eax
|
||||
mov [ebx + REG_RET], dword common_app_entry
|
||||
mov [ebx + REG_EDI], eax
|
||||
mov [ebx + REG_ESI], eax
|
||||
mov [ebx + REG_EBP], eax
|
||||
mov [ebx + REG_ESP], ecx;ebx+REG_EIP
|
||||
mov [ebx + REG_EBX], eax
|
||||
mov [ebx + REG_EDX], eax
|
||||
mov [ebx + REG_ECX], eax
|
||||
mov [ebx + REG_EAX], eax
|
||||
|
||||
mov eax, [esi+APP_HDR.eip]
|
||||
mov [ebx+REG_EIP], eax
|
||||
mov [ebx+REG_CS], dword app_code
|
||||
mov eax, [esi + APP_HDR.eip]
|
||||
mov [ebx + REG_EIP], eax
|
||||
mov [ebx + REG_CS], dword app_code
|
||||
mov ecx, USER_PRIORITY
|
||||
|
||||
test byte [flags], 2
|
||||
jz @F
|
||||
|
||||
mov [ebx+REG_CS], dword os_code ; kernel thread
|
||||
mov [ebx + REG_CS], dword os_code ; kernel thread
|
||||
mov ecx, MAX_PRIORITY
|
||||
@@:
|
||||
mov [ebx+REG_EFLAGS], dword EFL_IOPL1+EFL_IF
|
||||
mov [ebx + REG_EFLAGS], dword EFL_IOPL1+EFL_IF
|
||||
|
||||
mov eax, [esi+APP_HDR.esp]
|
||||
mov [ebx+REG_APP_ESP], eax
|
||||
mov [ebx+REG_SS], dword app_data
|
||||
mov eax, [esi + APP_HDR.esp]
|
||||
mov [ebx + REG_APP_ESP], eax
|
||||
mov [ebx + REG_SS], dword app_data
|
||||
|
||||
lea edx, [ebx+REG_RET]
|
||||
lea edx, [ebx + REG_RET]
|
||||
mov ebx, [slot]
|
||||
shl ebx, BSF sizeof.APPDATA
|
||||
mov [ebx+SLOT_BASE+APPDATA.saved_esp], edx
|
||||
mov [SLOT_BASE + ebx + APPDATA.saved_esp], edx
|
||||
|
||||
xor edx, edx; process state - running
|
||||
; set if debuggee
|
||||
test byte [flags], 1
|
||||
jz .no_debug
|
||||
mov eax, [current_slot_idx]
|
||||
mov [SLOT_BASE+ebx+APPDATA.debugger_slot], eax
|
||||
mov [SLOT_BASE + ebx + APPDATA.debugger_slot], eax
|
||||
.no_debug:
|
||||
mov [SLOT_BASE + ebx + APPDATA.state], dl
|
||||
lea edx, [SLOT_BASE+ebx]
|
||||
lea edx, [SLOT_BASE + ebx]
|
||||
call scheduler_add_thread
|
||||
ret
|
||||
endp
|
||||
@@ -1049,7 +1046,7 @@ endp
|
||||
align 4
|
||||
get_stack_base:
|
||||
mov eax, [current_slot]
|
||||
mov eax, [eax+APPDATA.pl0_stack]
|
||||
mov eax, [eax + APPDATA.pl0_stack]
|
||||
ret
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user