xqwerx,Лага не в этом,попробуй записать,ну например архивы, с помощью функции UpdateResource в любой exe файл(именно в ресорсы). Так чисто для примера,с помощью той же ReadFile. Файл запишется,но частично. Т.е первые 4 байта. А мне нужно чтобы писал весь код файла в ресурс. Текстовые пишутся но проблем,а бины не жуются. На делфях нужно было выставлять режим чтения файлов. А как быть тут. В асме не новичок,но здесь не совсем понятно. И если у тебя получится,покажи код. пример: ============= здесь идет чтение архива ============= Запись в ресорсы invoke BeginUpdateResource,addr Файло invoke UpdateResource,dw,ResourceName,ResType,0,FileContent,SizeOfFileContent invoke EndUpdateResource,dw
Это уже на что-то должно наводить! Посмотри повнимательнее свой код, может где-то опечатался и передал данные, а не указатель на них или на оборот. // P.s. Ну а лучше приведи кусок кода с обьявленными переменными, который нужно отладить... Дабавляю: Code: 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 байта и все!
Вот допустим пример с мэппингом и его запись в ресы. Здесь не весь код,весь код слишком большой,а вообще я реализовал джойнер и застрял на данном этапе. Code: 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 являются двордами
Code: invoke UpdateResource,sm4,addr ResName,addr sm5,0,sm10,eax Шестой параметр -> "DWORD cbData // length of resource data, in bytes" это ты зачем в него ложишь eax - это же у тебя указатель на данные в памяти (фактически на первый байт файла спроецированного в память)!!! Разберись с этим! GetFileSize тебе в помошь...
NeXArmAor Млин ну а как тебе тогда помочь, если ты не приводишь весь код, а только обрывки на которые ты думаешь, что здесь ошибка! Так очень долго можно играться
xqwerx , вот код,которого я думаю будет достаточно для проверки: Code: 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
_Great_ Ну да... Если файл открыт с флагом FILE_FLAG_OVERLAPPED,то lpOverlapped для синхронизации! Если флага FILE_FLAG_OVERLAPPED нет, то lpOverlapped - как смещение! (Подобно SetFilePointer) // Я его обычно для синхронизации юзаю
HTML: invoke lstrlen,sm10 Lol -> Вот она и ошибка! Как можно размер файла мерить функций для строк! lstrlen- эта функция перебирает байты и когда находит 0x00 - то значит конец строки и возвращает количество байтов до нуля, это для работы с null-terminated string! Поэтому у тебя и записываются в ресурсы 4 байта в частности сигнатура DOS заголовка "MZ" это же строка в начале файла и заканчивается она нулевым байтом... Это можно заметить при просмотре файла в HEX-режиме Code: 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 тебе в помошь: Code: 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 размер файла!!!
Все решилось..был невнимателен.хаха...дело в том я перепутал лстрлен и гетфайлсайз,у меня там идет запись имен файлов в ресурсы,так вот lstrlen как раз должен был использовать для имен файлов, а использовал для размера файла.
invoke recv, hSocket, addr bufer, sizeof bufer, 0 собственно ресивлю хтмл страницу от веб сервера. как лучше это сделать? непонятно как быть с памятью bufer db 1000000000000 dup (?) так ведь непойдёт)
>> bufer db 1000000000000 dup (?) >> так ведь непойдёт) да нормально петабайтная страница как раз поместица.. +))
Есть книжка, с кучей примеров кода, но во всех автор инклудит свою библиотеку, и использует описаные там процедуры... Нашел на диске следующие файлы: http://i042.radikal.ru/0710/63/13d76e5e03d8.jpg --- Как умел раскидал их по директориям, но видно, что плохо умею. Как грамотно её добавить?