2015-11-14 2 views
0

Ошибки я получаю здесь:Получение ошибки магического числа?

Traceback (most recent call last): 
    File "test.py", line 391, in <module> 
    main() 
    File "test.py", line 385, in main 
    find_rop_gadgets('libc.so') 
    File "test.py", line 78, in find_rop_gadgets 
    e = elf.ELF(path) 
    File "/usr/local/lib/python2.7/dist-packages/pwnlib/elf/__init__.py", line 54, in __init__ 
    super(ELF,self).__init__(self.mmap) 
    File "/usr/local/lib/python2.7/dist-packages/elftools/elf/elffile.py", line 50, in __init__ 
    self._identify_file() 
    File "/usr/local/lib/python2.7/dist-packages/elftools/elf/elffile.py", line 201, in _identify_file 
    elf_assert(magic == b'\x7fELF', 'Magic number does not match') 
    File "/usr/local/lib/python2.7/dist-packages/elftools/common/utils.py", line 69, in elf_assert 
    _assert_with_exception(cond, msg, ELFError) 
    File "/usr/local/lib/python2.7/dist-packages/elftools/common/utils.py", line 101, in _assert_with_exception 
    raise exception_type(msg) 
elftools.common.exceptions.ELFError: Magic number does not match 

Что такое магическое число в питоне Что ошибка в коде выше означает?

+4

Вам действительно не нужно публиковать * всю программу *. Пожалуйста, уменьшите это до работоспособного [mcve], который воспроизводит проблему. –

+0

MArtijn Pieters, я отправил вопрос раньше, только с ошибками, и многие читатели попросили меня опубликовать весь код, потому что они не могут помочь мне с ошибками. Поэтому я думал, что должен также отправлять коды. Can You помогите мне с этим? – Joy

+0

Вам необходимо разместить минимальную сумму, чтобы воспроизвести проблему, не более, не менее. См. [Mcve]. Извините, я здесь не могу. –

ответ

0

Формат ELF (исполняемый и связанный формат) является распространенным форматом файлов для двоичных кодовых файлов, таких как динамические библиотеки. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format

Это сообщение указывает, что файл, который вы проверяете, не является допустимым файлом в формате ELF. (Take a look at line 201 in the source code for elffile.py). Код считывает 4 байта из файла и проверяет, что они соответствуют значение 0x7fELF:

elf_assert(magic == b'\x7fELF', 'Magic number does not match') 

Это «магическое число» является начало заголовка формата ELF. Если эти байты не совпадают, это индикатор того, что файл поврежден и/или не является допустимым файлом формата ELF. Вы можете использовать команду readelf для проверки заголовка эльфа двоичного:

readelf -h file 

Из трассировки стеки вы публикуемая, функция find_rop_gadgets('libc.so') смотрит на libc.so, который передается elffile.py для проверки (если она не проходит проверку, потому что это не файл ELF). Я думаю, что разумно проверить libc.so и убедиться, что файл существует и является допустимым (неповрежденным) ELF-файлом.

Без дополнительной информации (например, пример кода) этот ответ примерно такой же конкретный, как он может быть.

См. this page for more details в формате файла ELF.