Как передать 32-битные аргументы системным вызовам Linux на x86_64?

Вы можете отключить функцию search-scrollback , поместив это в свои .Xresources:

URxvt.perl-ext-common: "default, -searchable-scrollback"

Источник: urxvt manpage (под perl-ext в раздел Ресурсы )

1
07.02.2019, 14:59
1 ответ

Вы должны обнулить -их расширение, но для общего случая 32 -битных значений на x86 -64 нет необходимости думать об этом :сохранении значения в 32 Битовый регистр -приводит к нулевому -расширенному сохранению в соответствующем 64-битном -регистре (, т.е. , movl $4, %edxсохраняет 4 вrdx). 8 -и 16 -битовые значения должны быть явно нулевыми -расширенными(movzblили movzwlиз 8 -или 16 -битного регистра в 32 -битный регистр, неявно нулевым -расширение до 64 бит ).

На практике для указателей, отличных от -, реализация системного вызова в любом случае будет считывать только младшие n бит, поэтому вы не должны видеть никакой практической разницы, по крайней мере, для 32 -бит. значения. (. вызов SYS_readс мусором в старших 32 битах RDIне приводит к ошибке и учитывает только младшие 32 бита. )Я не проверял, что произойдет, если установить __X32_SYSCALL_BITбез очистки верхних 32 битов указателей.

2
27.01.2020, 23:30

Теги

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