1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 21
1
TASM

WSprintfA: при вызове функции программа рушится

14.06.2012, 16:56. Показов 2423. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. помогите пожалуйста разобраться:
задание: используя функции WinApi, получить размер файла, заданного в командной строке.
написал код под Tasm. в соседней теме уже помогли разобраться с GetFileSize. но когда хочу вывести результат, размер файла, с помощью wsprintfA и MessageBox'a, программа рушится. подскажите, в чем причина? или подскажите какой-нибудь альтернативный способ вывода
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
include typefile.inc
.386
.model FLAT,STDCALL
.data
 
hfile    dd      ?
 
title1   db    'result', 0
error    db    'file not found!',0
good     db    'Razmer poluchen',0
fsize    db     'fsize= %d '
buff     db     255 dup (?)
 
.code
_start:         
                call    GetCommandLine          ;в EAX - указатель на коммандную строку 
                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,2                   ;Первый параметр - имя программы. Второй - имя файла.
                je      n4
                xor     edx,edx
                jmp     n2
n3:             or      edx,1
n2:             inc     esi
                jmp     n1
n4:             
                call    MessageBoxA, 0, esi, offset title1, 0
                call    CreateFile,esi,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 ;открытие файла, имя которого указано в ком. строке
                cmp     eax, -1
                je      post1
                mov     hfile,eax               
                call    GetFileSize, hfile,0  
                call    MessageBoxA, 0, offset good, offset title1, 0
                call    wsprintfA, offset  buff,offset fsize, eax
                call    MessageBoxA, 0, offset buff, offset title1, 0
                jmp end_                
post1:
                call    MessageBoxA, 0,offset error, offset title1, 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
21
22
23
24
includelib      import32.lib
 
; имена используемых функций из kernel32.dll
                extrn   ExitProcess:near
                extrn   GetCommandLineA:near
                extrn   CreateFileA:near
                extrn   CloseHandle:near
                extrn   ReadFile:near
                extrn   WriteFile:near
                extrn   GetFileSize: near
                extrn   MessageBoxA: near
                extrn   wsprintfA: near
; присваивания для облегчения читаемости кода
        GetCommandLine  equ     GetCommandLineA
        CreateFile      equ     CreateFileA
 
; определения констант и типов
 
STD_OUTPUT_HANDLE               equ     -11
GENERIC_READ                    equ     80000000h
GENERIC_WRITE                   equ     40000000h
OPEN_EXISTING                   equ     3
FILE_ATTRIBUTE_NORMAL           equ     80h
FILE_SHARE_READ                 equ     1
Добавлено через 1 час 4 минуты
оказалось надо было писать:
Assembler
1
call    _wsprintfA, offset  buff,offset fsize, eax
Добавлено через 1 минуту
но вот теперь в качестве ответа выводится 512 единиц. какой бы файл ни задал.
что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2012, 16:56
Ответы с готовыми решениями:

Getfilesize: при получении размеров файла программа рушится
Здравствуйте. помогите пожалуйста разобраться: задание: используя функции WinApi, получить размер...

При вызове функции программа не выполняется
Всем привет, буду благодарен если кто-нибудь укажет мне на мою ошибку, если раскоментировать одну...

Программа завершается аварийно при вызове функции
Делаю консольное приложение на шестом Билдере. Не могу найти ошибку.Убил день. Прога компилиться...

При скачивании обновлений или при выключении компьютера программа рушится
здравствуйте, у меня такая проблема - есть готовое click-once приложение, запускается и работает...

2
16 / 10 / 0
Регистрация: 14.06.2012
Сообщений: 25
14.06.2012, 16:59 2
В описании переменной fsize строка не оканчивается символом 0.
0
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 21
14.06.2012, 17:18  [ТС] 3
DarkVeiL, благодарю. и я там забыл кое-что добавить.
вот исправленные строки. прога правильно выдает размер файла в байтах)
Assembler
1
2
3
4
5
call    GetFileSize, hfile,0  
                mov     ebx,eax
                call    MessageBoxA, 0, offset good, offset title1, 0
                call    _wsprintfA, offset  buff,offset fsize, ebx
                call    MessageBoxA, 0, offset buff, offset title1, 0
1
14.06.2012, 17:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2012, 17:18
Помогаю со студенческими работами здесь

При вызове второго раза функции, зависает программа
Программа сначала с помощью клавиатуры выбирает куда мы будем записывать данные. При первом вызове...

Программа перестает отвечать при вызове функции accept()
Здравсвуйте, пытаюсь работать с системными сокетами, сделав сервер для простенькой сетевой игры, но...

При вызове функции программа аварийно завершает работу
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, разобраться, что я делаю не так. При...

При вызове функции из OpenSSL программа завершается с кодом 0х1
int main(int argc, char* argv) { RSA *keypair = RSA_generate_key(RSA_KEY_LENGTH, PUB_EXP, NULL,...

Есть программа, но при при вызове одной функции из main Visual Studio показывает ошибку. Не могу понять в чём дело
#include<iostream> #include<vector> using namespace std; struct Basket { int made; int...

Поисковик файлов: при неоднократном нажатии на кнопку поиска программа рушится
Пожалуйста, помогите с советом. У меня программа на основе ВинФорм и работает поиск. При одинарном...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru