Здраствуйте! у меня такая проблема: на фасме надо получить RVA ресурса в файле. Вот что есть на данный момент: Код (Text): xcall 0,CreateFileA,fName,GENERIC_READ+GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0x80,0,0 mov [SHandle],eax xcall 0,CreateFileMappingA,[SHandle],0,PAGE_READWRITE,0,0,0 mov [handle],eax xcall 0,CloseHandle,[SHandle] xcall 0,MapViewOfFile,[handle],FILE_MAP_ALL_ACCESS,0,0,0 mov [handle],eax ;--- поиск ресурса int 3 add eax,[eax+3ch] add eax,88h mov esi,[eax] add esi,[handle] mov eax,[esi+12] как я понимаю после add eax,88h eax должен указывать на структуру IMAGE_RESOURCE_DIRECTORY. Я хочу получить число ресурсов индентифицируемых по имени - mov eax,[esi+12]. И здесь отладчик пишет Access violation. PS на макрос xcall не обращайте внимания, он для ручного импорта api.
хм попробовал взять другой файл.. теперь программа не падает, но вместо количества ресурсов, идентифицируемых по имени возвращает ноль. Тоже и с ресурсами , идентифицируемыми по ID
add eax,[eax+3ch] ;; +lfanew add eax,88h ;; RSRC_RVA (need to check) mov esi,[eax] ;; esi=>RSRC add esi,[handle] ;; +ptr to file_begin mov eax,[esi+12] ;; Extract something ... 0) If you're worknig with FILE (or memory mapped file, the same) you have to calculate PhysicalOffset by RVA. It could be done by scanning through SECTION_DESCRIPTORS (if my RVA within SectionStartRVA,...+); 1) If you're analyzing LOADED EXE file (e.g. at the running time) you, indeed, just have to add IB.
Clerk спасибо. Да я впринципе разобрался уже,вычитал тут на сайте чтобы так не париться, надо мапить файл с параметром SEC_IMAGE