Структуры в FASM

Тема в разделе "WASM.ASSEMBLER", создана пользователем dr_dred, 3 авг 2005.

  1. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Как в FASM написать это:


    Код (Text):
    1. DataDirectory IMAGE_DATA_DIRECTORY 16 dup(<>)




    И как потом обращаться к, скажем, третьему элементу.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    старыми макросами было так:

    DataDirectory rb sizeof.IMAGE_DATA_DIRECTORY * 16



    обратиться к третьему элементу:

    mov esi,DataDirectory

    add esi,sizeof.IMAGE_DATA_DIRECTORY*3



    далее через virtual к членам IMAGE_DATA_DIRECTORY.



    Сейчас в фасме есть и dup, и структуры описываются по-другому, поэтому пусть другие скажут.
     
  3. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    IceStudent

    Что-то у меня dup не получется использовать. Но получается что-то вроде

    DataDirectory IMAGE_DATA DIRECTORY <16>

    Не знаю только вот что это в фасме означает.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Это инициализация первого члена IDD значением 16, не катит.
     
  5. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    DataDirectory db IMAGE_NUMBEROF_DIRECTORY_ENTRIES*sizeof.IMAGE_DATA_DIRECTORY dup (?)
     
  6. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    я подумываю кстати написать конвертр инков из масма в фасм а то тоже бесит все руками. или может кто уже сделал? ежели так то свисните. я кстати написал грабер импортов для фасма те натравливаеш его на дллку и он делает инк. по такому типу



    align 04h



    kernel32ApiTable:

    dd kernel32LibName

    dd kernel32LibApiTable



    align 04h



    kernel32LibName:

    db 'kernel32.dll', 00h



    align 04h



    kernel32LibApiTable:



    dd aActivateActCtx

    _ActivateActCtx:

    dd @EXCEPTION_ApiNotReady



    align 04h



    .....



    dd @EXECWORK_ApiTableOver





    dd kernel32ApiTable



    align 04h



    aActivateActCtx:

    db 'ActivateActCtx', 00h



    align 04h



    ....



    @EXCEPTION_ApiNotReady



    эта процедурка грузит либу и находит аддр для этой апи и передает вызов те либа грузится когда она нужна. если кому такая тулза нужна могу кинуть.
     
  7. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine


    на сайте фасма нечто подобное недавно выкладывали - я скачал, но еще не смотрел
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    d2inc by kinder. хорошая вещь.
     
  9. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    doctor_Ice

    Тоже такое делал, но не по такому принципу. У меня еще делилось на apia и apiw.



    Если писать
    Код (Text):
    1. DataDirectory rb sizeof.IMAGE_DATA_DIRECTORY * 16


    или
    Код (Text):
    1. DataDirectory db IMAGE_NUMBEROF_DIRECTORY_ENTRIES*sizeof.IMAGE_DATA_DIRECTORY dup (?)


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



    Ничего более разумного чем
    Код (Text):
    1.         DataDirectory                   IMAGE_DATA_DIRECTORY
    2.         rb sizeof.IMAGE_DATA_DIRECTORY*15


    не нашел.
     
  10. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    я обращаюсь так

    mov ebx, d_w_p [ebx+IMAGE_NT_HEADERS.OptionalHeader+IMAGE_OPTIONAL_HEADER32.DataDirec tory+IMAGE_DATA_DIRECTORY.VirtualAddress]
     
  11. Privalov

    Privalov New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2004
    Сообщения:
    16
  12. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    Код (Text):
    1.  
    2. struc WSADATA {
    3.   .wVersion dw 0
    4.   .wHighVersion dw 0
    5.   .szDescription : times 257 db 0
    6.   .szSystemStatus : times 129 db 0
    7.   .iMaxSockets dw 0
    8.   .iMaxUdpDg dw 0
    9.   .lpVendorInfo dd 0
    10. };WSADATA
    11. ;ends
    12. wsd WSADATA ; определение "переменной" типа структура WSADATA
    13.  


    mov eax,[wsd.lpVendorInfo]
     
  13. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Что-то мне кажется, что если бы фасм целиком перенял бы какой-то один синтаксис (TASM/MASM/NASM), было б лучше, нежели мешанина из синтаксисов + отсебятина (pure imho).



    P.S. Если к 10кг повидла добавить 1кг говна, получится 11кг говна.
     
  14. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    мне ОЧЕНЬ нравится синтаксис фасм. и, следуя пс _ВС_, считаю его повидлом, поэтому не будем к нему чего-либо добавлять. ну, а если нравится
    - то какие проблемы? можно ими непосредственно и пользоваться ;)
     
  15. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    _BC_ А по-моему фасм стремится к поддержке ситнаксисов TASM/MASM/NASM, т.е. хочешь пиши "mov dword ptr variable,1" а хочешь "mov dword[variable],1" он правильно переварит и то и другое, а повидлу куда там ему ... для фасма это нормальная строка кода



    mov dword[variable], not (0x8888 shl 16 and 0x0f0f0f0f or 0x30303030) + 0x8888 mod 16
     
  16. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    да. вот давеча и while прикрутили..
     
  17. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    А теперь еще masm.inc добавился 8-)

    option prologue, option epilogue, и процедуры так можно объявлять:
    Код (Text):
    1. WndProc [b]proc[/b] hwnd:dword,umsg:dword,wparam:dword,lparam:dword
    2.    [b]local ps:PAINTSTRUCT
    3.    local hDC:DWORD
    4.    local FileNameBuffer[MAX_PATH]:byte[/b]
    5.    ...
    6.    invoke BeginPaint,[hwnd],[b]addr[/b] ps
    7.    ...
    8.    [b]ret[/b]
    9. WndProc [b]endp[/b]




    Очень мне нравится win32axp.inc - с количеством параметров функции не ошибешься.

    и еще много чего. От FASM к MASM все же не сложно перейти. Разве что смущает отсутствие offset и частое присутствие квадратных скобок.
     
  18. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    bogrus



    Сильно же он стремится, что поддержка dup только недавно появилась. А чем его авторам директива assume не угодила?



    для фасма это нормальная строка кода



    mov dword[variable], not (0x8888 shl 16 and 0x0f0f0f0f or 0x30303030) + 0x8888 mod 16




    Для TASM'а в режиме Ideal тоже. Тасм кстати даже поддерживает столь модные щас HLL-макросы.

    Интересно, какой <censored> начал первым усиленно пользовать эти поганые .IF, .WHILE и тд, отделять блоки пробелами как в паскале и ввел моду на всяческие IDE. Блевать тянет, глядя на эти заскорузлые макросы и прыгающую табуляцию. Утешает лишь то, что в исходниках, оформленных подобным образом, смотреть как правило нечего. :)
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    На вкус и цвет.. Мне удобнее без него: иногда часть параметров запушить можно пораньше, оставшиеся непосредственно перед вызовом. Конечно, call никто не отменял, но invoke в 1 строчку смотрится читабельнее.





    Боже упаси :)





    Улучшает читабельность и устраняет неоднозначности.
     
  20. S_T_A_S_

    S_T_A_S_ New Member

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




    Встроенный макроязык fasm позволяет эмулировать не только синтаксисы этих ассемблеров, но и синтаксивы некоторых HLL :derisive: Имеется ввиду не IF\WHILE а отсутствие бесполезного invoke и т.п.