пробую получить адреса нужных функций в экспорте kernel32.dll Код (Text): mov esi,[ebp+kernel32_base] mov ebx,esi assume esi:IMAGE_DOS_HEADER add esi,[esi.e_lfanew] assume esi:IMAGE_NT_HEADERS lea esi,[esi.OptionalHeader] assume esi:IMAGE_OPTIONAL_HEADER mov esi,[esi.DataDirectoryExport] add esi,[ebp+kernel32_base] assume esi:IMAGE_EXPORT_DIRECTORY mov eax,[esi.AddressOfNames] add eax,ebx mov [ebp+NameTableVA],eax mov eax,[esi.AddressOfFunctions] add eax,ebx mov [ebp+AddressTableVA],eax mov eax,[esi.AddressOfNameOrdinals] add eax,ebx mov [ebp+OrdinalTableVA],eax mov esi,[ebp+NameTableVA] mov [ebp+Counter],0 ФАСМ ругается на "assume esi:IMAGE_OPTIONAL_HEADER" но ведь вроде все правильно? что не так? P.S. assume макрос с %fasminc%\macro\masm.inc можно использовать virtual, но с assume как-то проще, потму хочется разобраться.. помогите, пожалуйста
ну так IMAGE_OPTIONAL_HEADER это ведь и есть somestruct Код (Text): struct IMAGE_OPTIONAL_HEADER ; { Standard fields } Magic dw ? ; IMAGE_NT_OPTIONAL_HDR_MAGIC MajorLinkerVersion db ? MinorLinkerVersion db ? SizeOfCode dd ? SizeOfInitializedData dd ? SizeOfUninitializedData dd ? .................. ends
в ФАСМе все возможно O даже через двоеточие Код (Text): macro assume params { match reg:struct, params \{ match assumed, reg\#@assumed \\{ irp name, assumed \\\{ restore name \\\} \\} macro label . \\{ \\} struc db [val] \\{ \common def@assumed reg,.,db val \\} struc dw [val] \\{ \common def@assumed reg,.,dw val \\} struc dp [val] \\{ \common def@assumed reg,.,dp val \\} struc dd [val] \\{ \common def@assumed reg,.,dd val \\} struc dt [val] \\{ \common def@assumed reg,.,dt val \\} struc dq [val] \\{ \common def@assumed reg,.,dq val \\} struc rb cnt \\{ def@assumed reg,.,rb cnt \\} struc rw cnt \\{ def@assumed reg,.,rw cnt \\} struc rp cnt \\{ def@assumed reg,.,rp cnt \\} struc rd cnt \\{ def@assumed reg,.,rd cnt \\} struc rt cnt \\{ def@assumed reg,.,rt cnt \\} struc rq cnt \\{ def@assumed reg,.,rq cnt \\} reg#@assumed equ virtual at reg reg struct end virtual purge label restruc db,dw,dp,dd,dt,dq restruc rb,rw,rp,rd,rt,rq \} } macro def@assumed reg,name,def { match vars, reg#@assumed \{ reg#@assumed equ reg#@assumed, \} reg#@assumed equ reg#@assumed name local ..label name equ ..label ..label def } struc none { label . }