
02.09.2007, 00:08
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
Практика? Учебники по алгебре с 8 по 11, решай задачи с максимальной оптимизацией алгоритма.
|
|
|

03.09.2007, 13:26
|
|
Участник форума
Регистрация: 21.04.2007
Сообщений: 289
Провел на форуме: 4612647
Репутация:
368
|
|
Вопросец есть один...как включить в масме режим чтения бинарных файлов? Нужно,чем раньше будет ответ,тем лучше. Искал везде...в делфях включается режим FileMode:=0 а в асме как?.
|
|
|

03.09.2007, 13:46
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
NeXArmAor В масме думаю нет понятия бинарное чтение или чтение строк к примеру, т.к. нет библиотек типа MFC и VCL -> поэтому чтение осуществяется с помощью WinAPI функций, в частности:
invoke ReadFile, hFile, addr Buffer, nCount, addr dwTemp, 0
где hFile - хендл файла, из которого читать (получаем после вызова CreateFile)
Buffer - буфер, может быть обьявлен как "Buffer db 1024 dup(?)";
nCount - это число, т.е. сколько байт считать
dwTemp - это переменная, куда будет записано, сколько байт реально считаны было
0 - этот параметр используется для синхронизации потоков ввода\вывода, нам не нужен!
|
|
|

03.09.2007, 14:35
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Сообщение от xqwerx
invoke ReadFile, hFile, addr Buffer, nCount, addr dwTemp, 0
...
0 - этот параметр используется для синхронизации потоков ввода\вывода, нам не нужен!
Не только, еще для чтения не с текущей позиции =\
|
|
|

03.09.2007, 13:58
|
|
Участник форума
Регистрация: 21.04.2007
Сообщений: 289
Провел на форуме: 4612647
Репутация:
368
|
|
xqwerx,Лага не в этом,попробуй записать,ну например архивы, с помощью функции UpdateResource в любой exe файл(именно в ресорсы). Так чисто для примера,с помощью той же ReadFile. Файл запишется,но частично. Т.е первые 4 байта. А мне нужно чтобы писал весь код файла в ресурс. Текстовые пишутся но проблем,а бины не жуются. На делфях нужно было выставлять режим чтения файлов. А как быть тут. В асме не новичок,но здесь не совсем понятно. И если у тебя получится,покажи код.
пример:
=============
здесь идет чтение архива
=============
Запись в ресорсы
invoke BeginUpdateResource,addr Файло
invoke UpdateResource,dw,ResourceName,ResType,0,FileConte nt,SizeOfFileContent
invoke EndUpdateResource,dw
Последний раз редактировалось NeXArmAor; 03.09.2007 в 14:05..
|
|
|

03.09.2007, 14:05
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
Это уже на что-то должно наводить! Посмотри повнимательнее свой код, может где-то опечатался и передал данные, а не указатель на них или на оборот.
// P.s. Ну а лучше приведи кусок кода с обьявленными переменными, который нужно отладить...
Дабавляю:
Код:
BOOL UpdateResource(
HANDLE hUpdate, // update-file handle
LPCTSTR lpType, // address of resource type to update
LPCTSTR lpName, // address of resource name to update
WORD wLanguage, // language identifier of resource
LPVOID lpData, // address of resource data
DWORD cbData // length of resource data, in bytes
);
lpType,lpName, lpData - должны передаваться как указатели т.е. в твоем случае "ADDR ResourceName". Подправь имена передаваемых переменныx и sizeof раздельно...
И ещё ты может при чтение из архива прочел 4 байта и все!
Последний раз редактировалось xqwerx; 03.09.2007 в 14:12..
|
|
|

03.09.2007, 14:11
|
|
Участник форума
Регистрация: 21.04.2007
Сообщений: 289
Провел на форуме: 4612647
Репутация:
368
|
|
Вот допустим пример с мэппингом и его запись в ресы.
Здесь не весь код,весь код слишком большой,а вообще я реализовал джойнер и застрял на данном этапе.
Код:
invoke _lopen,offset File,OF_READ
mov sm1,eax
invoke CreateFileMapping,sm1,NULL,PAGE_READONLY,0,0,NULL
mov sm9,eax
invoke MapViewOfFile,sm9,FILE_MAP_READ,0,0,0
mov sm10,eax
invoke UpdateResource,sm4,addr ResName,addr sm5,0,sm10,eax
invoke _lclose,sm1
invoke UnmapViewOfFile,sm10
Где sm1,sm9,sm10,sm4,sm5 являются двордами
Последний раз редактировалось NeXArmAor; 03.09.2007 в 14:17..
|
|
|

03.09.2007, 14:18
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
Код:
invoke UpdateResource,sm4,addr ResName,addr sm5,0,sm10,eax
Шестой параметр -> "DWORD cbData // length of resource data, in bytes"
это ты зачем в него ложишь eax - это же у тебя указатель на данные в памяти (фактически на первый байт файла спроецированного в память)!!!
Разберись с этим! GetFileSize тебе в помошь...
|
|
|

03.09.2007, 14:21
|
|
Участник форума
Регистрация: 21.04.2007
Сообщений: 289
Провел на форуме: 4612647
Репутация:
368
|
|
xqwerx, eax исходит от другого параметра,как раз от длины файла. Я не стал в коде его приводить.
|
|
|

03.09.2007, 14:26
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
NeXArmAor Млин ну а как тебе тогда помочь, если ты не приводишь весь код, а только обрывки на которые ты думаешь, что здесь ошибка! Так очень долго можно играться 
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Вопросы для новичков! (faq)
|
PEPSICOLA |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
92 |
14.05.2010 17:59 |
|
ОС с нуля
|
z01b |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
36 |
03.07.2008 15:30 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|