0,0 → 1,234 |
|
|
SC_OK = 0 |
SC_EXIT = 1 |
SC_PUTC = 2 |
SC_PUTS = 3 |
SC_GETC = 4 |
SC_GETS = 5 |
SC_CLS = 6 |
|
SHM_WRITE = 0x01 |
SHM_OPEN_ALWAYS = 0x04 |
|
;============================ |
|
align 4 |
sc_name rb 64 |
sc_pid dd 0 |
sc_buffer dd 0 |
sc_process dd 0 |
|
;============================ |
|
align 4 |
_sc_pid2name: |
|
push esp |
push ebx |
|
xor ecx, ecx |
mov eax, [sc_pid] |
mov ebx, 10 |
@@: |
xor edx, edx |
div ebx |
push edx |
inc ecx |
test eax, eax |
jnz @b |
|
mov edi, sc_name |
|
@@: |
pop eax |
add al, '0' |
stosb |
loop @b |
|
|
mov al, '-' |
stosb |
mov al, 'S' |
stosb |
mov al, 'H' |
stosb |
mov al, 'E' |
stosb |
mov al, 'L' |
stosb |
mov al, 'L' |
stosb |
mov al, 0 |
stosb |
|
|
pop ebx |
pop esp |
|
ret |
|
;============================ |
|
align 4 |
; void __stdcall sc_init(); |
_sc_init: |
|
push esp |
push ebx |
|
mov eax, 68 |
mov ebx, 11 |
int 0x40 |
|
mov eax, 68 ; ¢ë¤¥«¨âì ¯ ¬ïâì |
mov ebx, 12 |
mov ecx, 1024 |
int 0x40 |
|
mov [sc_process], eax |
|
mov eax, 9 ; ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ⥪ã饬 ¯à®æ¥áᥠ|
mov ebx, [sc_process] |
mov ecx, -1 |
int 0x40 |
|
mov dword eax, [ebx+30] ; ¯®«ãç ¥¬ PID ⥪饣® ¯à®æ¥áá |
mov [sc_pid], eax |
|
mov eax, 68 ; ®á¢®¡®¤¨âì ¯ ¬ïâì |
mov ebx, 13 |
mov ecx, [sc_process] |
int 0x40 |
|
call _sc_pid2name |
|
mov eax, 68 ; ®âªàëâì ¨¬¥®¢ ãî ®¡« áâì |
mov ebx, 22 |
mov dword ecx, sc_name |
mov edx, 4096 |
mov esi, SHM_OPEN_ALWAYS or SHM_WRITE |
int 0x40 |
|
mov [sc_buffer], eax |
|
pop ebx |
pop esp |
|
ret |
|
;============================ |
|
align 4 |
; void __stdcall sc_puts(char *str); |
_sc_puts: |
|
push esp |
push ebx |
|
mov esi, [esp+12] |
mov edi, [sc_buffer] |
mov al, SC_PUTS |
stosb |
|
@@: |
lodsb |
stosb |
test al, al |
jnz @b |
|
mov ebx, [sc_buffer] |
|
@@: |
mov byte dl, [ebx] |
test dl, dl |
jz @f |
push ebx |
mov eax, 5 |
mov ebx, 5 |
int 0x40 |
pop ebx |
jmp @b |
|
@@: |
|
pop ebx |
pop esp |
ret 4 |
|
;============================ |
|
align 4 |
; void __stdcall sc_exit(); |
_sc_exit: |
push ebx |
push esp |
|
mov ebx, [sc_buffer] |
mov byte [ebx], SC_EXIT |
|
@@: |
mov byte dl, [ebx] |
test dl, dl |
jz @f |
push ebx |
mov eax, 5 |
mov ebx, 5 |
int 0x40 |
pop ebx |
jmp @b |
|
@@: |
mov eax, 68 ;§ ªàëâì ¨¬¥®¢ ãî ®¡« áâì |
mov ebx, 23 |
mov dword ecx, sc_name |
int 0x40 |
|
pop esp |
pop ebx |
ret |
|
|
;============================ |
|
align 4 |
; void __stdcall sc_gets(char *str); |
_sc_gets: |
|
push esp |
push ebx |
|
mov edi, [esp+12] |
|
mov ebx, [sc_buffer] |
mov byte [ebx], SC_GETS |
|
@@: |
mov byte dl, [ebx] |
test dl, dl |
jz @f |
push ebx |
mov eax, 5 |
mov ebx, 5 |
int 0x40 |
pop ebx |
jmp @b |
|
@@: |
|
|
mov esi, [sc_buffer] |
inc esi |
|
@@: |
lodsb |
stosb |
test al, al |
jnz @b |
|
pop ebx |
pop esp |
ret 4 |
|
;============================ |
|