gcc에서 만드는 어셈파일이 이상합니다.

magiccp의 이미지

간단한 hello world를 만든다음.
gcc -S hello.c
하고 hello.s를 보면....

movl $0 %eax
subl %eax , %esp

가 있습니다.
보시면 아시겠지만 아무런 의미없는 동작입니다.
왜 이런 작업을 해주어야 하는지 모르겠습니다.
아니면 gcc가 최적화 코드를 만드지 못하는것일런지요......

jenix의 이미지

음 이건 전에 잠깐 언급됬었던 기억이 있는 듯;; 한데;;

2.95 이후로 gcc 의 스택구조가 바뀌었다고 합니다.

-mpreferred-stack-boundary=2 로 옵션을 주고 컴파일 해보시면 아마도 원하는 결과가 나올 듯 한데..

저도 정확한 이유는 모르겠습니다.

gcc 3 대로 넘어가면서 스택구조를 바꿨다는 말밖에 못들어서 :oops:

아시는분 답변좀 부탁드릴께요~

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

정인철의 이미지

BOF 공격에 대비해서 스택구조가 바뀐게 아닌가요?

BP값을 알면 쉽게 리턴값을 유추할 수 있기 때문이겠죠

jenix의 이미지

엇.. 저도 그렇게 알고있었다가 한참 전 쓰레드에서 그렇데 답변 달고.. 아니라는 소리에 자료를 찾아보다가 못찾아서 잘못 알았나 보다 하고 있었는데 그게 맞나보군요 :D

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D