.data? в FASM`e

Тема в разделе "WASM.WIN32", создана пользователем a111, 18 авг 2004.

  1. a111

    a111 New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    11
    Адрес:
    Tomsk
    Добрые люди!

    Подскажите, как нужно объявлять секцию неинициализированных данный в фасме? Спасибо.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Смотри исходники fasmw.asm
     
  3. a111

    a111 New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    11
    Адрес:
    Tomsk
    Посмотрел...

    Во, как надо:

    section '.udata' readable writeable

    Но только перед кодом, иначе не работает.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    На самом деле можно даже не объявлять, а располагать неинициализированные данные после инициализированных в .data, причем строго после.
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    a111

    > Но только перед кодом, иначе не работает.

    Неверное утверждение :derisive:
    Код (Text):
    1.  
    2. format PE GUI 4.0
    3. entry start
    4.  
    5. include '%fasminc%\win32a.inc'
    6.  
    7. section '.code' code readable writeable executable
    8.  
    9. align 4
    10. start:
    11.   mov eax, buffer
    12.   mov ecx, szCaption
    13.   invoke ExitProcess, 0
    14.  
    15.  
    16. section '.data' data readable writeable
    17.  
    18. szCaption   db  "bla bla bla",0
    19.  
    20. ; можно раскомментарить и тоже будет работать
    21. ;section '.udata' readable writeable
    22.  
    23. buffer   rb   1000h
    24.  
    25.  
    26. section '.idata' import data readable writeable
    27.  
    28. library kernel32,'KERNEL32.DLL'
    29.  
    30. include '%fasminc%\APIA\KERNEL32.INC'
     
  6. sensy

    sensy New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    29
    Asterix

    Если так делать, то размер файла будет зависеть от размера резервируемых данных.


    Код (Text):
    1. section '.data' data readable writeable
    2.  
    3. szCaption   db  "bla bla bla",0
    4.  
    5. ; если не расскоментировать, файлик будет очень большой
    6. ;section '.udata' readable writeable
    7. buffer   rd   10000h
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    sensy

    Я не понял что ты мне хотел возразить, естественно я проверил прежде чем постить.

    Так
    Код (Text):
    1. section '.data' data readable writeable
    2.  
    3. szCaption   db  "bla bla bla",0
    4.  
    5. ;section '.udata' readable writeable
    6.  
    7. buffer   rd   10000h


    размер файла получается 2048 байт



    Если так
    Код (Text):
    1. section '.data' data readable writeable
    2.  
    3. szCaption   db  "bla bla bla",0
    4.  
    5. section '.udata' readable writeable
    6.  
    7. buffer   rd   10000h


    размер файла получается 2560 байт



    ps: fasm 1.54
     
  8. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    sensy

    Размер изменился потому, что во втором случае была создана дополнительная секция.
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    sensy >




    FASM умный :). Если в конце секции нули (или неинициализированные данные), то он их к Raw Size не добавляет, поэтому размер файла на винте не увеличивается.



    Если добавить строчку <font face="monospace]dd 1</font><!--face--> в самый конец исходника, тогда файл будет большой.
     
  10. sensy

    sensy New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    29
    S_T_A_S_

    Вот! Я это и имел ввиду.



    Хотя не помню, зачем я в конце секции ставил инициализированные данные, но, однажды напоровшись на такое поведение, стал выносить неинициализированные данные в отдельную секцию.