Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
8 / 8 / 2
Регистрация: 23.12.2013
Сообщений: 101

Побайтовый вывод файла

29.06.2014, 20:42. Показов 2412. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь ввести в консоль файл в шестнадцатеричном виде, но происходит ошибка при выполнении.

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
format PE console 4.0
 
include 'win32a.inc'
     xor     ebx, ebx ;
    
         invoke  CreateFile,\
             fin,\
             GENERIC_READ,\
             0,\
             0,\
             OPEN_EXISTING,\
             FILE_ATTRIBUTE_ARCHIVE,\
             0
     mov     [hFile],eax
     
     invoke  GetFileSize,[hFile],0
     
     mov     [lFile],eax
     
     mov     esi,[lFile]
      
      @loop:
 
     invoke  ReadFile,hFile,inbuf,1,szReadByte,0
     
     mov [buffer+inbuf], szReadByte
     
     inc     [inbuf]
 
     dec     esi
     
     jnz     @loop
    
    invoke printf,tpt, buffer
      
     
    invoke  CloseHandle,[hFile]
    
   
    invoke _getch
    invoke  exit, 0
    
fin db  'test1.exe',0
tpt db  '%X',0
 
hFile         dd ?
lFile         dd ?
inbuf         dd ?
szReadByte    dd ?
buffer dd ?
  
; import data in the same section
 data import
library msvcrt,'MSVCRT.DLL',\
    kernel32, 'kernel32.dll'
 
 import kernel32,\
    CloseHandle,'CloseHandle',\
    GetFileSize,'GetFileSize',\
    ReadFile,'ReadFile',\
    CreateFile, 'CreateFileA'
 
 import msvcrt,\
 _getch,'_getch',\
    printf,'printf',\
    exit,'exit'
    
    
    
end data
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2014, 20:42
Ответы с готовыми решениями:

Побайтовый вывод значения типа double
Есть решение задачи побайтового вывода значения типа double на экран. Объясните плиз каким образом это происходит. В частности функция:...

Побайтовый XOR файла
Здравствуйте. Есть задача: заксорить каждый байт входного файла и записать его вы выходной. Накидал вот это: void gamma(FileStream^ in,...

Побайтовый поиск
Здравствуйте у меня возник , вопрос попытался решить не выйшло , вообщем. Нужно зделать побайтовое сравнения в бинарном файле. Можна...

13
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
30.06.2014, 00:43
Следующие после ReadFile две команды так и не были мною поняты
Assembler
1
2
mov [buffer+inbuf], szReadByte ; адрес переменной под число прочитанных байт поместить по адресу ??? чёрти куда
inc     [inbuf] ; инкриминировать последний прочитанный байт. Зачем?!
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
30.06.2014, 07:06
Зачем там вообще цикл?
Assembler
1
2
invoke GetFileSize,[hFile],0
invoke ReadFile,[hFile],buffer,eax,szReadByte,0
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
30.06.2014, 10:00
Лучший ответ Сообщение было отмечено Aneonfas как решение

Решение

Дык, эта:
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
format PE console 4.0
buf_sz      =   16
include 'win32a.inc'
    invoke  GetCommandLine  
; argv[0], имя собственной .exe, больше в ком. строке ничего не задавать.
    invoke  fopen, eax, mode ;O_RDONLY or O_BINARY
    mov [FP], eax
again:  invoke  fread,  buf, 1, buf_sz, [FP]
    mov [cnt], eax
    invoke  ferror, [FP]
    mov [_err],eax
    mov esi, buf
    mov ecx, [cnt]
    jcxz    gtfo        ; .опа наступает, если длина файла кратна buf_sz
; выводим смещение в файле
    push    ecx     ; ECX/EDX будут загажены безвозмездно
    cinvoke printf, tpo, [pos]
    pop ecx
    add [pos], ecx
;
@@: push    ecx     ; ECX/EDX будут загажены безвозмездно
    lodsb
    cinvoke printf, tpt, eax
    pop ecx
    loop    @B
    cinvoke puts, crlf  ; тут хитрость - <CR>/<LF> puts(); всё равно выведет
;
    cmp [_err], 0
    jz  again
gtfo:   invoke  fclose, [FP]
    invoke _getch
    invoke  exit, 0
FP  dd  ?
_err    dd  ?    
cnt dd  ?    
pos dd  0   
mode    db  'rb',0
tpo db  '%08lX: ',0
tpt db  '%02X ',0
crlf    =   $ - 1
buf db  buf_sz dup(?)
; import data in the same section
 data import
 library kernel32,'KERNEL32.DLL',\
    msvcrt,'MSVCRT.DLL'
 
 import kernel32,\
    GetCommandLine,'GetCommandLineA'
 
 import msvcrt,\
    _getch,'_getch',\
    printf,'printf',\
    puts,'puts',\
    ferror,'ferror',\
    fclose,'fclose',\
    fread,'fread',\
    fopen,'fopen',\
    ftell,'ftell',\
    exit,'exit'
end data
1
8 / 8 / 2
Регистрация: 23.12.2013
Сообщений: 101
30.06.2014, 11:40  [ТС]
Спасибо большое, а где можно посмотреть описание библиотеки MSVCRT.DLL?
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
30.06.2014, 11:51
http://msdn.microsoft.com/en-u... ca0c2.aspx
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
30.06.2014, 12:14
murderer, там много ф-ций, которых нет в обычной поставке виндавса, а посему я предпочитаю самопальный список импорта и доходчивое описание ф-ций clib(pdf) или виндавсный .hlp от Waterloo.
Мелкие пакостные отличия от стандарта есть, но некрософт без этого не может.
2
8 / 8 / 2
Регистрация: 23.12.2013
Сообщений: 101
30.06.2014, 13:56  [ТС]
Assembler
1
2
3
4
5
6
7
8
9
@@: 
    push    ecx     ; ECX/EDX будут загажены безвозмездно
    lodsb
    cinvoke printf, tpt, eax
    pop ecx
    loop    @B
    cinvoke puts, crlf  ; тут хитрость - <CR>/<LF> puts(); всё равно выведет
;
    cmp [_error], 0
Прошу прощения, но тут еще немножко не понял:

1. "@@: и loop @B" как работает это дело? т.е. что это за буква B вместо второго @?
2. buffer db buffer_size dup(?) почему не buffer db buffer_size?
3.
Assembler
1
2
 cinvoke puts, crlf
crlf    =   $ - 1
стоит ли это как-то понимать или это просто прием перевода каретки?
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
30.06.2014, 14:22
Цитата Сообщение от Aneonfas Посмотреть сообщение
1. "@@: и loop @B" как работает это дело? т.е. что это за буква B вместо второго @?
@B - это back, ближайшая локальная метка взаду, равно как и @F(forward) - ближайшая локальная метка впереди от тек. инструкции.
"@@" обозначает анонимную метку, вы можете определить её множество раз. Символ "@b" (или эквивалент "@r") ссылается на ближайшую предшествующую анонимную метку, а символ "@f" ссылается на ближашую после неё анонимною метку. Эти специальные символы нечувствительны к регистру.
Цитата Сообщение от Aneonfas Посмотреть сообщение
2. buffer db buffer_size dup(?) почему не buffer db buffer_size?
Потому что резервируется buffer_size байт под буфер.
Цитата Сообщение от Aneonfas Посмотреть сообщение
стоит ли это как-то понимать
Просто экономим байт.
1
8 / 8 / 2
Регистрация: 23.12.2013
Сообщений: 101
30.06.2014, 16:03  [ТС]
Не пойму, происходит ошибка при чтении файла более 190 кбайт.
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
30.06.2014, 17:17
Угу, сам удивлён. Но если переназначить вывод в файл, слетает дальше. 2FAF0h на консоль и 30454h при редиректе. Впервые с таким сталкиваюсь.
0
8 / 8 / 2
Регистрация: 23.12.2013
Сообщений: 101
30.06.2014, 18:41  [ТС]
запустил программу в ollydbg, при каждом чтении в стек что-то заносится и не извлекается, я не очень в этом разбираюсь, но может в этом дело?

Добавлено через 19 минут
fread и ferror за собой кажется не убирают
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
30.06.2014, 18:47
Лучший ответ Сообщение было отмечено Aneonfas как решение

Решение

Цитата Сообщение от Aneonfas Посмотреть сообщение
fread и ferror за собой кажется не убирают
Да, заменил на cinvoke - всё задышало. Это и есть те пакости, о которых я предупреждал.
1
8 / 8 / 2
Регистрация: 23.12.2013
Сообщений: 101
30.06.2014, 18:52  [ТС]
И правда! Спасибо за помощь и терпение =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2014, 18:52
Помогаю со студенческими работами здесь

Возможен ли побайтовый доступ к переменной?
Привет. Скажите пожалуйста, возможно ли осуществить побайтовый доступ к переменной, например int - 4 байтовая переменная, в ассемблере (к...

Построчный вывод текстового файла и вывод комментария к каждой строке.
Программа делает выгрузку текстового файла с сервера и отображает содержимое текстового файла на страничке. Мне нужно сделать так, что бы...

Пропуск чтения пустого файла docx (и вывод полного содержимого файла)
Добрый день! Данный кусок кода при чтении пустого файла docx выдает ошибку – «…&quot;Package not found at '%s'&quot; % pkg_file ...

Реализовать поиск файла в каталоге и вывод на консоль заданных атрибутов найденного файла
Приведите, пожалуйста, пример кода программы, которая ищет файлы, находящиеся в каталоге, и выдаёт на консоль имя, тип и дату последней...

Вывод из файла в QTableWidget, построчное чтение с конца файла
Привет! Делаю первые шаги в Qt, собственно поэтому без проблем никуда. Моя задача на данный момент вывести из текстового файла...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru