2016-12-19 10 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입니다. 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 개 그룹에 속하고 리틀 엔디안으로 해석됩니다.

xxd-e 플래그를 사용하여 리틀 엔디안 순서로 인쇄 할 수 있습니다 (기본 그룹화가 4 바이트 인 경우 그룹 당 바이트 수를 변경하려면 -g 플래그 사용). 그러나 -p 플래그는 그룹화를 무시하기 때문에 -p 플래그와 호환되지 않습니다.

objdump-EB 플래그를 사용하여 빅 엔디안 순서로 인쇄 할 수 있지만 이는보고하는 지침에 영향을 미칩니다.