LINUX.ORG.RU
решено ФорумAdmin

если ли какой-то способ изменить выхлоп /proc/cpuinfo?

 , , , ,


0

1

в продолжении из

как зафорсить андроид использовать выборочные 32 битные soundfx либы или вообще переключить все либы на 32 bit? (комментарий)

есть некая закрытая блоб .so 32 битная либа

some_lib.so

исходников её, нет, они утеряны на всегда.

Есть неский софт который ей и использует.
Но если либа не загружена - софт работать не будет.

Есить ли какие-то способы вручную форсировано попробовать загрузить либу?

что-то вроде

 modphobe some_lib.so


у меня есть теория что либа будет грузиться только если в /proc/cpuinfo она увидит что «neon» поддерживается.

Везде где либы грузится из коробки -
на тв бокск tanix w2 - half thumb fastmult vfp edsp "neon" vfpv3 tls 

на телефоне lg g8 - half thumb fastmult vfp edsp "neon" vfpv3 tls

а вот на mi 11\12 - не работает, мне кажется потому что явного "neon" в списке нет - atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp



Eсли ли какой-то способ изменить выхлоп /proc/cpuinfo ?
Есить ли какие-то способы вручную форсировано попробовать загрузить либу?
Eсли ли какой-то способ дебага чтобы узнать почему либа не грузится и что ей надо?

сама либа лежит в

/vendor/lib/soundfx/libv4a_xhifi_ics.so

и грузится она кодом из конфига

проверить можно запустив с adb

dumpsys media.audio_flinger

самое интересное что другие 32 бит либы грузятся
а эта - нет(

почему там «Libraries NOT loaded: Library (null) - path: v4a_xhifi» - загадка
Libraries NOT loaded:
 Library (null)
  path: v4a_xhifi
..................................
Libraries loaded:
 Library v4a_fx
  path: /vendor/lib/soundfx/libv4a_fx.so
  ViPER4Android [2.5.0.4] / ViPER.WYF
    UUID: 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
    TYPE: ee48cf24-9221-4095-2cb9-40faa133111b
    apiVersion: 00020000
    flags: 0000F010


что интересно

там где работает там
uname -a
Linux ........armv8l GNU/Linux
и
Linux ..........armv8l Android


а там где не работаем там
Linux  aarch64 Toybox


armv8l - там где всё работает
а вот на aarch64 - уже нет

я читал про
aarch64_el0
aarch32_el0
aarch64_ilp32


и возможно начиная с snapdragon 888 - что-то сделали с поддержкой 32 битных режимов
но это опять же только теория
на snapdragon 855 всё работает
и на Amlogic S905W2 тоже

★★★★★

Последнее исправление: smilessss (всего исправлений: 7)

Eсли ли какой-то способ изменить выхлоп /proc/cpuinfo ?

oas1 ~ # cat /root/cpuinfo
model: ha-ha
oas1 ~ # grep 'model' /proc/cpuinfo | head -2
model           : 165
model name      : Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
oas1 ~ # mount --bind /root/cpuinfo /proc/cpuinfo
oas1 ~ # cat /proc/cpuinfo
model name: ha-ha

Есить ли какие-то способы вручную форсировано попробовать загрузить либу?

LD_PRELOAD ?

Eсли ли какой-то способ дебага чтобы узнать почему либа не грузится и что ей надо?

Навскидку - может strace, хотя именно либы я им не дебажил никогда.

Что из сказанного сработает в Android - хз, предлагаю проверить самому.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 3)

А ещё смущает твой modprobe somelib.so это модуль ядра? Или либа для юзерленд приложений?

В последнем случае я бы написал микропрогу, которая делает dlopen этой самой либы и дебажил ее в gdb

cobold ★★★★★
()

Не понял, как связано желание подгрузить библиотеку и подмена cpuinfo.

Про библиотеку это LD_PRELOAD переменная.

Про cpuinfo кто-то на лоре аналогичный вопрос задавал, можешь поискать тему (год-два-три назад).

Зачем тебе менять cpuinfo? Прога работать отказывается?

Учти, что cpuinfo вовсе не единствнный способ узнать какой у тебя проц, оно больше для скриптов и наглядности вообще. Более того, даже если прога специально ничего не узнаёт, она будет падать если попытается использовать фичи проца, которых у тебя нет - нужен их эмулятор.

Если же тебе именно надо подменить cpuinfo и ты уверен что это решит твои проблемы, то способа два:

1) пропатчить ядро чтобы оно выводило другие данные

2) сделать библиотеку, которая перехватывает open() и openat(), смотрит не идёт ли обращение к cpuinfo ну и дальше корректирует ответы от остальных функций (или просто подсовывает другой файл).

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

интересная идея с mount
это тип свой бинарь можно подсунуть с магиском
хммм

но если там «армовский аналог инструкции cpuid» то оно же всё по идее захардкррено в .so файл тогда этот трюк не поможет, но попробовать всё равно стоит

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

чесно я не знаю
сама либа лежит в

/vendor/lib/soundfx/libv4a_xhifi_ics.so

и грузится она кодом из конфига

проверить можно запустив с adb

dumpsys media.audio_flinger

самое интересное что другие 32 бит либы грузятся
а эта - нет(

почему там

Libraries NOT loaded:
 Library (null)
  path: v4a_xhifi


загадка


venus:/ $ dumpsys media.audio_flinger
Libraries NOT loaded:
 Library (null)
  path: v4a_xhifi
Libraries loaded:
 Library misoundfx
 Library v4a_fx
  path: /vendor/lib/soundfx/libv4a_fx.so
  ViPER4Android [2.5.0.4] / ViPER.WYF
    UUID: 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
    TYPE: ee48cf24-9221-4095-2cb9-40faa133111b
    apiVersion: 00020000
    flags: 0000F010
 Library jdsp
  path: /vendor/lib/soundfx/libjamesdsp.so
  JamesDSP v4.01 / James Fung
    UUID: f27317f4-c984-4de6-9a90-545759495bf2
    TYPE: f98765f4-c321-5de6-9a45-123459495ab2
    apiVersion: 00020000
    flags: 00000008
 Library v4a_re
  path: /vendor/lib/soundfx/libv4a_re.so
  ViPER4Android / viper.WYF, Martmists, Iscle
    UUID: 90380da3-8536-4744-a6a3-5731970e640f
    TYPE: ec7178ec-e5e1-4432-a3f4-4657e6795210
    apiVersion: 00020000
    flags: 00005010
XML effect configuration partially loaded, skipped 3 elements.
Clients:
  pid: 6509
Notification Clients:
   pid    uid  name
  1780   1000  android.uid.system
  2601   1000  android.uid.system
  2956   1001  android.uid.phone
  6214   1000  android.uid.system
  6509   1041  audioserver
  6747   1013  media
 10942  10266  org.telegram.messenger
 12327  10248  com.vipercn.viper4android.xhifi
Global session refs:
  session  cnt     pid    uid  name
      153    1    2601   1000  android.uid.system
[/сode]

smilessss ★★★★★
() автор топика
Последнее исправление: smilessss (всего исправлений: 8)
Ответ на: комментарий от firkax

я думаю что либа ищет neon инструкции и не находит их
вот и не грузится
хотя новые процы по идее поддерживают neon
но в proc/cpuinfo этого слова нет, похоже его заменили на другое
вот только либа это делалась по андроиды 2.3-4.4 и ничего об этом не знает

smilessss ★★★★★
() автор топика

не работает, мне кажется потому что явного «neon» в списке нет

через objdump (или подобным) посмотреть есть ли в библиотеке neon инструкции, если да, а на аппарате нет. То загружать библиотеку просто нет смысла, так как во время исполнения ядро вывалит на приложение целиком traps и всё упадёт с Illegal Instructions

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

LINUX-ORG-RU ★★★★★
()

modphobe some_lib.so

У вас боязнь модераторов?

у меня есть теория что либа будет грузиться только если в /proc/cpuinfo она увидит что «neon» поддерживается.

А доказательства этой теории какие-то имеюится?

ну допустим, подключись gdb к процессу и сделай dlopen.
Бинариники gdb, strace можешь отсюда взять:
https://github.com/mittorn/xash3d-prebuilts/tree/bd30180ab35b13d8a199eb0c08d1...
https://github.com/mittorn/xash3d-prebuilts/raw/bd30180ab35b13d8a199eb0c08d1f...
https://github.com/mittorn/xash3d-prebuilts/raw/bd30180ab35b13d8a199eb0c08d1f...
Это исполняемые файлы, а не либы.
В logcat возможно увидишь причину почему она не загрузилась, если не загрузится

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от smilessss

mount -o bind позволит заменить cpuinfo на любую ерунду, просто смонтируй текстовый файл поверх него. Так кстати работает магиск - он биндит файлы поверх read-only системы

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

что интересно

там где работает там
uname -a

Linux ........armv8l GNU/Linux
и
Linux ..........armv8l Android


а там где не работаем там
Linux  aarch64 Toybox


armv8l - там где всё работает
а вот на aarch64 - уже нет

вы писали про
aarch64_el0
aarch32_el0
aarch64_ilp32


возможно начиная с snapdragon 888 - что-то сделали с поддержкой 32 битных режимов
но это опять же только теория
на snapdragon 855 всё работает
и на Amlogic S905W2 тоже

smilessss ★★★★★
() автор топика
Последнее исправление: smilessss (всего исправлений: 4)
Ответ на: комментарий от mittorn

возможно
я пока не придумал ничего лучше чем покупать разные телефоны и тв приставки на андроде с выходом усб оптикой и коаксиалом чтобы использовать их в качестве смтримеров звука на цап

и просто брутфорсом пробовать где заработает
но это становится дороговато уже
да и способ глупый)

но как победить загрузку этой libv4a_xhifi_ics.so пока неясно, буду пробовать все советы из треда а там будет видно

smilessss ★★★★★
() автор топика
Последнее исправление: smilessss (всего исправлений: 1)
venus:/ $ dumpsys media.audio_flinger
Libraries NOT loaded:
Libraries loaded:
 Library v4a_fx
  path: /vendor/lib/soundfx/libv4a_fx.so
  ViPER4Android [2.5.0.4] / ViPER.WYF
    UUID: 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
    TYPE: ee48cf24-9221-4095-2cb9-40faa133111b
    apiVersion: 00020000
    flags: 0000F010
 Library v4a_xhifi
  path: /vendor/lib/soundfx/libv4a_xhifi_ics.so
  ViPER4Android XHiFi v2 / ViPER.WYF
    UUID: d92c3a90-3e26-11e2-a25f-0800200c9a66
    TYPE: aa48cf24-9ae1-4045-acb9-4fe1e156475b
    apiVersion: 00020000
    flags: 00000010
 Library jdsp
  path: /vendor/lib/soundfx/libjamesdsp.so
  JamesDSP v4.01 / James Fung
    UUID: f27317f4-c984-4de6-9a90-545759495bf2
    TYPE: f98765f4-c321-5de6-9a45-123459495ab2
    apiVersion: 00020000
    flags: 00000008
 Library v4a_re
  path: /vendor/lib/soundfx/libv4a_re.so
  ViPER4Android / viper.WYF, Martmists, Iscle
    UUID: 90380da3-8536-4744-a6a3-5731970e640f
    TYPE: ec7178ec-e5e1-4432-a3f4-4657e6795210
    apiVersion: 00020000
    flags: 00005010
XML effect configuration partially loaded, skipped 6 elements.
Clients:
  pid: 6221
Notification Clients:
   pid    uid  name
  1784   1000  android.uid.system
  2845   1001  android.uid.phone
  5399   1000  android.uid.system
  6221  10248  com.vipercn.viper4android.xhifi
  6362   1041  audioserver
  9506  10266  org.telegram.messenger
Global session refs:
  session  cnt     pid    uid  name
Hardware status: 0
Standby Time mSec: 3000



и вот чудо никаких пятен (с)
буквально чудо

оказалось эта штука хочется режим селинкуса персиссив только
и если его нет - оно не грузит этот модуль

прошил в магиске «selinux_permissive_v2.zip»
и чудесным образом появилось

 Library v4a_xhifi
  path: /vendor/lib/soundfx/libv4a_xhifi_ics.so
  ViPER4Android XHiFi v2 / ViPER.WYF
    UUID: d92c3a90-3e26-11e2-a25f-0800200c9a66
    TYPE: aa48cf24-9ae1-4045-acb9-4fe1e156475b
    apiVersion: 00020000
    flags: 00000010


хорошо что телефон неуспел продать

похоже что snapdragon 888 - буквально последний проц на котором это всё работает

на snapdragon gen1 и всё что новее - это уже не прокатит
там используются только 64 битные либы
и юзерспейс там только 64 битный
там способа загрузить 32 битную so либу я не нашёл
может скоро куплю телефон на gen4 попробую поковырять

всем спасибо!
Ваши советы и тулзы помогли!

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

ты товарищь определись для начала: у тебя 32битное приложение или 64битное, на какой системе запускаешь. может там нет нужных библиотек и всё зря. судя по постам, имеет место лютейшее непонимание того как вообще приложения запускаются и как следствие неправильные действия

ckotctvo
()
Ответ на: комментарий от mittorn

значит оно запустилось на aarch64
хотя либа точно 100% 32 битная
чудеса какие-то

и да выхлоп /proc/cpuinfo действительно непричём


venus:/ $ uname -a
Linux localhost 5.4.61-qgki-g570b68d #1 SMP PREEMPT Sat Mar 6 03:23:45 CST 2021 aarch64

processor	: 7
BogoMIPS	: 38.40
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x1
CPU part	: 0xd44
CPU revision	: 0

Hardware	: Venus based on Qualcomm Technologies, Inc SM8350



 Library v4a_xhifi
  path: /vendor/lib/soundfx/libv4a_xhifi_ics.so
  ViPER4Android XHiFi v2 / ViPER.WYF
    UUID: d92c3a90-3e26-11e2-a25f-0800200c9a66
    TYPE: aa48cf24-9ae1-4045-acb9-4fe1e156475b
    apiVersion: 00020000
    flags: 00000010
 Library jdsp

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