Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для Avicii
2 / 2 / 2
Регистрация: 01.12.2012
Сообщений: 123

Функция WinAPI CopyFile

03.04.2015, 18:52. Показов 3519. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста с функцией WinAPI CopyFile. Нужно скопировать данные файла,программа работает,но нужна доработка в плане замены offset intext.
Assembler
1
call    CopyFile,offset intext,esi,0
Мои попытки замены не удались,помогите или подскажите кто может
Данные батника.
Assembler
1
2
3
4
tasm32 /ml copyfile.asm
tlink32 /Tpe /ap /c /x copyfile.obj
copyfile.exe inf.txt out.txt
pause
Сама программа
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
include typefile.inc
.386
.model FLAT,STDCALL
.data
infile          dd      ?
outfile         dd      ?
buf             db      100 dup(0)
bufer           db      300 dup(0)
numb            dd      ?
numw            dd      ?
nameout         db      'CONOUT$'
intext          db      'inf.txt',0
outext          db      'out.txt',0
.code
_start:         call    GetCommandLine          
                mov     esi,eax
                xor     ecx,ecx                 
                mov     edx,1                   
n1:             cmp     byte ptr [esi],0        
                je      end_                    
                cmp     byte ptr [esi],32       
                je      n3
                add     ecx,edx
                cmp     ecx,3                   
                je      n4
                xor     edx,edx
                jmp     n2
n3:             or      edx,1   
n2:             inc     esi
                jmp     n1
n4:             call    CopyFile,offset intext,esi,0
end_:           call    ExitProcess,0
end     _start
и данные typefile.inc
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
includelib      import32.lib
 
; имена используемых функций из kernel32.dll
                extrn   ExitProcess:near
                extrn   GetCommandLineA:near
                extrn   CreateFileA:near
                extrn   CloseHandle:near
                extrn   ReadFile:near
                extrn   WriteFile:near
                extrn   MoveFileA:near
                extrn   CopyFileA:near
; присваивания для облегчения читаемости кода
        GetCommandLine  equ     GetCommandLineA
        CreateFile      equ     CreateFileA
        CopyFile        equ     CopyFileA
; определения констант и типов
STD_OUTPUT_HANDLE               equ     -11
GENERIC_READ                    equ     80000000h
GENERIC_WRITE                   equ     40000000h
OPEN_EXISTING                   equ     3
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.04.2015, 18:52
Ответы с готовыми решениями:

CopyFile функция
Как сделать копию файла лежащего в одном каталоге с екзешником не указывая локального диска? Пример: CopyFile('docs\1.txt', 'C:\1.txt',...

Функция CopyFile
Всем добрый день! Подскажите,где моя ошибка. Мне надо,чтобы программа копировала с локального диска D,с папки 111 на сервер Pdc в папку...

Функция CopyFile работает не со всеми параметрами
Подскажите, пожалуйста. Почему так работает: if...

5
Terminator of naked apes
 Аватар для KyberMax
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
04.04.2015, 12:05
Hi, Avicii, как оно ничего, например? ;о)

Допилил ли ты до приплюснутой сиськи своё уравнение? Подвесил бы результат, а то норот тут периодически мечется с похожими задачками, например ;о)

Что же до твоего очередного призыва о помощи, то решение на поверхности: тебе надо выковырять из командной строки имена файла-источника и файла-приёмника. Здесь нужен парсер командной строки.

И вот тут-то возникает вопрос: почему для нопейсания прожки ты выбрал именно Tasm32, когда есть Masm32 с готовой библиотекой функций (пусть не самых удачных), включая и парсер, например? ;о)

Вот пример твоей проги на Masm32:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
;
.386
.MODEL FLAT, STDCALL
OPTION CASEMAP: NONE
;
IncLib MACRO LibFn
INCLUDE \Masm32\INCLUDE\LibFn.INC
INCLUDELIB \Masm32\LIB\LibFn.LIB
ENDM
;
INCLUDE \Masm32\INCLUDE\Windows.INC
IncLib Kernel32
IncLib User32
IncLib Masm32
;
copyFile    PROTO
getArg      PROTO ArgIndex:Dword, pchBuf:PSTR, pszNotFound:PSTR
;
CR          EQU   0Dh
LF          EQU   0Ah
;
OwnFnameInd EQU   0
SrcFnameInd EQU   OwnFnameInd + 1
DstFnameInd EQU   SrcFnameInd + 1
;
.DATA
szAppName   CHAR  "Test of CopyFile WinAPI Function", CR, LF, 0
szNoSrc     CHAR  " no source file name", CR, LF, 0
szNoDst     CHAR  " no destination file name", CR, LF, 0
szOpenQuot  CHAR  " non matching quotation marks", CR, LF, 0
szEmptQuot  CHAR  " no argument or empty quotation marks", CR, LF, 0
szFail      CHAR  " copying failed", CR, LF, 0
szDone      CHAR  " done"
szCrLf      CHAR  CR, LF, 0
;
.DATA?
chFnSrc     CHAR  MAX_PATH Dup(?)
chFnDst     CHAR  MAX_PATH Dup(?)
;
.CODE
START:
      INVOKE StdOut, Addr szAppName       ; Function from Masm32 Lib
      INVOKE copyFile
      INVOKE ExitProcess, EAX
;
copyFile PROC Uses EBX EDI
; Return: EAX = ExitCode
LOCAL pcherrbuf:PSTR
      XOR   EBX, EBX                      ; No Error Exit Code
      XOR   EDI, EDI                      ; pErrMsg
      INVOKE getArg, SrcFnameInd, Addr chFnSrc, Addr szNoSrc
      JC    error
      INVOKE getArg, DstFnameInd, Addr chFnDst, Addr szNoDst
      JC    error
      INVOKE CopyFile, Addr chFnSrc, Addr chFnDst, TRUE
      LEA   EDX, szDone
      TEST  EAX, EAX
      JNZ   showresult                    ; OK
      INVOKE GetLastError
      TEST  EAX, EAX
      JZ    copyerr
      MOV   EDX, EAX
      INVOKE FormatMessage, FORMAT_MESSAGE_ALLOCATE_BUFFER Or FORMAT_MESSAGE_FROM_SYSTEM Or \
            FORMAT_MESSAGE_MAX_WIDTH_MASK, 0, EDX, LANG_NEUTRAL OR (SUBLANG_NEUTRAL Shl 10), \
            Addr pcherrbuf,  0, 0
      TEST  EAX, EAX
      JZ    copyerr
      MOV   EDI, pcherrbuf
copyerr:
      LEA   EDX, szFail
error:
      INC   EBX                           ; Error Exit Code
showresult:
      INVOKE StdOut, EDX
      TEST  EDI, EDI
      JZ    exit
      INVOKE CharToOem, EDI, EDI
      INVOKE StdOut, EDI
      INVOKE StdOut, Addr szCrLf
      INVOKE LocalFree, EDI
exit:
      MOV   EAX, EBX
      RET
copyFile ENDP
;
getArg PROC argind:Dword, pchbuf:PSTR, psznotfound:PSTR
; Return: if error CF is set, EDX = error msg address
      INVOKE GetCL, argind, pchbuf        ; Function from Masm32 Lib
      CLC
      DEC   EAX
      JZ    exit                          ; OK
      MOV   EDX, psznotfound
      DEC   EAX
      JZ    error
      LEA   EDX, szOpenQuot
      DEC   EAX
      JZ    error
      LEA   EDX, szEmptQuot
error:
      STC
exit:
      RET
getArg ENDP
;
      END    START
;
Как видно из примера, функция GetCL из библиотеки Masm32.

У тебя есть несколько вариантов решения проблемы:
1. Самому запилить парсер, хотя бы простенький.
2. Найти его где-нибудь в паутинке.
3. Выдрать его из библиотеки Masm32 и перепилить под TASM.
4. Попробовать использовать библиотеку Masm32.LIB
5. Тупо перейти на Masm32 и не заморачиваться с TASM, например ;о)
Вложения
Тип файла: zip CopyFile.zip (1.1 Кб, 5 просмотров)
1
 Аватар для Avicii
2 / 2 / 2
Регистрация: 01.12.2012
Сообщений: 123
06.04.2015, 16:27  [ТС]
Изучаем на tasm, лабораторные на нем делаем. Я не понимаю как распарсить...тут идет считывания до пробела,его надо как-то занести в определенную переменную,конечное назание файла как-то же хранится в esi.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.04.2015, 18:58
Цитата Сообщение от Avicii Посмотреть сообщение
Я не понимаю как распарсить...тут идет считывания до пробела,его надо как-то занести в определенную переменную,конечное назание файла как-то же хранится в esi.
Маленький парсер у Вас уже есть строки 16:30;
Сдедайте свой: пропустили начальные пробелы - запомнили в другом регистре начало строки первого аргумента, продолжаете пропускать аргумент до символа-разделителя(" ", "," "-" и т.д.), нашли забиваете туда 0, и начинаете продолжаете анализировать второй аргумент(см. выше)-начало в регистр, в конце 0.
0
Terminator of naked apes
 Аватар для KyberMax
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
06.04.2015, 19:40
Цитата Сообщение от Avicii Посмотреть сообщение
Изучаем на tasm, лабораторные на нем делаем. Я не понимаю как распарсить...
Avicii, понятно - препод хочет, чтобы ты сам парсер наваял, например ;о) Однако парсеры кодить легко и приятно - посмотри, вот тут прикрутил к одной прожке (только это вариант для доси: строка заканчивается не нулём, а $, например ;о)
0
 Аватар для Avicii
2 / 2 / 2
Регистрация: 01.12.2012
Сообщений: 123
06.04.2015, 21:45  [ТС]
я асм едва едва тяну,чужие программы для меня ад
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2015, 21:45
Помогаю со студенческими работами здесь

WinApi С++ Функция GetCPUInfo
Доброго времени суток. Было дано задание написать приложение которое считывает сведения о конфигурации компьютера и выводит его в лист...

Функция winApi WriteFileEx()
Сейчас столкнулся с асинхронными файловыми операциями (I/O). Нашел в сети исходник который должен записать на дискету файл в асинхроном...

функция winApi CreateFileMapping()
Сейчас столкнулся с проблемой. Полное непонимание FileMapping Есть следующий код. Он должен выводить в мемо строку из swap-файла.. Не...

Есть ли в WinAPI функция DlgTemplate?
В листинге 6.1 в книге Ганеева "Проектирование интерфейса средствами WIN32 API" есть функция DlgTemplate. Однако компилятор ругается на то,...

Функция WinApi повышения прав
Есть ли способ получения прав администратора программе с помощью WinApi функций (не используя manifest)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru