OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 23 Сентябрь, 2019 18:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 297 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 15  След.
Автор Сообщение
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Суббота, 04 Апрель, 2009 13:05 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
В линуксах программа поставляется либо в исходниках (с ридмишкой что нужно чтобы собрать, и как собственно собрать), либо в виде пакета, где прописаны зависимости.

Как оно например запустистя, если в моем линухе просто напросто иксов нет и графика идет через фреймбуфер (а программулина собрана под иксы)?

Больше свободы, меньше бинарной совместимости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Суббота, 04 Апрель, 2009 14:02 

Зарегистрирован: Вторник, 05 Февраль, 2008 11:33
Сообщения: 23
GUEST писал(а):
Борис Рюмшин писал(а):
Подозреваю, что в этом самом 64 и есть проблема...
А 32-разрядную версию библиотеки если поставить что будет?


Код:
...
open("/usr/lib/libgtk-x11-2.0.so", O_RDONLY) = -1 ENOENT (No such file or directory)
.....
$ ls -la /usr/lib/libgtk-x11-2.0.so*
lrwxrwxrwx 1 root root      26 Мар 25 12:52 /usr/lib/libgtk-x11-2.0.so.0 -> libgtk-x11-2.0.so.0.1400.7
-rwxr-xr-x 1 root root 4087324 Фев 14 01:38 /usr/lib/libgtk-x11-2.0.so.0.1400.7

Если сделать симлинки, то
Код:
....
read(4, "\nMSK-3MSD,M3.5.0,M10.5.0/3\n"..., 4096) = 27
close(4)                                = 0
munmap(0xf7f70000, 4096)                = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7f70000
write(1, " \n"..., 2
)                   = 2
write(1, "****\n"..., 5****
)                = 5
write(1, "* BlackBox\n"..., 11* BlackBox
)         = 11
write(1, "* illegal memory read [ad = 00A28"..., 620* illegal memory read [ad = 00A2865A]
- GnomeGObjectStuff.$$  (pc=00000000, fp=FFF6DD60)
- Kernel.RegisterMod  (pc=000016A6, fp=FFF6DE8C)
- StdLoader.LoadMod  (pc=00001276, fp=FFF6DFA4)
- StdLoader.LoadMod  (pc=000011E0, fp=FFF6E0BC)
- StdLoader.Hook.ThisMod  (pc=00001355, fp=FFF6E0D0)
- Kernel.ThisMod  (pc=0000108C, fp=FFF6E1EC)
- Meta.Lookup  (pc=00000930, fp=FFF6E210)
- StdInterpreter.CallProc  (pc=000003E1, fp=FFF6E26C)
- StdInterpreter.Command  (pc=00000A61, fp=FFF6E304)
- StdInterpreter.CallHook.Call  (pc=00000B0F, fp=FFF6E4F4)
- Dialog.Call  (pc=00003644, fp=FFF6E51C)
- Init.$$  (pc=0000001D, fp=FFF6E540)
) = 620
write(1, "****\n"..., 5****
)                = 5
rt_sigprocmask(SIG_BLOCK, NULL, ~[KILL STOP RTMIN RT_1], 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, ~[KILL STOP RTMIN RT_1], 8) = 0
close(3)                                = 0
munmap(0xf7f71000, 4096)                = 0
exit_group(1)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Суббота, 04 Апрель, 2009 15:19 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
Ali писал(а):
Если сделать симлинки, то
... найдет. Спасибо, так и сделаем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Суббота, 04 Апрель, 2009 15:41 

Зарегистрирован: Вторник, 05 Февраль, 2008 11:33
Сообщения: 23
GUEST писал(а):
... найдет. Спасибо, так и сделаем.

Там ещё libglib-2.0.so.
Вы писали: "Дело как раз в упомянутом флаге PROT_EXEC"
Можно подробней.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Суббота, 04 Апрель, 2009 15:59 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
Ali писал(а):
GUEST писал(а):
... найдет. Спасибо, так и сделаем.

Там ещё libglib-2.0.so.
Вы писали: "Дело как раз в упомянутом флаге PROT_EXEC"
Можно подробней.
Еще раз спасибо. PROT_EXEC - это для возможности запускать загружаемый код флаг . Указывать при выделении памяти при загрузке в модуле KERNEL. AllocModMem процедура называется. Трассировку SoloHello ранее давал уже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Суббота, 04 Апрель, 2009 17:37 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4302
Откуда: Россия, Орёл
Спасибо за наводки. Я просто тыкнул - не работает, дальше не разбирался, времени не было. Чуть позже вернусь к вопросу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа Hello world на GTK и ББ
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 13:16 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
GUEST писал(а):
BX (EBX точнее) это регистр в который линкер записывает адрес списка собранных модулей. Небольшая стартовая процедура это делает. Командная строка в Linux обрабатывается при обработке запуска на исполнение. Параметры argc и argv передаются по Си-соглашению через стек, обратиться к которому можно через baseStack в модуле KERNEL.

Ткните носом в man, пожалуйста.
Есть немаленькое подозрение, что данные в стеке идут не в том порядке, в каком они ожидаются в ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 13:17 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
GUEST писал(а):
Ali писал(а):
GUEST писал(а):
... найдет. Спасибо, так и сделаем.

Там ещё libglib-2.0.so.
Вы писали: "Дело как раз в упомянутом флаге PROT_EXEC"
Можно подробней.
Еще раз спасибо. PROT_EXEC - это для возможности запускать загружаемый код флаг . Указывать при выделении памяти при загрузке в модуле KERNEL. AllocModMem процедура называется. Трассировку SoloHello ранее давал уже.

В следующей сборке включу этот флаг.
На моей системе это не проявляется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 13:18 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Скажите, а на 64-битной версии запускается?
У меня нет ни железа на 64 бита, ни виртуалок.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа Hello world на GTK и ББ
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 13:27 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
Димыч писал(а):
Ткните носом в man, пожалуйста.
Есть немаленькое подозрение, что данные в стеке идут не в том порядке, в каком они ожидаются в ББ.
Собственно, это стандартное поведение. Эти данные ББ вообще не обрабатывает, насколько мне известно - поэтому что Вы имели в виду говоря, что их ждут непонятно.
Димыч писал(а):
В следующей сборке включу этот флаг.
Насколько я понимаю, он необходим, если не включать все модули в одну библиотеку и притом не на всех системах. Поэтому можете просто включать все модули одним файлом libBB.so
Димыч писал(а):
Скажите, а на 64-битной версии запускается?
Да, после установки требуемых 32-битных библиотек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа Hello world на GTK и ББ
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 13:47 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
GUEST писал(а):
Димыч писал(а):
Ткните носом в man, пожалуйста.
Есть немаленькое подозрение, что данные в стеке идут не в том порядке, в каком они ожидаются в ББ.
Собственно, это стандартное поведение. Эти данные ББ вообще не обрабатывает, насколько мне известно - поэтому что Вы имели в виду говоря, что их ждут непонятно.

Под словом "ожидается" я имел ввиду то, что "данные в стеке размещены в известном порядке и в этом же порядке переводятся в переменные модуля Kernel". Мне этот порядок пока неизвестен.
GUEST писал(а):
Димыч писал(а):
В следующей сборке включу этот флаг.
Насколько я понимаю, он необходим, если не включать все модули в одну библиотеку и притом не на всех системах. Поэтому можете просто включать все модули одним файлом libBB.so

Тогда теряется всякий смысл в модульности :)
Я уж лучше включу просто этот флаг в код.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 15:09 

Зарегистрирован: Вторник, 05 Февраль, 2008 11:33
Сообщения: 23
Димыч писал(а):
Я уж лучше включу просто этот флаг в код.

если
Код:
$ uname -r
2.6.29.1-37.rc1.fc11.i686.PAE

И
Код:
$ dmesg | grep NX
NX (Execute Disable) protection: active

то
Код:
write(1, "* illegal memory read [ad = 00000"..., 620* illegal memory read [ad = 00000000]

иначе
Код:
****
* Hello World
* HELLO WORLD
****

Работает.
Переключать дефолтную настройку BIOS не очень удобно.


Последний раз редактировалось Ali Понедельник, 06 Апрель, 2009 15:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа Hello world на GTK и ББ
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 15:18 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
Димыч писал(а):
Под словом "ожидается" я имел ввиду то, что "данные в стеке размещены в известном порядке и в этом же порядке переводятся в переменные модуля Kernel". Мне этот порядок пока неизвестен.
Если хотите чтобы автоматом переводилось надо линкер дописывать. В том месте где стартовая процедура прописывается добавить пересылку в заранее известные переменные. Проще по baseStack обратиться, наверное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 15:32 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
Ali писал(а):
Переключать дефолтную настройку BIOS не очень удобно.
Не надо переключать, просто соберите всю библиотеку и заработает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа Hello world на GTK и ББ
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 16:06 

Зарегистрирован: Суббота, 27 Сентябрь, 2008 09:49
Сообщения: 7
Димыч писал(а):

1) Не производится инициализация структуры Kernel.bootInfo или я неправильно понимаю, откуда брать argc и argv. Обращение к Kernel.bootInfo.arg(c|v) гарантированно ведет к трапу.

Поэтому вызов gtk_init производится в виде gtk_init(0, 0);

Что не есть правильно.

Поделитесь, кто может, информацией о старте приложения в Linux, откуда берется командная строка? Что-то про регистр BX в исходниках ББ сказано, но, это все вилами по воде писано.


А может в модкле Kernel создать экспортируемую процедуру SetArgs и вызывать её из функции main в BlackBox.c? при этом собирать его с ключём -lBB? то есть использовать динамическое связывание, вместо динамической загрузки :?:


Последний раз редактировалось XomA Понедельник, 06 Апрель, 2009 18:38, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 17:57 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
Тогда уж main экспортировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа Hello world на GTK и ББ
СообщениеДобавлено: Понедельник, 06 Апрель, 2009 23:53 

Зарегистрирован: Суббота, 27 Сентябрь, 2008 09:49
Сообщения: 7
XomA писал(а):
...

я тут понаписал... :roll:
А всё проще нужно прочитать /proc/self/cmdline и сэмулировать argc и argv, так как я сделал в приложенном файле...
у меня работает... 8)


Вложения:
Kernel.odc [82.84 КБ]
Скачиваний: 489
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Вторник, 07 Апрель, 2009 06:19 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
XomA, а чем Вас не устраивает прямое обращение к параметрам, передаваемым через стек? Если они передаются - значит это кому-нибудь нужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Вторник, 07 Апрель, 2009 16:09 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
GUEST писал(а):
XomA, а чем Вас не устраивает прямое обращение к параметрам, передаваемым через стек? Если они передаются - значит это кому-нибудь нужно.

Провел я маленькое исследование.

При загрузке исполнимого модуля в Linux первые ТРИ параметра в стеке - окружение программы.
Первый - argc,
Второй - argv[]
Третий - env[]

После старта ebp содержит указатель на дно стека. Начиная от него олавливаем argc, argv, env.
Все ничего, но это верно для стека приложения, а не для стека библиотеки.
Сейчас загрузка ББ реализована через библиотеку, поэтому ebp явно изменяется.
Во всяком случае, без опыта работы на ассемблере в Linux мне не удалось до него дотянуться.

Еще одно важное замечание.

Командная строка в Windows получается с помощью функции API GetCommandLine и затем используется в HostFiles.
Здесь, скорее всего, надо поступить также.
Вот только я не знаю, будет ли корректным использовать /proc/self/cmdline, или же есть какой-то другой способ получить командную строку вызвавшего приложения. (будет ли это работать во FreeBSD?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод BlackBox под Linux
СообщениеДобавлено: Вторник, 07 Апрель, 2009 16:43 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Цитата:
There is not any general way to do this unix. Each OS has different ways to handle it and some are very hard. You mention Linux though. With Linux, the info is in the /proc filesystem. To get the command line for process id 9999, read the file "/proc/9999/cmdline".


http://www.unix.com/high-level-programm ... dline.html


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 297 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 15  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB