Итак. В общем, что.. Хорошо известно, что в Колибри мы пользуем в качестве библиотек объектные файлы формата MS COFF, экспортируя таблицу EXPORTS.
Как я понимаю, для вызова функции в сей таблице ищется нужное имя, а рядом лежит адрес, что есть способ вызвать сию функцию.
К чему это я.. Я хотел спросить, как использовать такую библиотеку в программировании под операционные системы семейства Windows на языке ассемблера FASM.
Даже если оно будет костелизировано..
Добавлю, что искал по инету как вообще применяются файлы в таком формате, но найденное как-то не соответствовало искомому (не исключаю и что я плохо искал).
Универсальность библиотек
По моему пустая затея - под Win с большой долей вероятности существует любая библиотека которая может быть реализована в Колибри усилиями дефолтных программистов. Лучше уж ставить проблему наоборот - как использовать библиотеки других ОС в Колибри (есно соблюдая лицензию). Я бы например взялся за реализацию медиаплеера, если бы хватило знаний по библиотекам Линусовых плееров, но пока только мечта. (впрочем zSea тоже задумывалась еще 4 года назад)
вполне возможно
но мне нужно все-таки знать как это можно сделать..
но мне нужно все-таки знать как это можно сделать..
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
нет идей?..
Пока вижу только такой вариант: загружаем файл в память, ищем адреса функций, и, собственно, вызываем. Адреса думаю найду (имена в хекс-редакторе увидел, адреса рядом наверное). Но это как-то не очень разумно. Или нормально?
Пока вижу только такой вариант: загружаем файл в память, ищем адреса функций, и, собственно, вызываем. Адреса думаю найду (имена в хекс-редакторе увидел, адреса рядом наверное). Но это как-то не очень разумно. Или нормально?
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Вообщето адреса в момент запуска корректируются системой. Так что имена не меняются, а вот адреса могу оказаться другие, в зависимости от адреса начиная с которого загружена функция. Скорее всего тебе придется после загрузки корректировать имеющиеся адреса. Я не знаю как в текущей ситуации это дело реализовано (код в ядре не разбирал), но предпологаю что изначально там просто хранится смещение от нулевого адреса, хотя могу ошибаться. Надо автора кода в ядре спросить, кстати кто это все изначально реализовал Serge или Daimond?
Проще сделать obj пригодный для статической линковки. Объявить все экспортируемые функции public, тогда для них будут записи в таблице символов COFF. Pixlib вообще на С и должна свободно ликоваться с Win.
Serge, а как это сделать? Ну или где прочитать?
Mario, неужели изменятся адреса относительно начала файла? это мне кажется странным..
Mario, неужели изменятся адреса относительно начала файла? это мне кажется странным..
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Gluk
Если на фасме то объяви экспортируемые функции public Если на С то компилятор сделает всё сам.
Если на фасме то объяви экспортируемые функции public
Code: Select all
public _myfunc
_myfunc:
...
...
ret
Gluk
Я имел ввиду что твоей программе придется скорректировать после загрузки адреса, чтобы каждый раз при обращении не вычислять адрес плюс смещение. Это если будет использоваться динамическая подгрузка, а не статическая линковка.
Я имел ввиду что твоей программе придется скорректировать после загрузки адреса, чтобы каждый раз при обращении не вычислять адрес плюс смещение. Это если будет использоваться динамическая подгрузка, а не статическая линковка.
спасибо вам большое)
дальше доразбираюсь..
дальше доразбираюсь..
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Who is online
Users browsing this forum: No registered users and 8 guests