я только не пойму одного. из-за не охоты отказаться от идиотских масмовских привычек и соответственно выбросить assume раздувать столько шума. что допустим тебе без assume выйдет если написать на ассемблере, а не на масме Код (Text): push 0 push edi push edi push 0 call [MessageBoxA]
забей на assume. это в ассемблере лишнее! а lea - Load Effective Address - типа mov reg32, address, но возможно написать так lea eax, [eax+eax*4] и это выполнится, а в eax будет число умноженное на 5 или так lea eax, [ebx+ecx*8+0xFFFFFFE0] ну тут все аналогично, но тут еще круче. mov eax, ecx/shl eax, 3/add eax, ebx/sub eax, 32. о как и все за одну команду. правда клево. а можно так lea eax, [edi+Name1] и в eax указатель на имя секции (и без всяких assume)
qwertyui, перечитай внимательно посты #16, #17, #19, потом определись чего ты хочешь от assume max7C4 поосторожнее с высказываниями, если что я первый начну вас забрасывать камнями). конечно, ето не по-дзенски, но оч полезная фича.
litrovithконкретно на фасме - лишнее. Код (Text): vitrual at reg end virtual и не надо никаких assume
хм... У меня та же проблема была с assume , я из структуры IMAGE_SECTION_HEADER убрал union ->assume заработал. Пытаюсь вывести имя секции вылазит пустой мессадж бокс. В отладчик text = NULL. Подскажите что делать? вот код Код (Text): format PE GUI 5.0 include '%fasminc%\win32ax.inc' include '%fasminc%\macro\masm.inc' section '.code' code writeable readable executable ;const IMAGE_NT_SIGNATURE equ 4550h IMAGE_DOS_SIGNATURE equ 5A4Dh ImageNTSize equ 78h SectionHeaderSize equ 40 ;structs struct IMAGE_SECTION_HEADER Name1 db 8 dup(0) VirtualAddress dd ? SizeOfRawData dd ? PointerToRawData dd ? PointerToRelocations dd ? PointerToLinenumbers dd ? NumberOfRelocations dw ? NumberOfLinenumbers dw ? Characteristics dd ? ends struct IMAGE_DOS_HEADER e_magic dw ? e_cblp dw ? e_cp dw ? e_crlc dw ? e_cparhdr dw ? e_minalloc dw ? e_maxalloc dw ? e_ss dw ? e_sp dw ? e_csum dw ? e_ip dw ? e_cs dw ? e_lfarlc dw ? e_ovno dw ? e_res dw 4 dup(0) e_oemid dw ? e_oeminfo dw ? e_res2 dw 10 dup(0) e_lfanew dd ? ends struct IMAGE_DATA_DIRECTORY VirtualAddress dd ? isize dd ? ends struct IMAGE_FILE_HEADER Machine dw ? NumberOfSections dw ? TimeDateStamp dd ? PointerToSymbolTable dd ? NumberOfSymbols dd ? SizeOfOptionalHeader dw ? Characteristics dw ? ends struct IMAGE_OPTIONAL_HEADER32 Magic dw ? MajorLinkerVersion db ? MinorLinkerVersion db ? SizeOfCode dd ? SizeOfInitializedData dd ? SizeOfUninitializedData dd ? AddressOfEntryPoint dd ? BaseOfCode dd ? BaseOfData dd ? ImageBase dd ? SectionAlignment dd ? FileAlignment dd ? MajorOperatingSystemVersion dw ? MinorOperatingSystemVersion dw ? MajorImageVersion dw ? MinorImageVersion dw ? MajorSubsystemVersion dw ? MinorSubsystemVersion dw ? Win32VersionValue dd ? SizeOfImage dd ? SizeOfHeaders dd ? CheckSum dd ? Subsystem dw ? DllCharacteristics dw ? SizeOfStackReserve dd ? SizeOfStackCommit dd ? SizeOfHeapReserve dd ? SizeOfHeapCommit dd ? LoaderFlags dd ? NumberOfRvaAndSizes dd ? ends struct IMAGE_NT_HEADERS Signature dd ? FileHeader IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32 ends ;var Name2 db 512 dup (0) hFile dd ? hMapping dd ? pMapping dd ? szYes db 'YES',0 szNo db 'no',0 szPath db 'd:\test.exe',0 ;esi счетчик ebx кол во секций entry $ invoke CreateFile,szPath,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 mov [hFile],eax invoke CreateFileMapping,[hFile],0,PAGE_READONLY,0,0,0 mov [hMapping],eax invoke MapViewOfFile,[hMapping],FILE_MAP_READ,0,0,0 mov [pMapping],eax mov edi,[pMapping] assume edi:IMAGE_DOS_HEADER cmp [edi.e_magic],IMAGE_DOS_SIGNATURE jnz _no add edi,[edi.e_lfanew] assume edi:IMAGE_NT_HEADERS cmp [edi.Signature],IMAGE_NT_SIGNATURE jz _ok _exit: invoke ExitProcess,0 _no: invoke MessageBox,0,szNo,0,0 jmp _exit _ok: mov ax,[edi.FileHeader.NumberOfSections];теперь ax содержит колво секций в файле movzx ebx,ax add edi,sizeof.IMAGE_OPTIONAL_HEADER32 assume edi:IMAGE_SECTION_HEADER;!!!!!!!!! invoke MessageBox,0,dword [edi.Name1],0,0 invoke MessageBox,0,szYes,0,0 jmp _exit section '.import' import readable writable library kernel32, 'kernel32.dll', \ user32, 'user32.dll' include '%fasminc%\API\kernel32.inc' include '%fasminc%\API\user32.inc'
MaxOn, sizeof.IMAGE_OPTIONAL_HEADER32 = 224 (0E0h), а не 96 (60h). Забыл про DataDirectory, помимо граблей, которые здесь qwertyui оставил ))) еще раз читаем что пишет нам мелкософт по етому поводу
ну епт точно... Исправил все только теперь text=7865742E ??? и программа падает при вызове мессадж бокса. Кстати DataDirectory rb sizeof.IMAGE_DATA_DIRECTORY * 16 правильно описан массив структур?
MaxOn, хм без матов сложно высказываться, но попытаюсь. Посмотрите в свой сорц: Name1 db 8 dup(0) = dword [edi.Name1]... Дальше продолжать? Если вы не понимаете разницы дело другое
И правильно пишет, потому что MessageBoxу в качестве данного параметра нуна задавать указатель на текст(имя секции) ............ бррррр не, я уже пьяный ( вобщем как сантехник(я) программисту: Код (Text): assume edi:IMAGE_SECTION_HEADER ;вот так lea edi, [edi.Name1] invoke MessageBox,0,edi,0,0