народ, что за нафиг. не могу на фасме сделать пустую DLL. если делаю хоть один вызов на АПИ, то всё ок иначе библа не хочет подгружаться. fasm 1.64
Давая я угадаю, ты в windows2000 сидишь? Это особенность системы такая, что в импортах должна быть хотя-бы одна длл.
млин... единственные винды, которые я переношу - 98. кстати, импорт я заполняю... фишка именно в самом вызове АПИ... если не вызвал, то не вашет, даже если импорт/экспорт инициализировал...
ааа, ну в 98 ты и не такое встретишь Имхо эта система написана настолько криво, что удивительно что она вобще работает.
ой... блин... ценитель нашелся... единственная ось, которая пашет, у мелкософта... нефиг гнать на винды, если ты не знаешь, почему библа не пашет... все нормально созданные библы, на других языках, пашут... возможно просто fasm не создает секцию импорта, если АПИ не вызываются ни разу... так скть, за ненадобностью... и нефиг топик перемещать... тож мне... раз 98, то не значит, что начинающий...
Да. Не из-за 98й (тут Asterix её любит например), а из-за вопроса. Сам бы мог глянуть на структуру PE в этой DLL - увидел бы, что нет записей в импорте. <font color="red]вернул на Win32</font><!--color-->
В последнее время вынужденно перешел на XP(sp2), т.к. под новое железо нет дров для win98 %) masm, в таком случае, секцию импорта тоже не создает, но это не мешает DLL грузиться сдается мне что проблема с релоками
запостил на форуме фасма, посмотрим ответ автора http://board.flatassembler.net/topic.php?p=33075#33075 очевидно что проблема в макросе создающем релоки
да, это баг, фасм их тоже не создает если в коде не используются абсолютные адреса, т.е. добавление mov eax,$ решает проблему, а импорт для dll в w2k не обязателен
IceStudent при тех же условиях у масм не возникает проблем должна быть директория релоков в любом случае, масм ее создает пустую но она есть у фасма ее нет, отсюда и баг
Видимо есть, загрузчик сообщает Message=Debug string: LDR: Fixups unsuccessfully re-applied @ 140000, где 0x00140000 это адрес по которому хотела винда загрузить dll (её imagebase 0x00400000 занят)
кста, bogrus, какую там АПИ лучше всего захучить чтоб Олли дебажные строки загрузчика показывал, т.е. когда винда будет проверять что показвать ей или нет чтоб подсунуть нужное во флагах
Сперва ntdll копирует NtGlobalFlag в свою переменную (в секции data), потом тупо сверяет каждый раз Код (Text): cmp byte[var],0 jnz DebugPrint Т.е. чтоб их ловить у меня в реестре для test.exe стоит NtGlobalFlag = 0x2, а в олли включен break на Debug string и когда надо я просто переименовываю любую прогу в test.exe и запускаю - тогда автоматом стартует олли и ловит все строки для этой проги
Хотя таки и не обязательно, если imagebase не занят, то винда загрузит такую dll даже с пустыми релоками (фасм их создает! но пустые, т.ч. может и не совсем баг)
нет, фасм не создает, он создает только секцию, но в хидере видимо директория не прописана а вот масм как раз создает секцию и прописывает в заголовок директорию достаточно попробовать просмотреть директорию релоков в PETools чтоб убедится
Релоки ведь не обязаны быть в отдельной секции?, в PE_header.OptionalHeader.Data_Directories.Relocation_Table фасм запись делает об их присутствии! (см. в PEexplorer, ставит RVA, но размер ставит 0) и это работает если imagebase не занят А если занят то dll грузится(мапится) по новому адресу, например 0x00140000 потом вызывается ntdll.RtlImageDirectoryEntryToData(релоки) и если размер не 0 (иначе ошибка) то вызов LdrProcessRelocationBlock для обработки первой записи (если её нет, то тоже ошибка) Масм пишет LINK : fatal error LNK1272: cannot merge '.reloc' with any section, т.е. для релоков создает отдельную секцию и записывает в неё одну запись, вот такая dll работает Код (Text): ;================================= format pe gui dll entry start include '%fasminc%\win32a.inc' ;================================= start: xor eax,eax inc eax ret 0x0c ;================================= data fixups dd 0,8 end data ;================================= Короче надо порытся в MSPECOFF.pdf как правильно быть с отдельной секцией и записью
Я в топе http://board.flatassembler.net/topic.php?p=33089#33089 попробовал обрисовать ситуацию (только чур над моим английским не смияцца!)