Приветствую. Есть ли возможность писать код по адресу в заданном участке кода? Допустим я хочу через макрос 'code' по метке 'front' в конце кода написать {db 'text',0}. С условием что макрос может быть вызван до указанной метки. Код (ASM): macro code { ;... } ; Вызываем тут... code nop nop nop front: ; Появляется тут... ; db 'text', 0 В документации нашел вот такой пример: Код (ASM): virtual at 0 xor ebx, ebx xor eax, eax load code dword from 0 end virtual ; В этом месте будут объявлены инструкции dd code Он дал возможность объявлять инструкций и значений данных. По сути уже половина моего решения. Но я так и не разобрался в размере этого кода. Как его можно задавать под определенный размер? Что если код например будет в размере 3 байт? И как его потом объявлять? Код (ASM): virtual at 0 db 0, 0, 0 load code ??? from 0 ; Вот не знаю теперь как тут выставлять размер... end virtual code Еще конечно еще константа equ или define, но она не удобна когда допустим нужно ее использовать до её объявления. В отличии от константы через оператор '=', но в ней можно объявить только числовое значение. Код (ASM): x equ mov eax, dword[ecx+edx*5] define x mov eax, dword[ecx+edx*5] ; Нельзя так, но хотелось бы аналог ; x = mov eax, dword[ecx+edx*5]
Ты не тем способом это пытаешься сделать. Код (ASM): datalist equ macro datalist_add l,d { match any,datalist \{ datalist equ datalist,l,d \} match ,datalist \{ datalist equ l,d \} } macro datalist_store [l,d] { forward l db d,0 } datalist_add anytext1,'anytext1' datalist_add anytext2,'anytext2' ;... match datalist,datalist { datalist_store datalist } Тебе надо просто таскать пару лейбл-значение до нужного места, а не сами байты. При желании можно и нуль-терминатор таскать, если усложнить немного. ЗЫ: а можешь тупо добавить новый макрос в список, а со списка в конце эти макросы вываливать.