Вопрос № 95789: Установил MASM в FARE создал папку l11 в котором поместил программу набранную в Fare l11.asm набираю в командной строке
FARA : amake l11 результат : имя команды или файла указано не правильно ." Ассемблер это просто" я только выписал а...Вопрос № 95846: Здравствуйте!
В PE EXE в таблице импорта рядом с именами импортируемых функций имеются т.н. hints.
Так вот, откуда они берутся и где используются? Обязательно ли они должны отличаться друг от друга? Фиксированы ли они для каждой функции? Для ...
Вопрос № 95.789
Установил MASM в FARE создал папку l11 в котором поместил программу набранную в Fare l11.asm набираю в командной строке
FARA : amake l11 результат : имя команды или файла указано не правильно ." Ассемблер это просто" я только выписал а здесь воспользовался книгой Крупника А
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Юрченко Павел Александрович!
Описание утилиты MAKE.
Вам нужно создать makefile.mak или makefile и в нем указать правило — (строка исходного файла утилиты make.exe, показывающая требуемую связь файлов по временному принципу. Слово «требуемую» здесь подчеркивает тот факт, что «правила игры» определяет программист. Строка данного типа не должна начинаться с пробела.) и команды — (любые строки, допустимые к вводу в командной строке операционной системы. Строка с командой должна обязательно начинаться с пробела.) имя команды или файла указано не правильно - (Bad command or file name) это работа FARа, он не обнаружил утилиту MAKE в текущей папке.
Перейдите FARом в каталог с утилитой и запустите её. Если компилятор, утилита и Ваша программа находятся в разных папках то в makefile нужно указывать пути к ним.
Удачи!
--------- И только наступив на грабли мы приобретаем драгоценный опыт!
Здравствуйте!
В PE EXE в таблице импорта рядом с именами импортируемых функций имеются т.н. hints.
Так вот, откуда они берутся и где используются? Обязательно ли они должны отличаться друг от друга? Фиксированы ли они для каждой функции? Для чего их придумали? :)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Олег Владимирович!
При попытке связывания ( настройки адресов импортируемых функций в программе ) по имени, системный загрузчик использует вначале значение hint (укороченный идентификатор точки входа) и только при неудачной попытке его использования производит поиск требуемой точки входа по имени самой функции.
Т.е. в таблице экспорта библиотеки загрузчик проверяет запись соответствующую hint и если имена функций не совпали, производится поиск по имени, что дольше по времени. Вслучае успеха одного из поисков настраиваются конструкции типа:
CALL myFunction;(характерно для TASM)
...
myFunction: JMP DWORD PTR[FUNCTION];дописывается в конце секции кода
или
CALL DWORD PTR[FUNCTION];(для MASM)
...
.idata
FUNCTION DD XXXXXXXX
Создает их компоновщик на основе lib-файлов.
Если в очередном SP в библиотеку добавят новую или удалят старую функцию hint может изменится.
Удачи!
--------- И только наступив на грабли мы приобретаем драгоценный опыт!