Как в FASM написать это: Code (Text): DataDirectory IMAGE_DATA_DIRECTORY 16 dup(<>) И как потом обращаться к, скажем, третьему элементу.
старыми макросами было так: DataDirectory rb sizeof.IMAGE_DATA_DIRECTORY * 16 обратиться к третьему элементу: mov esi,DataDirectory add esi,sizeof.IMAGE_DATA_DIRECTORY*3 далее через virtual к членам IMAGE_DATA_DIRECTORY. Сейчас в фасме есть и dup, и структуры описываются по-другому, поэтому пусть другие скажут.
IceStudent Что-то у меня dup не получется использовать. Но получается что-то вроде DataDirectory IMAGE_DATA DIRECTORY <16> Не знаю только вот что это в фасме означает.
я подумываю кстати написать конвертр инков из масма в фасм а то тоже бесит все руками. или может кто уже сделал? ежели так то свисните. я кстати написал грабер импортов для фасма те натравливаеш его на дллку и он делает инк. по такому типу 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 эта процедурка грузит либу и находит аддр для этой апи и передает вызов те либа грузится когда она нужна. если кому такая тулза нужна могу кинуть.
doctor_Ice Тоже такое делал, но не по такому принципу. У меня еще делилось на apia и apiw. Если писать Code (Text): DataDirectory rb sizeof.IMAGE_DATA_DIRECTORY * 16 или Code (Text): DataDirectory db IMAGE_NUMBEROF_DIRECTORY_ENTRIES*sizeof.IMAGE_DATA_DIRECTORY dup (?) то к VirtualAddress нельзя будет обрариться по естественным причинам - инициализируется цепочка байтов, а не структура. Ничего более разумного чем Code (Text): DataDirectory IMAGE_DATA_DIRECTORY rb sizeof.IMAGE_DATA_DIRECTORY*15 не нашел.
я обращаюсь так mov ebx, d_w_p [ebx+IMAGE_NT_HEADERS.OptionalHeader+IMAGE_OPTIONAL_HEADER32.DataDirec tory+IMAGE_DATA_DIRECTORY.VirtualAddress]
Code (Text): struc WSADATA { .wVersion dw 0 .wHighVersion dw 0 .szDescription : times 257 db 0 .szSystemStatus : times 129 db 0 .iMaxSockets dw 0 .iMaxUdpDg dw 0 .lpVendorInfo dd 0 };WSADATA ;ends wsd WSADATA ; определение "переменной" типа структура WSADATA mov eax,[wsd.lpVendorInfo]
Что-то мне кажется, что если бы фасм целиком перенял бы какой-то один синтаксис (TASM/MASM/NASM), было б лучше, нежели мешанина из синтаксисов + отсебятина (pure imho). P.S. Если к 10кг повидла добавить 1кг говна, получится 11кг говна.
мне ОЧЕНЬ нравится синтаксис фасм. и, следуя пс _ВС_, считаю его повидлом, поэтому не будем к нему чего-либо добавлять. ну, а если нравится - то какие проблемы? можно ими непосредственно и пользоваться
_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
А теперь еще masm.inc добавился 8-) option prologue, option epilogue, и процедуры так можно объявлять: Code (Text): WndProc [b]proc[/b] hwnd:dword,umsg:dword,wparam:dword,lparam:dword [b]local ps:PAINTSTRUCT local hDC:DWORD local FileNameBuffer[MAX_PATH]:byte[/b] ... invoke BeginPaint,[hwnd],[b]addr[/b] ps ... [b]ret[/b] WndProc [b]endp[/b] Очень мне нравится win32axp.inc - с количеством параметров функции не ошибешься. и еще много чего. От FASM к MASM все же не сложно перейти. Разве что смущает отсутствие offset и частое присутствие квадратных скобок.
bogrus Сильно же он стремится, что поддержка dup только недавно появилась. А чем его авторам директива assume не угодила? для фасма это нормальная строка кода mov dword[variable], not (0x8888 shl 16 and 0x0f0f0f0f or 0x30303030) + 0x8888 mod 16 Для TASM'а в режиме Ideal тоже. Тасм кстати даже поддерживает столь модные щас HLL-макросы. Интересно, какой <censored> начал первым усиленно пользовать эти поганые .IF, .WHILE и тд, отделять блоки пробелами как в паскале и ввел моду на всяческие IDE. Блевать тянет, глядя на эти заскорузлые макросы и прыгающую табуляцию. Утешает лишь то, что в исходниках, оформленных подобным образом, смотреть как правило нечего.
На вкус и цвет.. Мне удобнее без него: иногда часть параметров запушить можно пораньше, оставшиеся непосредственно перед вызовом. Конечно, call никто не отменял, но invoke в 1 строчку смотрится читабельнее. Боже упаси Улучшает читабельность и устраняет неоднозначности.
_BC_ > Встроенный макроязык fasm позволяет эмулировать не только синтаксисы этих ассемблеров, но и синтаксивы некоторых HLL Имеется ввиду не IF\WHILE а отсутствие бесполезного invoke и т.п.