Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2019, 20:00   #1
MAKSIK21
 
Регистрация: 09.02.2019
Сообщений: 5
Сообщение Получить все файлы с ftp

Пытаюсь получить все файлы с сервера, выводит только 1 файл, хотя их там несколько и ошибку 6. Как решить проблему?
Код:
.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data
handl dd ?
hopen dd ?
hconnect dd ?
ipp db "192.168.1.1",0
namee db "admin",0
pswd db "admin",0
dirr db "/A/",0
find db "*",0
winn WIN32_FIND_DATAA<?>
findd dd ?
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 13,10,0
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
METKA:
invoke InternetFindNextFileA, findd, offset winn
cmp eax,0
je ERR
invoke WriteConsoleA,handl, offset winn.cFileName,sizeof winn.cFileName,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke Sleep,3000
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start
MAKSIK21 вне форума Ответить с цитированием
Старый 21.02.2019, 20:48   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от MAKSIK21 Посмотреть сообщение
Как решить проблему
Например воспользоваться отладчиком.
waleri вне форума Ответить с цитированием
Старый 23.02.2019, 20:22   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

1 - Неинициализированные данные в соответствующую секцию .data?
2 - Вывод в консоль сделать как то так -
Код:
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0

Это работает:
Код:
.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data?
handl dd ?
hopen dd ?
hconnect dd ?
winn WIN32_FIND_DATA<?>

.data
ipp db "*.*.*.*",0
namee db "********",0
pswd db "********",0
dirr db "/http/",0
find db "*", 0
findd dd 0
endlist	db "End find file"
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 00Dh, 00Ah
.code
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
METKA:
invoke InternetFindNextFileA, findd, offset winn
cmp eax,0
je ERR
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 23.02.2019, 22:38   #4
MAKSIK21
 
Регистрация: 09.02.2019
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
1 - Неинициализированные данные в соответствующую секцию .data?
2 - Вывод в консоль сделать как то так -
Код:
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0

Это работает:
Код:
.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data?
handl dd ?
hopen dd ?
hconnect dd ?
winn WIN32_FIND_DATA<?>

.data
ipp db "*.*.*.*",0
namee db "********",0
pswd db "********",0
dirr db "/http/",0
find db "*", 0
findd dd 0
endlist	db "End find file"
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 00Dh, 00Ah
.code
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
METKA:
invoke InternetFindNextFileA, findd, offset winn
cmp eax,0
je ERR
invoke lstrlen, offset [winn.cFileName]
invoke WriteConsoleA,handl, offset winn.cFileName,eax,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start
Спасибо, все работает!
MAKSIK21 вне форума Ответить с цитированием
Старый 23.02.2019, 22:39   #5
MAKSIK21
 
Регистрация: 09.02.2019
Сообщений: 5
По умолчанию

Ещё один вариант
Код:
.586p
.model flat,stdcall
option casemap:none
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wininet.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/wininet.lib
.data
handl dd ?
hopen dd ?
hconnect dd ?
ipp db "192.168.1.1",0
namee db "admin",0
pswd db "admin",0
dirr db "/A/",0
find db "*",0
winn WIN32_FIND_DATAA<?>
findd dd ?
buf db 50 dup(0)
strr db "Error %lu",0
strrazd db 13,10,0
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov handl,eax
invoke  InternetOpenA,0,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
cmp eax,0
je ERR
mov hopen,eax
invoke InternetConnectA,hopen,offset ipp,INTERNET_DEFAULT_FTP_PORT,offset namee,offset pswd,INTERNET_SERVICE_FTP,0,0
cmp eax,0
je ERR
mov hconnect,eax
invoke FtpSetCurrentDirectoryA,hconnect,offset dirr
invoke FtpFindFirstFileA,hconnect,offset find,offset winn,0,0
cmp eax,0
je ERR
mov findd,eax
METKA:
push findd
invoke InternetFindNextFileA, findd, offset winn
pop findd
cmp eax,0
je ERR
invoke WriteConsoleA,handl, offset winn.cFileName,sizeof winn.cFileName,0,0
invoke WriteConsoleA,handl,offset strrazd,sizeof strrazd,0,0
jmp METKA
ERR:
invoke GetLastError
push eax
push offset strr
push offset buf
call wsprintfA
invoke WriteConsoleA,handl,offset buf,sizeof buf,0,0
invoke Sleep,3000
invoke InternetCloseHandle,hconnect
invoke InternetCloseHandle,hopen
invoke ExitProcess,0
end start
MAKSIK21 вне форума Ответить с цитированием
Старый 01.03.2019, 00:27   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от MAKSIK21 Посмотреть сообщение
выводит только 1 файл, хотя их там несколько
Цитата:
Сообщение от Ulex Посмотреть сообщение
invoke lstrlen, offset [winn.cFileName]
интересно...
но как это может считать кучу файлов, не открывая их???
просто я с фтп никогда не сталкивался...
там что, все данные это один файл чтоли???
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 01.03.2019, 16:19   #7
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
но как это может считать кучу файлов, не открывая их???
просто я с фтп никогда не сталкивался...
там что, все данные это один файл чтоли???
Да не, это я про вывод в консоль написал.
Ищутся файлы по одному и названия найденных по одному выводятся в консоль.
Если сделать как у автора было изначально:
invoke WriteConsoleA,handl, offset winn.cFileName,sizeof winn.cFileName,0,0
то в консоль выведется весь буфер cFileName, а там не только имя файла, но и всякий хлам. Выглядит некрасиво. Вот я и предложил ограничить вывод в консоль именно длинной строки, а не длинной буфера.

Там сама проблема в том, что в cFileName выводится что то очень длинное. Вот откуда оно там берётся чёто ума не приложу, но это какой то хлам. И его много. Настолько много, что не влазит в поле cFileName структуры WIN32_FIND_DATAA. И начинает перетирать всё что ниже. А ниже дескриптор поиска. И поиску приходит каюк. Можно поменять местами объявления переменных winn WIN32_FIND_DATAA<?> и findd dd ? и тоже будет работать. Но это не решение проблемы. Понять бы чего туда такое пишется ????

P.S.
Кстати, если MAKSIK21 ещё появится. было бы интересно у него узнать, а как сама структура описана WIN32_FIND_DATAA ?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 01.03.2019 в 17:37.
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить txt файлы komra2 C# (си шарп) 16 11.09.2015 21:40
Получить ссылки на файлы из папки linkoln_7 PHP 3 18.01.2015 21:11
Файлы.Дан символьный файл f. Получить копию файла в файле g (на Delphi) Zaraaa Помощь студентам 5 06.10.2013 21:42
Получить файлы с ПК, не имея монитора. Человек_Борща Компьютерное железо 9 11.06.2013 18:55
Файлы. получить файл без повторных вхождений pavlintseva C++ Builder 2 14.03.2011 13:04