2016-12-19 1 views
0

Я пытаюсь найти функцию вызова в виде двоичного файла, так что я попытался это:Различия между objdump и XXD

  1. Компиляция мой код (в C),
  2. Используйте команду: mips-mti-linux-gnu-objdump -d myapp.elf> objdump.txt
  3. Моя функция в objdump.txt файле: 9d003350: 42000828 myfunction 0x1

Теперь я хочу, чтобы определить эту функцию в myapp.bin при чтении этого из памяти. Но, я получаю это: 28080042.

Я попытался использовать команду: xxd -ps myapp.bin> xxd.txt Всего можно найти: 28080042.

Возможно ли это?

ответ

0

Это конфликт endianness. objdump и xxd дают вам одинаковые байты, они просто используют разные понятия.

Actual bytes in order: 
    28 08 00 42 
Big endian value: 
    28 08 00 42 
Little endian value: 
    42 00 08 28 

xxd -p печатает отдельные байты в файле в том порядке, в котором они существуют.

objdump разбирает его, он знает, что байты принадлежат к группам из 4, и он интерпретирует их как мало-endian.

xxd может печатать в порядке юнитов, используя флаг -e (с группировкой по умолчанию по 4 байта, используйте флаг -g, чтобы изменить количество байтов на группу). Однако это несовместимо с флагом -p, потому что флаг -p игнорирует любую группировку.

objdump может быть изготовлен для печати в формате big-endian, используя флаг -EB, однако это повлияет на то, что он сообщает.

Смежные вопросы