OberonCore https://forum.oberoncore.ru/ |
|
Перевод BlackBox под Linux https://forum.oberoncore.ru/viewtopic.php?f=34&t=1280 |
Страница 10 из 15 |
Автор: | Alexey Veselovsky [ Суббота, 04 Апрель, 2009 13:05 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
В линуксах программа поставляется либо в исходниках (с ридмишкой что нужно чтобы собрать, и как собственно собрать), либо в виде пакета, где прописаны зависимости. Как оно например запустистя, если в моем линухе просто напросто иксов нет и графика идет через фреймбуфер (а программулина собрана под иксы)? Больше свободы, меньше бинарной совместимости. |
Автор: | Ali [ Суббота, 04 Апрель, 2009 14:02 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
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) |
Автор: | Сергей Оборотов [ Суббота, 04 Апрель, 2009 15:19 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Ali писал(а): Если сделать симлинки, то ... найдет. Спасибо, так и сделаем.
|
Автор: | Ali [ Суббота, 04 Апрель, 2009 15:41 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
GUEST писал(а): ... найдет. Спасибо, так и сделаем. Там ещё libglib-2.0.so. Вы писали: "Дело как раз в упомянутом флаге PROT_EXEC" Можно подробней. |
Автор: | Сергей Оборотов [ Суббота, 04 Апрель, 2009 15:59 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Ali писал(а): GUEST писал(а): ... найдет. Спасибо, так и сделаем. Там ещё libglib-2.0.so. Вы писали: "Дело как раз в упомянутом флаге PROT_EXEC" Можно подробней. |
Автор: | Борис Рюмшин [ Суббота, 04 Апрель, 2009 17:37 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Спасибо за наводки. Я просто тыкнул - не работает, дальше не разбирался, времени не было. Чуть позже вернусь к вопросу. |
Автор: | Димыч [ Понедельник, 06 Апрель, 2009 13:16 ] |
Заголовок сообщения: | Re: Программа Hello world на GTK и ББ |
GUEST писал(а): BX (EBX точнее) это регистр в который линкер записывает адрес списка собранных модулей. Небольшая стартовая процедура это делает. Командная строка в Linux обрабатывается при обработке запуска на исполнение. Параметры argc и argv передаются по Си-соглашению через стек, обратиться к которому можно через baseStack в модуле KERNEL. Ткните носом в man, пожалуйста. Есть немаленькое подозрение, что данные в стеке идут не в том порядке, в каком они ожидаются в ББ. |
Автор: | Димыч [ Понедельник, 06 Апрель, 2009 13:17 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
GUEST писал(а): Ali писал(а): GUEST писал(а): ... найдет. Спасибо, так и сделаем. Там ещё libglib-2.0.so. Вы писали: "Дело как раз в упомянутом флаге PROT_EXEC" Можно подробней. В следующей сборке включу этот флаг. На моей системе это не проявляется. |
Автор: | Димыч [ Понедельник, 06 Апрель, 2009 13:18 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Скажите, а на 64-битной версии запускается? У меня нет ни железа на 64 бита, ни виртуалок. |
Автор: | Сергей Оборотов [ Понедельник, 06 Апрель, 2009 13:27 ] |
Заголовок сообщения: | Re: Программа Hello world на GTK и ББ |
Димыч писал(а): Ткните носом в man, пожалуйста. Собственно, это стандартное поведение. Эти данные ББ вообще не обрабатывает, насколько мне известно - поэтому что Вы имели в виду говоря, что их ждут непонятно.Есть немаленькое подозрение, что данные в стеке идут не в том порядке, в каком они ожидаются в ББ. Димыч писал(а): В следующей сборке включу этот флаг. Насколько я понимаю, он необходим, если не включать все модули в одну библиотеку и притом не на всех системах. Поэтому можете просто включать все модули одним файлом libBB.soДимыч писал(а): Скажите, а на 64-битной версии запускается? Да, после установки требуемых 32-битных библиотек.
|
Автор: | Димыч [ Понедельник, 06 Апрель, 2009 13:47 ] |
Заголовок сообщения: | Re: Программа Hello world на GTK и ББ |
GUEST писал(а): Димыч писал(а): Ткните носом в man, пожалуйста. Собственно, это стандартное поведение. Эти данные ББ вообще не обрабатывает, насколько мне известно - поэтому что Вы имели в виду говоря, что их ждут непонятно.Есть немаленькое подозрение, что данные в стеке идут не в том порядке, в каком они ожидаются в ББ. Под словом "ожидается" я имел ввиду то, что "данные в стеке размещены в известном порядке и в этом же порядке переводятся в переменные модуля Kernel". Мне этот порядок пока неизвестен. GUEST писал(а): Димыч писал(а): В следующей сборке включу этот флаг. Насколько я понимаю, он необходим, если не включать все модули в одну библиотеку и притом не на всех системах. Поэтому можете просто включать все модули одним файлом libBB.soТогда теряется всякий смысл в модульности Я уж лучше включу просто этот флаг в код. |
Автор: | Ali [ Понедельник, 06 Апрель, 2009 15:09 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Димыч писал(а): Я уж лучше включу просто этот флаг в код. если Код: $ 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 не очень удобно. |
Автор: | Сергей Оборотов [ Понедельник, 06 Апрель, 2009 15:18 ] |
Заголовок сообщения: | Re: Программа Hello world на GTK и ББ |
Димыч писал(а): Под словом "ожидается" я имел ввиду то, что "данные в стеке размещены в известном порядке и в этом же порядке переводятся в переменные модуля Kernel". Мне этот порядок пока неизвестен. Если хотите чтобы автоматом переводилось надо линкер дописывать. В том месте где стартовая процедура прописывается добавить пересылку в заранее известные переменные. Проще по baseStack обратиться, наверное.
|
Автор: | Сергей Оборотов [ Понедельник, 06 Апрель, 2009 15:32 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Ali писал(а): Переключать дефолтную настройку BIOS не очень удобно. Не надо переключать, просто соберите всю библиотеку и заработает.
|
Автор: | XomA [ Понедельник, 06 Апрель, 2009 16:06 ] |
Заголовок сообщения: | Re: Программа Hello world на GTK и ББ |
Димыч писал(а): 1) Не производится инициализация структуры Kernel.bootInfo или я неправильно понимаю, откуда брать argc и argv. Обращение к Kernel.bootInfo.arg(c|v) гарантированно ведет к трапу. Поэтому вызов gtk_init производится в виде gtk_init(0, 0); Что не есть правильно. Поделитесь, кто может, информацией о старте приложения в Linux, откуда берется командная строка? Что-то про регистр BX в исходниках ББ сказано, но, это все вилами по воде писано. А может в модкле Kernel создать экспортируемую процедуру SetArgs и вызывать её из функции main в BlackBox.c? при этом собирать его с ключём -lBB? то есть использовать динамическое связывание, вместо динамической загрузки |
Автор: | Сергей Оборотов [ Понедельник, 06 Апрель, 2009 17:57 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Тогда уж main экспортировать. |
Автор: | XomA [ Понедельник, 06 Апрель, 2009 23:53 ] | ||
Заголовок сообщения: | Re: Программа Hello world на GTK и ББ | ||
XomA писал(а): ... я тут понаписал... А всё проще нужно прочитать /proc/self/cmdline и сэмулировать argc и argv, так как я сделал в приложенном файле... у меня работает...
|
Автор: | Сергей Оборотов [ Вторник, 07 Апрель, 2009 06:19 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
XomA, а чем Вас не устраивает прямое обращение к параметрам, передаваемым через стек? Если они передаются - значит это кому-нибудь нужно. |
Автор: | Димыч [ Вторник, 07 Апрель, 2009 16:09 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
GUEST писал(а): XomA, а чем Вас не устраивает прямое обращение к параметрам, передаваемым через стек? Если они передаются - значит это кому-нибудь нужно. Провел я маленькое исследование. При загрузке исполнимого модуля в Linux первые ТРИ параметра в стеке - окружение программы. Первый - argc, Второй - argv[] Третий - env[] После старта ebp содержит указатель на дно стека. Начиная от него олавливаем argc, argv, env. Все ничего, но это верно для стека приложения, а не для стека библиотеки. Сейчас загрузка ББ реализована через библиотеку, поэтому ebp явно изменяется. Во всяком случае, без опыта работы на ассемблере в Linux мне не удалось до него дотянуться. Еще одно важное замечание. Командная строка в Windows получается с помощью функции API GetCommandLine и затем используется в HostFiles. Здесь, скорее всего, надо поступить также. Вот только я не знаю, будет ли корректным использовать /proc/self/cmdline, или же есть какой-то другой способ получить командную строку вызвавшего приложения. (будет ли это работать во FreeBSD?) |
Автор: | Alexey Veselovsky [ Вторник, 07 Апрель, 2009 16:43 ] |
Заголовок сообщения: | Re: Перевод BlackBox под Linux |
Цитата: 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 |
Страница 10 из 15 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |