LINUX.ORG.RU

Добавить фичу в /proc/cpuinfo для работоспособности эмуляции SSE4.2

 cpu feachures, , , sse4.2,


1

3

Суть такова, программа определяет что у меня мой Phenomчик не умеет в sse4.2 говорит про это и всё дальше не работает.
А мне надо чтобы она валилась на traps illegal instruction.

Чуть расширенная суть csgo обновилась до cs2 и теперь на моём Phenom2 X6 не работает.

Завёл issue

И там человек посоветовал попробовать модуль ядра opemu-linux для эмуляции недостающих инструкций и попутно он его подправил для сборки на свежих ядрах.
Им (удобно) я определил что валится игра на инструкциях: Типа

OPEMU:  pmaxud xmm0, xmm1
traps: cs2[blabla] trap invalid opcode
...
OPEMU:  pminud xmm0, xmm1
traps: cs2[blabla] trap invalid opcode

Как видно нужные инструкции в этом модуле не реализованы и я кое как добавил в ядромодуль эмуляцию этих инструкций, благо они простые, найти в двух 128 битных регистрах максимальные 32 битные значения и вернуть их, а теперь ксДва грит

Launcher Error: A CPU that supports the `SSE4.2` instruction set is required.

А мне надо чтобы именно что программа бы падала на invalid opcode/illegal instruction а для этого программе надо соврать что процессор умеет SSE4.2 =) Вроде можно было фичи процессора подменять не, ну в смысле без правки ядра? В голове усердно торчит мысль что можно, но как не вспомню, гуглить не получается, сырцы сейчас рыть лень просто хочется ответа, голёва болит, носъ пихтит, горьло как сарделька, болякаю ой нимагу, пожалейте, подскажити болезному боляке йуууууу.

Да знаю я что можно просто через objdump получить все инструкции и вычислить те что не хватает дело не в этом.

Ну /proc/cpuinfo это для примера, нужно чтобы программы не думали что нужные им фичи есть и их проверки обламывались.

★★★★★

Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)

а для этого программе надо соврать что процессор умеет SSE4.2

А откуда программа узнаёт, что процессор не подходит? Можно поискать в простыне strace, есть ли там open ... /proc/cpuinfo. И если есть, то первое что приходит в голову, написать маленький перехватчик для open (или openat), который в случае «/proc/cpuinfo» будет возвращать заранее подготовленный текст, и подгружать его через LD_PRELOAD. Дальше можно погуглить «open» «LD_PRELOAD».

gag ★★★★★
()
Ответ на: комментарий от gag

В программу я лезть не могу, VAC бан получу, подменять вызовы тоже боязно. Надо как-то прозрачно, при загрузке модуля ядра включать фейковую фичу и модуль её эмулирует, при его выгрузке выключать фичу.

По поводу как оно определяет сейчас рою, однозначно даже и не знаю, оно может ещё что-то читать, хуже если оно ко коду проца или его имени прерывает свою работу. Но даже если и так плевать на игру, у меня проц старенький и просто как задел на будущее для других программ может буду это модуль развивать (а может и нет, не знаю пока, у меня сейчас больше импульсивно спортивный интерес =) завтра может забью и забуду)

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от gag

Да оно действительно читает /proc но с добавленными фичами всё равно не пускает, попробую ещё поиграться, спасибо, не додумался что можно просто подменить файл.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

В программу я лезть не могу, VAC бан получу

VAC вродь покрывает только клиент, к серверу не имеет отношения, насколько мне не изменяет склероз.

Я бы сделал так как диды завещали: дизассемблировал бинарь, отловил где оно выдает ошибку, сделал бы трейсбэк и инструкциями поменял результат проверки наличия sse4.2.

Если боишься за свой основной стим аккаунт — создай новый и с ним запускай сервер.

iron ★★★★★
()

Я что-то не понял, оно сначала падало на sse4.2 инструкциях, а когда ты дописал их в эмулятор - падать перестало и начало писать что ему нужно sse4.2? То есть чтобы написать эту надпись ему потребовалась поддержка этого самого sse4.2?

firkax ★★★★★
()
Ответ на: комментарий от iron

Не, в работу непосредственно программы я не буду влезать в принципе, чисто настройка ОС для возможности запуска программы. С этой точки зрения нет разницы если бы я просто вставил в сокет нужный процессор с нужными инструкциями или я добавил исполнение инструкций на программном уроне. Или запустил вообще всё в виртуалке где весь процессор программный и реализует любой набор нужных инструкций. Ну да ладно.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от ratvier

Конкретно КС2 читает его и смотрит какой там вендор айди, частоты и прочее. Да и не сказал бы я что это только для скриптоты, это информационный интерфейс ядра, удобно представленный в файле и всё. В любом случае игра не только это проверяет. Изменение cpuinfo не даёт результата. И да верно, есть явные механизмы проверки наличия инструкций. Но так как на уровне ядра инструкции можно программно эмулировать, то жаль что нет механизма явно задать для всей ОС переопределение возможных фичей. Ну да ладна.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от firkax

Ага, я тоже кекнул с этого, но там не для вывода этой информации, а чуть раньше что-то сравнивается, причём кек лол2 там в два 128 битных регистра загружается два 32 битных значения и сравнивается =) не знаю может это действительно быстрее, но как по мне просто бесполезная оптимизация. Суть SIMD в пакетной обработке данных когда за один вжух сразу идёт обработка целой пачки значений. Ну это ладно, мои догадки.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от exception13

Хм, попробую её перекрыть. Спасибо. Хотя смысла навреное нет, так как информацию об этом конкретно кс2 читает из proc Что я там поменяю, что поменяю cpuid разницы не будет… :(

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)

Ладно чёнить придумаю. И на последок я всё же просто палочкой тыкаю на любительском уровне и если не лень то вопрос к

@t184256, @Siborgium, @mrjaggers что по вашему не так? Ну может ковырять этот заброшенный всеми модуль ядра (к слову слепленный вообще из другого проекта) не стоит и есть иной механизм? Пока гуглил про КС заметил что на виндах есть от интела фирменная «утилита» через которую вроде запускается уже другая программа пользоваетля и не поддерживаемые инструкции становятся доступны для этой программы, ну понятное дело что там тоже эмуляция, может и в линуксах подобное есть из коробки или почти? Яж мало чего знаю, не спец как вы =)

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Не, в работу непосредственно программы я не буду влезать в принципе

Так не обязательно редактировать бинарник. Достаточно дебпаггером отловить место в памяти где возникает ошибка при проверке и пропатчить программу в памяти. Помнится во времена cs 1.6 таким образом подгружали плагины к серверу cs.

iron ★★★★★
()
Ответ на: комментарий от Kron4ek

Ага, но я буду считать 100% успехом когда оно упадёт с

Failed to initalize Vulkan =) Короче цель проста, нужно чтобы падало с illegal instruction дабы потом могло падать с Vulkan error vkCreateDevice :D

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от iron

пропатчить программу в памяти.

Если бы я был Габеном, я бы за такое банил в случае мультиплеерной игры. Не, хочу чисто и невинно с нимбом над головой 😇 .

Была бы игра на одного игрока яб не церемонился, а мультиплеер это другое.

Но, я пока усталь :( На это всё надо много времени и сил, а у меня лапки

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

У тебя материнка M4A88TD-M/USB3? Чипсет 880G поддерживает процы FX.
ASUS выпускал обновления биоса для некоторых своих AM3, для поддержки процесоров AM3+.

Не все материнки AM3 попали в список счастливчиков, и теперь юзера бегают по интернету с попытками прикрутить ‘чужой’ биос. В случае удачи, приз - поддержка Bulldozer, а это уже sse4.2.

Но это так, лирика. :)

krasnh ★★★
()