2016-12-19 69 views
0

我试图找到一个二进制文件的调用函数,所以我想这:差异与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冲突。 objdumpxxd给你相同的字节,他们只是使用不同的字节顺序。

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组,它将它们解释为little-endian。

xxd可以使用-e标志(使用默认的4字节分组,使用-g标志来更改每个组的字节数)使用little-endian顺序进行打印。但是,这与-p标志不兼容,因为-p标志忽略任何分组。

objdump可以使用-EB标志以big-endian顺序打印,但是,这会影响它报告的指令。