Приложение перечисляющее подключенные сетевые ресурсы (компиляция) - Assembler
Формулировка задачи:
В общем задание «Написать консольное приложение Win32, которое перечисляет все подключенные сетевые ресурсы, используя системные функции WNetOpenEnum(), WNetEnumResource() и WNetCloseEnum()».
прописал асм файл (нашел в инете похожее), но не могу скомпилировать, то ругается на библиотеки то на содержание асм файла.
Помогите пожалуйста скмпилировать приложение
;netenum.asm ;Консольное приложение для Win32, перечисляющее сетевые ресурсы include def32.inc include kernel32.inc include mpr.inc includelib kernel32.lib includelib mpr.lib .386 .model flat .const greet_message db "Example Win32 console program",0Dh,0Ah,0Dh,0Ah,0 error1_message db 0Dh,0Ah,'Could not get current user name',0Dh,0Ah,0 error2_message db 0Dh,0Ah,'Could not enumerate',0Dh,0Ah,0 good_exit_msg db 0Dh, 0Ah, 0Dh, 0Ah, 'Normal termination' ,0Dh, 0Ah, 0 enum_msg1 db 0Dh, 0Ah,'Local', 0 enum_msg2 db " remote – ",0 .data user_name db "List of connected resources for user" user_buff db 64 dup (?) ;буфер для WnetGetUser user_buff_l dd $-user_buff ;размер буфера для WNetGetUser enum_buf_l dd 1056 ;длина enum_buf в байтах enum_entries dd 1 ;число ресурсов, которые в нем помещаются .data? enum_buf NTRESOURCE <?,?,?,?,?,?,?,?> ;буфер для WNetEnumResource dd 256 dup (?) ;1024 байта для строк message_l dd ? ;переменная для WriteConsole enum_handle dd ? ;идентификатор для WNetEnumResource .code _start: ;получить от системы идентификатор буфера вывода stdout push STD_OUTPUT_HANDLE call GetStdHandle ;возвращает идентификатор STDOUT в еах, mov ebx,eax ;а мы будем хранить его в ЕВХ ;вывести строку greet_message на экран mov esi, offset greet_message call output_string ;определить имя пользователя, которому принадлежит наш процесс mov esi, offset user_buff push offset user_buff_l ;адрес переменной с длиной буфера push esi ;адрес буфера push 0 ;NULL call WNetGetUser cmp eax,NO_ERROR ;если произошла ошибка jne error_exit1 ;выйти mov esi, offset user_name ;иначе – вывести строку на экран call output_string ; начать перечисление сетевых ресурсов ' push offset enum_handle ;идентификатор для WNetEnumResource push 0 push RESOURCEUSAGE_CONNECTABLE ;все присоединяемые ресурсы push RESOURCETYPE_ANY ;ресурсы любого типа push RESOURCE_CONNECTED ;только присоединенные сейчас call WNetOpenEnum ;начать перечисление, cmp eax,NO_ERROR ;если произошла ошибка, jne error_exit2 ;выйти ;цикл перечисления ресурсов enumeration_loop: push offset enum_buf_l ;длина буфера в байтах push offset enum_buf ;адрес буфера push offset enum_entries ;число ресурсов push dword ptr enum_handle ;идентификатор от WNetOpenEnum call WNetEnumResource cmp eax, ERROR_NO_MORE_ITEMS ;если они закончились je end_enumeration ;завершить перечисление cmp eax, NO_ERROR ;если произошла ошибка jne error_exit2 ;выйти с сообщением об ошибке ;вывод информации о ресурсе на экран mov esi, offset enum_msg1 ;первая часть строки call output_string ;на консоль mov esi,dword ptr enum_buf.IpLocalName ;локальное имя устройства call output_string ;на консоль mov esi, offset enum_msg2 ;вторая часть строки call output_string ;на консоль mov esi, dword ptr enum_buf.IpRemoteName ;удаленное имя устройства call output_string ;туда же jmp short enumeration_loop ;продолжить перечисление ; конец цикла end_enumeration: push dword ptr enum_handle call WNetCloseEnum ;конец перечисления mov esi, offset good_exit_msg exit_program: call output_string ;вывести строку push 0 ;код выхода call ExitProcess ;конец программы ;выходы после ошибок error_exit1: mov esi, offset error1_message jmp short exit_program error_exit2: mov esi, offset error2_message jmp short exit_program ;процедрура output_string ;выводит на экран строку ;ввод: esi – адрес строки, ebx – идентификатор stdout или другого консольного буфера output_string proc near ;определить длину строки cld xor eax,eax mov edi,esi repne scasb dec edi sub edi, esi ;послать ее на консоль push 0 push offset message_l ;сколько байт выведено на консоль push edi ;сколько байт надо вывести на консоль push esi ;адрес строки для вывода на консоль push ebx ;идентификатор буфера вывода call WriteConsole ;WriteConsole (hConsoleOutputm, lpvBuffer, cchToWrite, lpcchWritten, lpvReserved) ret output_string endp end _start
В общем выдает вот что
Assembling: netenum.asm
mpr.inc<100> : error A2005: : __imp__WNetCloseEnum@4
G:\СПО>link /subsystem:console "netenum.obj"
Microsoft Incremental Linker Version 5.12.8078
Copyright Microsoft Corp 1992-1998. All rights reserved.
LINK : fatal error LNK1181: cannot open input file "netenum.obj"
Решение задачи: «Приложение перечисляющее подключенные сетевые ресурсы (компиляция)»
textual
Листинг программы
cls set filename=netenum set masm_path=c:\masm32 %masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm || exit %masm_path%\bin\Link /SUBSYSTEM:CONSOLE /LIBPATH:%masm_path%\lib ^ /NOLOGO %filename%.obj
Объяснение кода листинга программы
cls
- очистка консоли перед выводом результатов работы программыset filename=netenum
- присвоение переменнойfilename
значенияnetenum
, используется для имени файлаset masm_path=c:\masm32
- присвоение переменнойmasm_path
значенияc:\masm32
, используется для пути к MASM (Microsof Assembler)%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm
- компиляция файлаnetenum.asm
в объектный файлnetenum.obj
с помощью MASM (Microsof Assembler)%masm_path%\bin\Link /SUBSYSTEM:CONSOLE /LIBPATH:%masm_path%\lib ^/NOLOGO %filename%.obj
- связывание объектного файлаnetenum.obj
в исполняемый файл с помощью утилиты Link (linker), указана консольная подсистема, путь к библиотекам и отключена запись отладочной информацииexit
- завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д