Есть код на Ассемблере. Мне нужен псевдокод по данному коду, с описанием. Если кому не сложно, не могу разобраться что к чему. Можно комментарий просто по строчно. Суть программы - это диспетчер задач, который закрывает задачу, когда вводишь полное имя задачи. Код рабочий. Очень нужно например кусок кода и что он делает
; Новый проект masm32 успешно создан
; Заполнен демо программой «Здравствуй, мир!»
.386
.model flat, stdcall
option casemap :none
include includes\Windows.inc
include includes\masm32.inc ; print
include includes\user32.inc ; CharToOem(),...
include includes\kernel32.inc ; Process32Next(), Process32First()
include includes\msvcrt.inc ; printf(), crt_scanf,...
include includes\macros\macros.asm
includelib includes\masm32.lib
includelib includes\user32.lib
includelib includes\msvcrt.lib
includelib includes\kernel32.lib
.code
PROCESSENTRY32W STRUCT
dwSize DWORD ?
cntUsage DWORD ?
th32ProcessID DWORD ?
th32DefaultHeapID DWORD ?
th32ModuleID DWORD ?
cntThreads DWORD ?
th32ParentProcessID DWORD ?
pcPriClassBase DWORD ?
dwFlags DWORD ?
szExeFile dw MAX_PATH dup(?)
PROCESSENTRY32W ENDS
;----------------------------------------------------------------------------------
GetListOrTerminate PROTO :DWORD ; принимает адрес буфера строки с именем процесса
; (в формате name.exe), который надо закрыть;
; выводит список процессов, если передано "none"
.data
ConsoleCaption db 'List and end processes',0
PROMPT db 'List of processes - 1',13,10,'The completion of the process - 2',13,10
db 'Exit - 0',13,10,'Choose: ',0
IntFmt db '%d',0
NONE db 'none',0
AskName db 'Process name: ',0
StrFmt db '%s',0
ErrClose db 'Process completion failed %s',13,10,0
OkClose db 'The process is complete %s',13,10,0
.data?
Buffer db 512 dup(?) ; с запасом
Choise dd ?
NamePr db 80 dup(?)
.code
start:
;Заглавие окна консоли
invoke CharToOem, offset ConsoleCaption, offset Buffer
SetConsoleCaption offset Buffer
.while 1
invoke CharToOemA, offset PROMPT, offset Buffer
print offset Buffer
invoke crt_scanf, offset IntFmt, offset Choise
switch Choise
case 1
invoke GetListOrTerminate, offset NONE
case 2
invoke CharToOemA, offset AskName, offset Buffer
print offset Buffer
invoke crt_scanf, offset StrFmt, offset NamePr
invoke GetListOrTerminate, ADDR NamePr
case 0
ret
endsw
.endw
GetListOrTerminate proc proc_name:DWORD
LOCAL hProcessSnap : HANDLE
LOCAL pe32 : PROCESSENTRY32W
LOCAL hProcess : HANDLE
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
.if eax == INVALID_HANDLE_VALUE
ret
.endif
mov hProcessSnap, eax
mov pe32.dwSize, sizeof pe32
invoke Process32FirstW, hProcessSnap, ADDR pe32
.if eax == 0
invoke CloseHandle, hProcessSnap
ret
.endif
.repeat
invoke crt_strcmp, ADDR NONE, proc_name
.if eax == 0
invoke CharToOemW, ADDR pe32.szExeFile, offset Buffer
print offset Buffer, 13, 10
.else
invoke OemToCharW, proc_name, offset Buffer
invoke crt_wcscmp, ADDR pe32.szExeFile, offset Buffer
.if eax == 0
mov hProcess, 0
invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID
mov hProcess, eax
invoke TerminateProcess, hProcess, 0
.if eax == 0
invoke CharToOemA, offset ErrClose, offset Buffer
.else
invoke CharToOemA, offset OkClose, offset Buffer
invoke crt_printf, offset Buffer, proc_name
.endif
.if hProcess != 0
invoke CloseHandle, hProcess
.endif
.endif
.endif
invoke Process32NextW, hProcessSnap, ADDR pe32
.until eax == 0
invoke CloseHandle, hProcessSnap
ret
GetListOrTerminate endp
end start