GAS 질문입니다.

lacovnk의 이미지

 8048e78:       55                      push   %ebp
 8048e79:       89 e5                   mov    %esp,%ebp
 8048e7b:       8b 55 08                mov    0x8(%ebp),%edx
 8048e7e:       b8 00 00 00 00          mov    $0x0,%eax
 8048e83:       80 3a 00                cmpb   $0x0,(%edx)
 8048e86:       74 07                   je     8048e8f <string_length+0x17>
 8048e88:       42                      inc    %edx
 8048e89:       40                      inc    %eax
 8048e8a:       80 3a 00                cmpb   $0x0,(%edx)
 8048e8d:       75 f9                   jne    8048e88 <string_length+0x10>
 8048e8f:       c9                      leave
 8048e90:       c3                      ret
 8048e91:       90                      nop

글자의 길이를 구하는 부분이라고 gdb 돌려서 알아내긴 했는데요,

8048e8a: 80 3a 00 cmpb $0x0,(%edx)

요 부분이 이해가 안갑니다. (%edx)가 0의 값을 가지는 것도 아닌데..

저 부분은 $0x0이란 값과 %edx의 내용이 가리키는 내용을
byte 단위로 비교하는 것 아닌가요?

으음..ㅠㅠ

참, 그리고 masm은 매뉴얼 있던데, gas는 명령어 매뉴얼 없나요?
열심히 뒤져봐도 안나오던데 ㅠㅠ

ps. gas라고 말하면 gas 문법도 말하나요? 아니면 어셈블러 프로그램만 말하는건가요? :(

vacancy의 이미지

(%edx)가 0인지 byte단위로 비교하는 것 맞습니다.
널문자를 만나면 종료해야할테니까요.

그리고, 인라인 어셈블리로 코딩하시는게 아니면
( 어차피 그런 경우엔 gas 돌리진 않겠지만요 -_-; )
어셈블리 코딩하신 걸 어셈블하실 때
gas 쓰시는걸 별로 권해드리고 싶지 않습니다.

사실 gas는 gcc의 back-end 수준이라,
프로그램이 거의 정상적으로 들어온다고 가정하고 짜여져 있어서
에러 처리 등이 다른 어셈블러들에 비해 그다지 좋지 않답니다.

명령어는 어차피 cpu에 dependent한 것이니,
어떤 메뉴얼을 보시나 상관 없을것 같고요.
AT&T 문법에 대해 궁금하신 것이라면
제 기억엔 kldp에서 검색하면 나올 것 같네요. -_-a

lacovnk의 이미지

gcc로 덤프?한 어셈코드를 분석중이에요 :)

근데 명령어들의 자세한 내용들을 찾아볼 곳이 없어서..
(교재가 있긴 하지만 -_-; java api처럼 정리되어있는 곳이 없을까해서..ㅠㅠ)

재밌긴한데..시간 참 빨리가는군요 -_-;
이따 놀러나가야 되는데 ㅠㅠ

halite의 이미지

문법에 관한건 at&t assemply에 관련된 문서를 찾아 읽어보시고
인스트럭션에 대한 공부를 원하신다면 intel site에서 IA32 architecture 등에 관한 문서를 찾아 읽어 보시기 바랍니다.
제가 가장 추천하는 것은 intel의 문서 입니다.

advanced의 이미지

http://savannah.nongnu.org/projects/pgubook/

이 문서도 AT&T 문법이 배우기 쉽게 잘 설명되어있습니다

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.