2009-02-04 2 views

답변

5

-S 옵션으로 생성 된 어셈블리 목록을 직접 비교하는 대신 개체 파일을 컴파일하고 개체 파일을 디스 어셈블 한 다음 비교할 수 있습니다. (또는 컴파일 된 객체 코드의 hexdump를 직접적으로 비교할 수는 있지만 훨씬 더 고통 스럽다.) 이렇게하면 대부분의 레이블이 제거되므로 diff와 비교하기가 더 쉬워야합니다. 예 :

g++ file1.cc -c -o file1.o 
g++ file2.cc -c -o file2.o 
objdump -d file1.o > file1.s 
objdump -d file2.o > file2.s 
diff file1.s file2.s 
0

간단한 sed로 라벨을 제거하고 "라벨"또는 공백으로 모두 바꿀 수 있습니다 ("diff -w"사용).

다른 레지스터가 사용되었지만 작업이 동일한 장소는 고려되지 않습니다. 이것은 매우 일반적 일 수 있습니다. 함수에 변수를 추가하면 레지스터가 직접 관련되지 않은 코드에서 재 할당 될 수 있습니다.

이를 처리 할 수있는 유일한 방법은 특별히 이러한 경우를 찾고 처리하는 프로그램을 작성하는 것입니다. 나는 모든 조건에서 작동 할 수있는 "단순한"솔루션을 찾지 못할 것이라고 생각합니다.

관련 문제