Использование cu в WSL

file5.36 ясно говорит

file5.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 / динамический загрузчик изменит исполняемое местоположение или нет.

0
29.11.2019, 06:14
1 ответ

Следующее содержится в 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 .

  1. Узнайте физическое имя устройства. Для этого откройте Диспетчер устройств в Windows, перейдите в Порты (COM и LTP ), нажмите правую кнопку мыши на устройстве CP210x и левую кнопку мыши на Свойства .
  2. В этих свойствах выберите Подробности , а затем Имя объекта физического устройства для свойства. В текстовом поле значения вы увидите, как назван ваш CP210x.attachment_0
  3. Откройте редактор реестра , перейдите в Computer\HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMMи создайте там новое строковое значение. Имя — это имя физического устройства из шага 2. Порт — это COM-порт из шага 2.attachment_1
3
28.01.2020, 02:29

Теги

Похожие вопросы