The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Google представил Си-библиотеку для определения возможностей..., opennews (ok), 07-Фев-18, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


97. "Google представил Си-библиотеку для определения возможностей..."  +/
Сообщение от anomymous (?), 08-Фев-18, 21:50 
> Для всех архитектур?

А вот кстати да, была бы тема. Кусок машинного кода для множества архитектур который процессорозависимо джампает на нужную ветку внутри себя, соответственно знает тип процессора, и далее делает "диагностику" по возможностям такового.

Основная проблема написания подобной штуки - надо подобрать команды переходов так, чтобы они джампали на определённом проце, а все "чужие" команды переходов на других процах выполнялись, как какая-нибудь обратимая хрень.

Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

98. "Google представил Си-библиотеку для определения возможностей..."  +3 +/
Сообщение от anomymous (?), 08-Фев-18, 22:29 
Дабы понимать, о чём я, простой пример

18 7E - эта команда прыгает на 128 байт вперёд от самой команды на Z80 и совместимых.
EB 3E - эта команда прыгает на 64 байта вперёд от самой команды на x86 (в любом режиме, 16/32/64).

К сожалению, команда 18 7E на x86 превращается в опасную sbb byte ptr [si/esi/rsi+xx],bh, а поэтому нам надо записать её несколько иначе.

Итоговая запись такова:

2C 18 7E 40 EB 3E

Поток выполнения для Z80 будет:
2C - INC L, то есть для восстановления регистра нам будет достаточно сделать DEC L
18 7E - JR на 0x7E (126) байт вперёд от адреса следующей команды (то есть в итоге на 128 байт)

Поток выполнения для x86 будет:
2C 18 - SUB AL, 0x18, то есть для восстановления регистра нам достаточно будет ADD AL,0x18
7E 40 - JLE на 0x40 (64) байта вперёд от адреса следующей команды (то есть в итоге на 66 байт)
EB 3E - JMP на 0x3E (62 байта, в итоге на 64) вперёд, что является тем же самым адресом, что и в предыдущей команде), эту команду мы дописываем потому, что JLE зависит от результата вычитания, а нам надо прыгнуть железно

Что мы имеем в итоге:
На Z80 этот код прыгнет по адресу +129 байт от начала кода. На x86 этот код прыгнет по адресу +68 байт от начала кода. По этим адресам мы размещаем прочие детекторы для соответствующих CPU, и вуаля :)

Естественно, для 3-4 разных процессоров задача усложняется настолько, что без цели даже пытаться подобрать последовательность лениво - надо писать собственно подборщик вариантов.

Ответить | Правка | Наверх | Cообщить модератору

99. "Google представил Си-библиотеку для определения возможностей..."  +/
Сообщение от anomymous (?), 08-Фев-18, 22:33 
На том же x86 ещё придётся детектить режим исполнения, по стэку детектить актуальный call convention, детектить операционку, etc, etc. Но в целом всё реально.
Ответить | Правка | Наверх | Cообщить модератору

105. "Google представил Си-библиотеку для определения возможностей..."  +/
Сообщение от pavlinux (ok), 09-Фев-18, 03:54 
> Но в целом всё реально.

Нед.


Ответить | Правка | Наверх | Cообщить модератору

104. "Google представил Си-библиотеку для определения возможностей..."  +/
Сообщение от pavlinux (ok), 09-Фев-18, 03:52 
>> Для всех архитектур?
> А вот кстати да, была бы тема.

Была, лет 30 назад. Ищи код тут  http://www.ioccc.org/

Ответить | Правка | К родителю #97 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру