Проблема
Предположим, у меня есть программа на x86_64
ассемблере yasm
(см. ниже), которая в какой-то момент запрашивает ввод данных от пользователя через системную службу SYS_read
. Этот вывод обрабатывается далее в программе как номер байта. Пользователь может легко указать все числа, соответствующие печатным символам ASCII, то есть от 0x20
до 0x7f
(может быть, и больше). Но как обеспечить 0x90
например?
Возможное решение для нескольких персонажей
Я мог бы использовать следующую комбинацию, чтобы указать желаемое число:
<C-S-u> 0 0 9 0
Но это решение может быть утомительным, когда необходимо ввести много символов.
Фрагмент программы
Вот та часть программы, которая отвечает за чтение из STDIN.
readChar:
mov rax, SYS_read
mov rdi, STDIN
lea rsi, byte [rbp - 1]
mov rdx, 1
syscall
printf '\x90\x91' | ./my_program
. Попробуйте что-нибудь сprintf '\x90' | hexdump -C
, чтобы проверить, какие байты вы печатаете. - person Peter Cordes   schedule 21.03.2018strace
. См. нижнюю часть stackoverflow.com/tags/x86/info. - person Peter Cordes   schedule 21.03.2018^V
перед каждым байтом вставляемого файла) - person Peter Cordes   schedule 21.03.2018\n
в конце строки, иначе получится бесконечный цикл :) - person LRDPRDX   schedule 21.03.2018