file
5.36 ясно говорит
file
5.36 на самом деле ясно печатает, является ли исполняемый файл PIE или нет. Например, исполняемый файл PIE отображается как:
main.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, not stripped
и не -PIE как:
main.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
Эта функция была представлена в версии 5.33, но выполняла лишь простую chmod +x
проверку. До этого он просто печатал shared object
для PIE.
В версии 5.34 предполагалось начать проверку более специализированных DF_1_PIE
метаданных ELF, но из-за ошибки в реализации она на самом деле нарушила работу и показала исполняемые файлы GCC PIE как shared objects
.
Я интерпретировал file
исходный код, включая ошибку,и какие именно байты формата ELF он проверяет в мучительных подробностях в:https://stackoverflow.com/questions/34519521/why-does-gcc-create-a-shared-object-instead-of-an-executable-binary-according-to/55704865#55704865
Краткий обзор поведения файла 5.36::
Elf32_Ehdr.e_type == ET_EXEC
executable
Elf32_Ehdr.e_type == ET_DYN
DT_FLAGS_1
запись динамического раздела присутствует DF_1_PIE
установлено вDT_FLAGS_1
:pie executable
shared object
pie executable
shared object
GDB запускает исполняемый файл дважды и видит ASLR
Одна очень простая вещь, которую вы можете сделать, это дважды запустить исполняемый файл через GDB и посмотреть, меняется ли адрес при выполнении из-за ASLR.
Я подробно объяснил, как это сделать, на:https://stackoverflow.com/questions/2463150/what-is-the-fpie-option-for-position-independent-executables-in-gcc-and-ld/51308031#51308031
Хотя это не обязательно самое практичное решение и невозможное, если вы не доверяете исполняемому файлу, это забавно и выполняет окончательную проверку, о которой мы действительно заботимся, а именно, если ядро Linux / динамический загрузчик изменит исполняемое местоположение или нет.
Следующее содержится в FAQ по WSL2:
As of right now WSL 2 does not include serial support, or USB device support. We are investigating the best way to add these features.
ОБНОВЛЕНИЕ 09.11.2021:Похоже обходной путь , позволяющий подключить USB-устройство к WSL 2.
Однако вы по-прежнему можете использовать WSL 1. Узнайте в Интернете, как преобразовать WSL2 в WSL1. Это довольно просто :просто напишите wsl --set-version YOUR_DISTR 1
. Например, wsl --set-version Ubuntu 1
. Эта команда преобразует WSL для дистрибутива Ubuntu в версию 1. Следующее, :Windows не использует физическое имя устройства (, как я понял ). Вот почему вы должны создать физическое имя для устройства в реестре Windows .
Computer\HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
и создайте там новое строковое значение. Имя — это имя физического устройства из шага 2. Порт — это COM-порт из шага 2.