[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. NeXArmAor

    NeXArmAor Banned

    Joined:
    21 Apr 2007
    Messages:
    226
    Likes Received:
    161
    Reputations:
    6
    xqwerx,Лага не в этом,попробуй записать,ну например архивы, с помощью функции UpdateResource в любой exe файл(именно в ресорсы). Так чисто для примера,с помощью той же ReadFile. Файл запишется,но частично. Т.е первые 4 байта. А мне нужно чтобы писал весь код файла в ресурс. Текстовые пишутся но проблем,а бины не жуются. На делфях нужно было выставлять режим чтения файлов. А как быть тут. В асме не новичок,но здесь не совсем понятно. И если у тебя получится,покажи код.

    пример:
    =============
    здесь идет чтение архива
    =============
    Запись в ресорсы
    invoke BeginUpdateResource,addr Файло
    invoke UpdateResource,dw,ResourceName,ResType,0,FileContent,SizeOfFileContent
    invoke EndUpdateResource,dw
     
    #121 NeXArmAor, 3 Sep 2007
    Last edited: 3 Sep 2007
    1 person likes this.
  2. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Это уже на что-то должно наводить! Посмотри повнимательнее свой код, может где-то опечатался и передал данные, а не указатель на них или на оборот.

    // 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 байта и все!
     
    #122 GlOFF, 3 Sep 2007
    Last edited: 3 Sep 2007
  3. NeXArmAor

    NeXArmAor Banned

    Joined:
    21 Apr 2007
    Messages:
    226
    Likes Received:
    161
    Reputations:
    6
    Вот допустим пример с мэппингом и его запись в ресы.
    Здесь не весь код,весь код слишком большой,а вообще я реализовал джойнер и застрял на данном этапе.
    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 являются двордами
     
    #123 NeXArmAor, 3 Sep 2007
    Last edited: 3 Sep 2007
  4. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Code:
    invoke UpdateResource,sm4,addr ResName,addr sm5,0,sm10,eax
    Шестой параметр -> "DWORD cbData // length of resource data, in bytes"
    это ты зачем в него ложишь eax - это же у тебя указатель на данные в памяти (фактически на первый байт файла спроецированного в память)!!!
    Разберись с этим! GetFileSize тебе в помошь...
     
  5. NeXArmAor

    NeXArmAor Banned

    Joined:
    21 Apr 2007
    Messages:
    226
    Likes Received:
    161
    Reputations:
    6
    xqwerx, eax исходит от другого параметра,как раз от длины файла. Я не стал в коде его приводить.
     
  6. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    NeXArmAor Млин ну а как тебе тогда помочь, если ты не приводишь весь код, а только обрывки на которые ты думаешь, что здесь ошибка! Так очень долго можно играться :)
     
  7. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Не только, еще для чтения не с текущей позиции =\
     
  8. NeXArmAor

    NeXArmAor Banned

    Joined:
    21 Apr 2007
    Messages:
    226
    Likes Received:
    161
    Reputations:
    6
    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
     
  9. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    _Great_
    Ну да... Если файл открыт с флагом FILE_FLAG_OVERLAPPED,то lpOverlapped для синхронизации! Если флага FILE_FLAG_OVERLAPPED нет, то lpOverlapped - как смещение! (Подобно SetFilePointer)
    // Я его обычно для синхронизации юзаю :)
     
    #129 GlOFF, 3 Sep 2007
    Last edited: 3 Sep 2007
    2 people like this.
  10. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    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 размер файла!!!
     
    #130 GlOFF, 3 Sep 2007
    Last edited: 3 Sep 2007
    3 people like this.
  11. NeXArmAor

    NeXArmAor Banned

    Joined:
    21 Apr 2007
    Messages:
    226
    Likes Received:
    161
    Reputations:
    6
    Все решилось..был невнимателен.хаха...дело в том я перепутал лстрлен и гетфайлсайз,у меня там идет запись имен файлов в ресурсы,так вот lstrlen как раз должен был использовать для имен файлов, а использовал для размера файла.
     
  12. zeppe1in

    zeppe1in Elder - Старейшина

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    invoke recv, hSocket, addr bufer, sizeof bufer, 0

    собственно ресивлю хтмл страницу от веб сервера.
    как лучше это сделать?
    непонятно как быть с памятью
    bufer db 1000000000000 dup (?)
    так ведь непойдёт)
     
    1 person likes this.
  13. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> bufer db 1000000000000 dup (?)
    >> так ведь непойдёт)

    да нормально петабайтная страница как раз поместица.. +))
     
    1 person likes this.
  14. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    VirtualAlloc, VirtualFree....
     
    1 person likes this.
  15. delay(0)

    delay(0) Member

    Joined:
    22 Nov 2006
    Messages:
    90
    Likes Received:
    41
    Reputations:
    6
    Есть книжка, с кучей примеров кода, но во всех автор инклудит свою библиотеку, и использует описаные там процедуры... Нашел на диске следующие файлы:
    http://i042.radikal.ru/0710/63/13d76e5e03d8.jpg
    ---
    Как умел раскидал их по директориям, но видно, что плохо умею. :)

    Как грамотно её добавить?
     
    2 people like this.
  16. Ky3bMu4

    Ky3bMu4 Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Кидай irvine32.inc в C:\\masm32\Include
    А потом: include /masm32/include/irvine32.inc
     
    3 people like this.
  17. AFoST

    AFoST Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    Подскажите удобную среду разработки ассемблерных программ (блокнот не предлагать)
     
  18. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Visual asm, MASM - builder, а так я за блокнот :)
     
  19. Lamia

    Lamia Elder - Старейшина

    Joined:
    11 Jul 2007
    Messages:
    186
    Likes Received:
    77
    Reputations:
    -9
    По мне так это Radasm!Поддержка многих компиляторов!Но на вкус и цвет как говорится....
     
  20. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Negatory Assembly studio

    http://www.negatory.com/asmstudio/
     
    1 person likes this.