LINUX.ORG.RU

Сообщения le_cha_sever

 

Как определить собраны ли исполняемые файлы с реализацией технологии PIE или нет

Форум — Development

Дано — ОС FreeBSD 14.1-current amd64

В ports/Mk/bsd.serenity.mk есть строка  
WITH_PIE=	yes
Собираю порт sysutils/kdialog и сохраняю отдельно.

В файле  ports/Mk/bsd.serenity.mk в строку WITHOUT_PIE_PORTS=	добавляю sysutils/kdialog

Собираю заново и сравниваю с предыдущим вариантом — в папке stage все файлы одинаковы. Повторяю тоже самое для пакета math/kcalc. Тут тоже все файлы одинаковы, кроме файлов index.cache.bz2 в stage/usr/local/share/doc/HTML/<ca,de,en,…,uk>.

Вот и возник вопрос — так собираются ли файлы с реализацией технологии PIE или нет, если их значение не меняется от указания собирать с PIE или без.

Пошёл далее - такое же сделал с пакетом editors/vim — тут бинарные файлы отличаются друг от друга, более того для варианта, что собирался с поддержкой PIE технологии получаю  
$ readelf -a vim |grep PIE
0x000000006ffffffb FLAGS_1              PIE

Под Linux можно было бы радоваться, но под FreeBSD не всё так просто (если верить результатам гугления) — и я решил проверить ещё.

Сделал программу helloworld и собрал её с ключиком -fPIE и с ключом -fno-PIE. Результат просмотрел с помощью readelf — в обоих случаях флаг PIE не установлен, хотя дизассемлирование и просмотр кода явно показывает отличие в коде.

00000000002017b0 <main>:
  2017b0: 55                           	push	rbp
  2017b1: 48 89 e5                     	mov	rbp, rsp
  2017b4: 48 83 ec 10                  	sub	rsp, 0x10
  2017b8: 48 8d 7d f0                  	lea	rdi, [rbp - 0x10]
  2017bc: e8 1f 01 00 00               	call	0x2018e0 <time@plt>
  2017c1: bf 99 05 20 00               	mov	edi, 0x200599
  2017c6: e8 25 01 00 00               	call	0x2018f0 <puts@plt>
  2017cb: bf 99 05 20 00               	mov	edi, 0x200599

======

00000000002017b0 <main>:
  2017b0: 55                           	push	rbp
  2017b1: 48 89 e5                     	mov	rbp, rsp
  2017b4: 53                           	push	rbx
  2017b5: 48 83 ec 18                  	sub	rsp, 0x18
  2017b9: 48 8d 7d e8                  	lea	rdi, [rbp - 0x18]
  2017bd: e8 0e 01 00 00               	call	0x2018d0 <time@plt>
  2017c2: 48 8d 1d d0 ed ff ff         	lea	rbx, [rip - 0x1230]     # 0x200599 <.rodata+0x1>
  2017c9: 48 89 df                     	mov	rdi, rbx
Но может ли это отличие быть однозначно показывать на использование технологии PIE — не ясно.  

Пробовал разобраться с помощью пакета radare2 — но там тоже самое, что и с readelf, objdump и elfdump — сплошная неопределённость — не ясно собран бинарник с реализацией технологии PIE или нет

 , ,

le_cha_sever
()

RSS подписка на новые темы