어셈블러에서 옵티마이즈??
글쓴이: chsuk / 작성시간: 월, 2008/10/20 - 5:27오후
안녕하세요. 항상 질문만 하네요....
gcc를 이용해서.. 어셈블리어를 실행파일로 만들고 있습니다.
그런데..제가 어셈블리어에 몇가지의 추가적인 코드.. nop를 6개 넣었습니다.
원본 어셈블리어 코드 와 6개 추가된 명령어된 어셈블리어의 실행 파일의 명령어 갯수를 비교해보면 약 40개의 차이를 보이네요.
브랜치 등을 비교해도 많이 차이가 나구요.
제가 알기로는 어셈블러는 1:1로 기계어로 바꿔주는 것으로 알고 있는데.. 옵티마이즈... 생각해보면 가능할 것 같기도 하지만..ㅜ.ㅜ;;;
결과가 저렇게 나와서 당황스럽네요.
디어셈블러도 역으로 뽑아서 확인을 해봤는데 몇 군데에서 엉겨있더군요..
질문 드립니다.
어셈블리어도 옵티마이즈 하나요? 만약 옵티마이즈를 한다면 못하게 막는 방법은 없나요?
감사합니다.
Forums:
as의 경우에는 optimization level을 지정할 수 있습니다.
여담으로 어느 디어셈블러를 사용하셨는지는 모르겠지만, objdump와 같은 linear sweep을 쓰는 것은 그 정확도가 평균 65-70%정도라고 합니다. 완전 신뢰하는것은 좋지 않다고 생각되네요.
답변 감사합니다.
실행파일에서 실행시키면서 명령어를 읽어들여서 분석하는 게 있어서 분석했더니 40개 정도차가 났구요..
이상해서 objdump로 다시 읽어들여 봤더니 비교해봤더니 엉겼더군요... 일단 감사드리구요..
as에서 optimization level을 어떻게 지정할 수 있나요?
관련 자료라던지 링크라던지... 검색 키워드라도... 어딜 찾아봐야 하나요?
gcc 옵티마이즈는 많은데.. as는 찾아도 못찾겠네요..
감사합니다.
man as 하시면 자세한
man as 하시면 자세한 사항이 설명되어 있습니다.
읽어보았는데요..
아쉽게도 원하는 옵션은 없는것 같네요..
어쨋든... 답변 감사드립니다.
http://www.rt.com/man/as.1.html
최적화하기도 할껄요.
c내에서 인라인 어셈을 사용하셨다면, 최적화 합니다.
그냥 as로 하셨더라도, 최적화 합니다.
-n 옵션을 줘서, code alignment관련 최적화를 꺼 보시죠.
댓글 달기