-_-;; 음 질문하기도 민망한데;; gcc 의 바이너리와 as 의 바이

jenix의 이미지

안녕하세요..

이제 막 어셈에 입문하면서..

다음과 같은 코드를 가지고 간단하게 테스트해 보는 중인데요;;

      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 에 실행가능 퍼미션은 주었구요 ^^;

음.. -_-;;;; 너무 무식한 질문인거 같기도 하고 -_-;; 왠지;;

혼날듯한 질문 -ㅁ-;;

아참..그리고.. 음.. 어셈은.. 한글로 된 사이트는 별로 없더라구요?

어셈러브 인가? 하는 사이트는 가봤는데..음..아직 준비중인 사이트인듯 하구;

www.linuxassembly.org 말구..

다른 사이트 혹시 추천해 주실 것 있는지도 부탁드려봅니다 ^^

새해 복 많이받으세요~

dg의 이미지

gcc a.s 하면 실행 가능한 파일이 나옵니다..
as a.s하면 그냥 어셈블만 한 오브젝트 파일이 나옵니다..

jenix의 이미지

아아;; 방금 알았습니다 ^^;;

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

jyj9782의 이미지

대략 리눅스니까.. GAS 어셈코드로 적어보면요..

.globl main

3 main: 		// int main(void){
4 push %ebp
4 movl %ebp, %esp
5 sub $0x4, %esp	// char a[2];
7 xor %eax, %eax	// return value = 0
8 movl %ebp, %esp
8 pop %ebp
8 ret			// return 0;}

대략 간단하지 않나요.. ^^ 위와 같이 gcc 로 -S 옵션으로... 풀어보시면 공부많이 되겠네요..

힘내세요.

gurugio의 이미지

어셈러브 운영자 김기오입니다.

아직 사이트가 많이 부족합니다.

사실 사이트의 운영보다 학업과 개인적인 공부를 더 중시합니다.

제가 먼저 실력이 쌓여야 사이트에 도움이 됄거라는 믿음에서입니다.

열심히 해서 충실한 내용 많이 만들겠습니다.

언제까지라고는 말씀을 못 드리지만요.. oops

gurugio의 이미지

.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;}

-> 함수가 종료됍니다.

씨 콜링 컨벤션에 대한 내용은 길어서 말씀드리기가 뭐하네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.