-_-;; 음 질문하기도 민망한데;; gcc 의 바이너리와 as 의 바이
글쓴이: jenix / 작성시간: 금, 2004/01/23 - 6:20오후
안녕하세요..
이제 막 어셈에 입문하면서..
다음과 같은 코드를 가지고 간단하게 테스트해 보는 중인데요;;
1 #include <unistd.h> 2 3 int main(void) 4 { 5 char a[2]; 6 7 return 0; 8 }
이걸.. 우선..
gcc -S a.c 로.. a.s 로 만들어뒀을때..
gcc -oa a.c 로 만든 a 바이너리는 실행이 되는데..
as a.s 로 만든 a.out 바이너리는 실행이 안되더라구요 @.@;;
물론.. a.out 에 실행가능 퍼미션은 주었구요 ^^;
음.. -_-;;;; 너무 무식한 질문인거 같기도 하고 -_-;; 왠지;;
혼날듯한 질문 -ㅁ-;;
아참..그리고.. 음.. 어셈은.. 한글로 된 사이트는 별로 없더라구요?
어셈러브 인가? 하는 사이트는 가봤는데..음..아직 준비중인 사이트인듯 하구;
다른 사이트 혹시 추천해 주실 것 있는지도 부탁드려봅니다 ^^
새해 복 많이받으세요~
Forums:
gcc a.s 하면 실행 가능한 파일이 나옵니다..as a.s하면 그
gcc a.s 하면 실행 가능한 파일이 나옵니다..
as a.s하면 그냥 어셈블만 한 오브젝트 파일이 나옵니다..
아아;; 방금 알았습니다 ^^;;as -o a.o a.s 한후 l
아아;; 방금 알았습니다 ^^;;
as -o a.o a.s 한후 ld -o a a.o 로.. 실행파일을 만들어 줘야하는군요;;
gcc 에서 어셈은 그럼.. as 로 해주는건가요?;;
음..;; 아고..복잡하네요 ^^;;;
음.. gcc 에서 사용하는 어셈 문법이랑..
as 에서 사용하는 어셈 문법이 다른듯한데;;
보니까.. as 로 컴파일하는 어셈은..
_start 로.. ELF 실행파일 시작부분(?) 을 만들어주는듯 하는데..
gcc -S a.c 로 만든 a.s 같은 파일은..그런게 없네요 :?
-ㅁ-;;;
---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D
대략 리눅스니까.. GAS 어셈코드로 적어보면요..[code:1]
대략 리눅스니까.. GAS 어셈코드로 적어보면요..
대략 간단하지 않나요.. ^^ 위와 같이 gcc 로 -S 옵션으로... 풀어보시면 공부많이 되겠네요..
힘내세요.
어셈러브 운영자 김기오입니다.아직 사이트가 많이 부족합니다.
어셈러브 운영자 김기오입니다.
아직 사이트가 많이 부족합니다.
사실 사이트의 운영보다 학업과 개인적인 공부를 더 중시합니다.
제가 먼저 실력이 쌓여야 사이트에 도움이 됄거라는 믿음에서입니다.
열심히 해서 충실한 내용 많이 만들겠습니다.
언제까지라고는 말씀을 못 드리지만요.. oops
.globl main -> main 레이블을 만듭니다.
.globl main
-> main 레이블을 만듭니다. 글로벌로 선언해서 다른 모듈에서도 호출 할 수 있도록 합니다.
3 main // int main(void){
4 push %ebp
4 movl %ebp, %esp
-> 지역 변수를 사용하기 위해서 현재의 스택 포인터를 보관합니다.
5 sub $0x4, %esp // char a[2];
-> 스택에 4바이트 크기만큼의 지역 변수를 만듭니다.
원래 변수는 2바이트이지만 4바이트 align을 하기 위해서 4를 뺍니다.
스택은 4바이트 단위로만 접근됍니다.
7 xor %eax, %eax // return value = 0
-> 반환 값은 eax에 저장됍니다.
8 movl %ebp, %esp
8 pop %ebp
-> 함수가 끝나므로 사용한 지역 변수를 없애고 스택을 복구합니다.
8 ret // return 0;}
-> 함수가 종료됍니다.
씨 콜링 컨벤션에 대한 내용은 길어서 말씀드리기가 뭐하네요.
댓글 달기