Изменить строковый литерал в файле ELF x86 _64

Копирование моего старого ответа на вопрос:Специальные клавиши XF86MonBrightnessUp/XF86MonBrightnessDown не работают


Редактировать:Как указано ниже, для их работы на вашем компьютере должен быть установлен acpi:)

Редактировать 2:Этот код увеличивает/уменьшает значения яркости на 1, но некоторые модели будут иметь значения, исчисляемые тысячами, поэтому измените изменение соответствующим образом.

Это старый вопрос, но ответ может помочь другим. Я столкнулся с проблемой при новой установке i3wmна моем ноутбуке, где по какой-то причине мои ключи XF86MonBrightnessUp/Downне регистрировались (. Я проверил с помощьюxev). В итоге я создал acpiдействий и событий, которые соответствовали нажатым клавишам.

Ниже приведены действия/события, которые я определил в /etc/acpi/actionsи /etc/acpi/events, соответственно:

Действия

/etc/acpi/actions/bl -down.sh

#!/bin/sh

bl_device=/sys/class/backlight/acpi_video0/brightness
echo $(($(cat $bl_device)-1)) | sudo tee $bl_device

/etc/acpi/actions/bl -up.sh

#!/bin/sh

bl_device=/sys/class/backlight/acpi_video0/brightness
echo $(($(cat $bl_device)+1)) | sudo tee $bl_device

События

/etc/acpi/events/bl -вниз

event=video/brightnessdown BRTDN 00000087 00000000
action=/etc/acpi/actions/bl-down.sh

/etc/acpi/events/bl -вверх

event=video/brightnessup BRTUP 00000086 00000000
action=/etc/acpi/actions/bl-up.sh

Вы можете проверить коды событий acpi для увеличения/уменьшения яркости, используя acpi_listenв своем терминале, а затем нажав соответствующую комбинацию клавиш (, например, для меня это Fn + стрелка вниз для уменьшения яркости ).

Наконец,не забудьте перезапустить acpidс помощьюsudo /etc/init.d/acpid reload

Примечание.:Ваше устройство подсветки может быть определено в другом месте, чем/sys/class/backlight/acpi_video0-именно там, где оказалось мое. Поковыряйтесь.

1
14.10.2021, 15:09
1 ответ

Короткая замена будет дополнена нулевыми значениями, а более длинная будет обрезана, что предотвратит случайное повреждение файла.

Если вам действительно нужно заменить ее на более длинную строку, нет другого способа, кроме как перекомпилировать (или использовать некоторые специальные -хакерские приемы, такие как захват другой более длинной строки из файла и изменение все ссылки на старую строку указывать туда ). Файлы ELF не являются архивами, такими как apks для Android.

perl -0777 -pe 's/PATTERN/substr q{REPLACEMENT}."\0"x length$&,0,length$&/e or die "pattern not found"' -i file

Измените PATTERNи REPLACEMENTна то, что вам нужно. Будьте осторожны, чтобы не совпадать с NUL(\0PATTERN.

Вероятно, это можно было бы сделать проще.

Пример:

$ cp /bin/sh /tmp/sh
$ /tmp/sh -c 'exec 7</tmp/jeg'
/tmp/sh: 1: cannot open /tmp/jeg: No such file
$ perl -0777 -pe 's/No such file/substr q{BLA BLA WHATEVER}."\0"x length($&),0,length$&/e' -i /tmp/sh
$ /tmp/sh -c 'exec 7</tmp/jeg'
/tmp/sh: 1: cannot open /tmp/jeg: BLA BLA WHAT

0
14.10.2021, 16:20

Теги

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