Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

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 Млин ну а как тебе тогда помочь, если ты не приводишь весь код, а только обрывки на которые ты думаешь, что здесь ошибка! Так очень долго можно играться 
|
|
|

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, 14:37
|
|
Участник форума
Регистрация: 21.04.2007
Сообщений: 289
Провел на форуме: 4612647
Репутация:
368
|
|
xqwerx , вот код,которого я думаю будет достаточно для проверки:
Код:
invoke BeginUpdateResource,addr File ;Файло ресурсы которого апдейтятся
invoke _lopen,offset FtE,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 lstrlen,sm10
invoke UpdateResource,sm4,RT_RCDATA,1,0,sm10,eax
invoke _lclose,sm1
все sm'мы дворды...
invoke UnmapViewOfFile,sm10
|
|
|

03.09.2007, 14:38
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
_Great_
Ну да... Если файл открыт с флагом FILE_FLAG_OVERLAPPED,то lpOverlapped для синхронизации! Если флага FILE_FLAG_OVERLAPPED нет, то lpOverlapped - как смещение! (Подобно SetFilePointer)
// Я его обычно для синхронизации юзаю 
Последний раз редактировалось xqwerx; 03.09.2007 в 15:22..
|
|
|

03.09.2007, 14:43
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
Код HTML:
invoke lstrlen,sm10
Lol -> Вот она и ошибка! Как можно размер файла мерить функций для строк! lstrlen- эта функция перебирает байты и когда находит 0x00 - то значит конец строки и возвращает количество байтов до нуля, это для работы с null-terminated string!
Поэтому у тебя и записываются в ресурсы 4 байта в частности сигнатура DOS заголовка "MZ" это же строка в начале файла и заканчивается она нулевым байтом...
Это можно заметить при просмотре файла в HEX-режиме
Код:
00400000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZђ.......яя..
00400010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ё.......@.......
Говорю GetFileSize тебе в помошь:
Код:
DWORD GetFileSize(
HANDLE hFile, // handle of file to get size of
LPDWORD lpFileSizeHigh // address of high-order word for file size
);
invoke GetFileSize, sm1, 0
теперь в eax размер файла!!!
Последний раз редактировалось xqwerx; 03.09.2007 в 14:50..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|