новости с /proc/kallsyms

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

новости с /proc/kallsyms

Непрочитанное сообщение Olej » 21 июн 2015, 20:48

Все знают, и во всех статьях и учебниках написано, что /proc/kallsyms - это таблица символов ядра.
Здесь содержатся все имена ядра, самое главное - все API. И их адреса размещения.
(это так написано везде в учебниках)

Ковыряюсь я с вот таким проектом: Implementing a Distributed Firewall.
На виртуальной машине в VirtualBox, чтоб не разрушить основную инсталляцию, вот система:

Код: Выделить всё

olej@ubuntu:~/Загрузки$ uname -a
Linux ubuntu 3.2.0-25-generic-pae #40-Ubuntu SMP Wed May 23 22:11:24 UTC 2012 i686 i686 i386 GNU/Linux

olej@ubuntu:~/Загрузки$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:29:e5:a9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.105/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::a00:27ff:fe29:e5a9/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:29:8d:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global eth1
    inet6 fe80::a00:27ff:fe29:8d45/64 scope link
       valid_lft forever preferred_lft forever
И проверяю, для начала, свои старые наработки, примеры модулей ядра ... с 2010г. по 2014г.

Код: Выделить всё

olej@ubuntu:/proc$ whoami
olej
olej@ubuntu:/proc$ cat /proc/kallsyms | grep sys_write
00000000 T sys_write
00000000 T sys_writev
00000000 t proc_sys_write
И вот тут я офиговел! :-o :shock:
Символы (имена) есть, а адресов их - нет!

Хватило сообразительности ... обманув Ubuntu ;-) :

Код: Выделить всё

olej@ubuntu:~$ sudo sh
[sudo] password for olej:
# whoami
root
# mc
root@ubuntu:/proc# cat /proc/kallsyms | grep sys_write
c1144d20 T sys_write
c11453d0 T sys_writev
c119bbc0 t proc_sys_write
Как только я стал root - адреса появились!

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: новости с /proc/kallsyms

Непрочитанное сообщение Olej » 21 июн 2015, 20:54

Olej писал(а):На виртуальной машине в VirtualBox,
Грешил на VM (но если бы такое было - я бы заметил давно ;-) )...

Проверяю на реальной (hardware) инсталляции Mint 17.1:

Код: Выделить всё

olej@nvidia /proc $ lsb_release -ircd
Distributor ID:	LinuxMint
Description:	Linux Mint 17.1 Rebecca
Release:	17.1
Codename:	rebecca
olej@nvidia /proc $ uname -a
Linux nvidia 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 i686 i686 GNU/Linux

Код: Выделить всё

olej@nvidia /proc $ whoami
olej
olej@nvidia /proc $ cat /proc/kallsyms | grep sys_write
00000000 T sys_write
00000000 T sys_writev
00000000 t proc_sys_write
Тем же концом по тому же месту!
Не знаю (не отследил пока) с какого ядра начались такие эффекты.

Это тянет весьма далеко идущие последствия...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: новости с /proc/kallsyms

Непрочитанное сообщение Olej » 21 июн 2015, 21:35

Olej писал(а):Проверяю на реальной (hardware) инсталляции Mint 17.1:
...
Это тянет весьма далеко идущие последствия...
Для полноты картины, для страховки ... проверяю ещё на одной hardware инсталляции:

Код: Выделить всё

bash-4.2$ lsb_release -ircd
Distributor ID:	Fedora
Description:	Fedora release 20 (Heisenbug)
Release:	20
Codename:	Heisenbug
bash-4.2$ uname -a
Linux notebook.localdomain 3.19.3-100.fc20.i686 #1 SMP Fri Mar 27 17:30:08 UTC 2015 i686 i686 i386 GNU/Linux
И здесь большая неожиданность :-o :

Код: Выделить всё

bash-4.2$ whoami
Olej
bash-4.2$ cat /proc/kallsyms | grep sys_write
c0586050 T sys_write
c0586770 T sys_writev
c05e2f10 t proc_sys_write
Может это такая задрочка только в Ubuntu/Mint? ... от них можно всего ожидать. ;-)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: новости с /proc/kallsyms

Непрочитанное сообщение Olej » 23 июн 2015, 17:51

Olej писал(а):Как только я стал root - адреса появились!

Код: Выделить всё

olej@ubuntu:~/Рабочий стол$ lsb_release -ircd
Distributor ID:	Ubuntu
Description:	Ubuntu 12.04 LTS
Release:	12.04
Codename:	precise
Смешно ... ;-)

Код: Выделить всё

olej@ubuntu:~/Рабочий стол$ sudo cat /proc/kallsyms | grep sys_connect
c149a0a0 T sys_connect

Код: Выделить всё

olej@ubuntu:~/Рабочий стол$ cat /proc/kallsyms | grep sys_connect
00000000 T sys_connect
2 подряд выполненные команды... :-o

Зачем?
Такое в коде (ядра, модуля) можно было бы учудить ... но не так просто.
Но зачем? Чего они этим добиваются?
И как они этого добиваются? ... в своих Ubuntu, Mint, etc. Патчат специально под эти цели ядро и пересобирают?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: новости с /proc/kallsyms

Непрочитанное сообщение Olej » 24 июн 2015, 16:08

Подсказали:

Что бы команда:

Код: Выделить всё

cat /proc/kallsyms | grep sys_connect
показывала не нули, а адрес, необходимо сначала выполнить эту команду

Код: Выделить всё

sudo sh -c "echo 0  > /proc/sys/kernel/kptr_restrict"
После этого у меня адрес начал отображаться без root привилегий.
Я не проверял.

Ответить

Вернуться в «Linux изнутри»

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

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