Преобразовать шестнадцатеричный дамп в последовательность байтов

Я пытаюсь зарегистрировать конкретную программу для запуска двоичных файлов, содержащих магическое число, с помощью binfmt_misc в Linux.

Это достигается путем повторения строки в формате:

:name:type:offset:magic:mask:interpreter:flags

В документации ядра Linux есть несколько примеров этой строки в Documentation/binfmt_misc:

:i386:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff:/bin/em86:
:i486:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff:/bin/em86:
:DEXE:M::\x0eDEX::/usr/bin/dosexec:
:DOSWin:M::MZ::/usr/local/bin/wine:

Интересующее меня магическое число отображается как 01eb в шестнадцатеричном режиме emacs:

00000000: 0000 01eb 0000 4d8f 0000 09a0 0000 0314  ......M.........

Пока что у меня есть:

:nine:M:$OFFSET:$MAGIC::/home/robb/nine/nine:    

но я не уверен, какими значениями мне нужно заменить $OFFSET и $MMAGIC.


person rps    schedule 01.08.2011    source источник
comment
1 для смещения, поскольку вы хотите указать на второе число и 01eb, которое является вашим магическим числом. Нет?   -  person    schedule 01.08.2011


Ответы (1)


Он начинается с 3-го байта в файле. Байтовые смещения начинаются с нуля, поэтому $OFFSET должно быть равно 2.

Ваше 01eb должно быть закодировано в шестнадцатеричном формате, поэтому $MAGIC равно \x01\xeb. Ваша оболочка может потребовать дополнительной обратной косой черты перед каждым \x, чтобы избежать его.

person Karl Bielefeldt    schedule 01.08.2011