Page 1 of 1
Универсальность библиотек
Posted: Tue Mar 31, 2009 11:19 pm
by Gluk
Итак. В общем, что.. Хорошо известно, что в Колибри мы пользуем в качестве библиотек объектные файлы формата MS COFF, экспортируя таблицу EXPORTS.
Как я понимаю, для вызова функции в сей таблице ищется нужное имя, а рядом лежит адрес, что есть способ вызвать сию функцию.
К чему это я.. Я хотел спросить, как использовать такую библиотеку в программировании под операционные системы семейства Windows на языке ассемблера FASM.
Даже если оно будет костелизировано..
Добавлю, что искал по инету как вообще применяются файлы в таком формате, но найденное как-то не соответствовало искомому (не исключаю и что я плохо искал).
Re: Универсальность библиотек
Posted: Wed Apr 01, 2009 8:18 am
by Mario
По моему пустая затея - под Win с большой долей вероятности существует любая библиотека которая может быть реализована в Колибри усилиями дефолтных программистов. Лучше уж ставить проблему наоборот - как использовать библиотеки других ОС в Колибри (есно соблюдая лицензию). Я бы например взялся за реализацию медиаплеера, если бы хватило знаний по библиотекам Линусовых плееров, но пока только мечта. (впрочем zSea тоже задумывалась еще 4 года назад)
Re: Универсальность библиотек
Posted: Wed Apr 01, 2009 4:18 pm
by Gluk
вполне возможно
но мне нужно все-таки знать как это можно сделать..
Re: Универсальность библиотек
Posted: Thu Apr 09, 2009 9:59 pm
by Gluk
нет идей?..
Пока вижу только такой вариант: загружаем файл в память, ищем адреса функций, и, собственно, вызываем. Адреса думаю найду (имена в хекс-редакторе увидел, адреса рядом наверное). Но это как-то не очень разумно. Или нормально?
Re: Универсальность библиотек
Posted: Thu Apr 09, 2009 10:09 pm
by Mario
Вообщето адреса в момент запуска корректируются системой. Так что имена не меняются, а вот адреса могу оказаться другие, в зависимости от адреса начиная с которого загружена функция. Скорее всего тебе придется после загрузки корректировать имеющиеся адреса. Я не знаю как в текущей ситуации это дело реализовано (код в ядре не разбирал), но предпологаю что изначально там просто хранится смещение от нулевого адреса, хотя могу ошибаться. Надо автора кода в ядре спросить, кстати кто это все изначально реализовал Serge или Daimond?
Re: Универсальность библиотек
Posted: Thu Apr 09, 2009 11:44 pm
by Serge
Проще сделать obj пригодный для статической линковки. Объявить все экспортируемые функции public, тогда для них будут записи в таблице символов COFF. Pixlib вообще на С и должна свободно ликоваться с Win.
Re: Универсальность библиотек
Posted: Fri Apr 10, 2009 12:02 am
by Gluk
Serge, а как это сделать? Ну или где прочитать?
Mario, неужели изменятся адреса относительно начала файла? это мне кажется странным..
Re: Универсальность библиотек
Posted: Fri Apr 10, 2009 12:46 am
by Serge
Gluk
Если на фасме то объяви экспортируемые функции public
Code: Select all
public _myfunc
_myfunc:
...
...
ret
Если на С то компилятор сделает всё сам.
Re: Универсальность библиотек
Posted: Fri Apr 10, 2009 9:01 am
by Mario
Gluk
Я имел ввиду что твоей программе придется скорректировать после загрузки адреса, чтобы каждый раз при обращении не вычислять адрес плюс смещение. Это если будет использоваться динамическая подгрузка, а не статическая линковка.
Re: Универсальность библиотек
Posted: Fri Apr 10, 2009 12:51 pm
by Gluk
спасибо вам большое)
дальше доразбираюсь..