ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #121  
Старый 03.09.2007, 13:58
Аватар для NeXArmAor
NeXArmAor
Участник форума
Регистрация: 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..
 
Ответить с цитированием

  #122  
Старый 03.09.2007, 14:05
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


По умолчанию

Цитата:
Т.е первые 4 байта
Это уже на что-то должно наводить! Посмотри повнимательнее свой код, может где-то опечатался и передал данные, а не указатель на них или на оборот.

// 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..
 
Ответить с цитированием

  #123  
Старый 03.09.2007, 14:11
Аватар для NeXArmAor
NeXArmAor
Участник форума
Регистрация: 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..
 
Ответить с цитированием

  #124  
Старый 03.09.2007, 14:18
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 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 тебе в помошь...
 
Ответить с цитированием

  #125  
Старый 03.09.2007, 14:21
Аватар для NeXArmAor
NeXArmAor
Участник форума
Регистрация: 21.04.2007
Сообщений: 289
Провел на форуме:
4612647

Репутация: 368
По умолчанию

xqwerx, eax исходит от другого параметра,как раз от длины файла. Я не стал в коде его приводить.
 
Ответить с цитированием

  #126  
Старый 03.09.2007, 14:26
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


По умолчанию

NeXArmAor Млин ну а как тебе тогда помочь, если ты не приводишь весь код, а только обрывки на которые ты думаешь, что здесь ошибка! Так очень долго можно играться
 
Ответить с цитированием

  #127  
Старый 03.09.2007, 14:35
Аватар для _Great_
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Сообщение от xqwerx  
invoke ReadFile, hFile, addr Buffer, nCount, addr dwTemp, 0
...
0 - этот параметр используется для синхронизации потоков ввода\вывода, нам не нужен!
Не только, еще для чтения не с текущей позиции =\
 
Ответить с цитированием

  #128  
Старый 03.09.2007, 14:37
Аватар для NeXArmAor
NeXArmAor
Участник форума
Регистрация: 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
 
Ответить с цитированием

  #129  
Старый 03.09.2007, 14:38
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


По умолчанию

_Great_
Ну да... Если файл открыт с флагом FILE_FLAG_OVERLAPPED,то lpOverlapped для синхронизации! Если флага FILE_FLAG_OVERLAPPED нет, то lpOverlapped - как смещение! (Подобно SetFilePointer)
// Я его обычно для синхронизации юзаю

Последний раз редактировалось xqwerx; 03.09.2007 в 15:22..
 
Ответить с цитированием

  #130  
Старый 03.09.2007, 14:43
Аватар для GlOFF
GlOFF
Постоянный
Регистрация: 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..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы для новичков! (faq) PEPSICOLA С/С++, C#, Delphi, .NET, Asm 92 14.05.2010 17:59
Обзор программ для очистки жёсткого диска v1ru$ Soft - Windows 21 17.01.2010 21:07
ОС с нуля z01b С/С++, C#, Delphi, .NET, Asm 36 03.07.2008 15:30
Лучший софт для Linux _-Ramos-_ Soft - *nix 11 15.01.2008 12:08
Взлом Unix а silveran *nix 4 21.12.2005 22:46



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ