GAS 질문입니다.
글쓴이: lacovnk / 작성시간: 수, 2003/10/15 - 1:00오후
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 문법도 말하나요? 아니면 어셈블러 프로그램만 말하는건가요? :(
Forums:
(%edx)가 0인지 byte단위로 비교하는 것 맞습니다.널문자를 만
(%edx)가 0인지 byte단위로 비교하는 것 맞습니다.
널문자를 만나면 종료해야할테니까요.
그리고, 인라인 어셈블리로 코딩하시는게 아니면
( 어차피 그런 경우엔 gas 돌리진 않겠지만요 -_-; )
어셈블리 코딩하신 걸 어셈블하실 때
gas 쓰시는걸 별로 권해드리고 싶지 않습니다.
사실 gas는 gcc의 back-end 수준이라,
프로그램이 거의 정상적으로 들어온다고 가정하고 짜여져 있어서
에러 처리 등이 다른 어셈블러들에 비해 그다지 좋지 않답니다.
명령어는 어차피 cpu에 dependent한 것이니,
어떤 메뉴얼을 보시나 상관 없을것 같고요.
AT&T 문법에 대해 궁금하신 것이라면
제 기억엔 kldp에서 검색하면 나올 것 같네요. -_-a
아..제 경우는..
gcc로 덤프?한 어셈코드를 분석중이에요 :)
근데 명령어들의 자세한 내용들을 찾아볼 곳이 없어서..
(교재가 있긴 하지만 -_-; java api처럼 정리되어있는 곳이 없을까해서..ㅠㅠ)
재밌긴한데..시간 참 빨리가는군요 -_-;
이따 놀러나가야 되는데 ㅠㅠ
참고 문서
문법에 관한건 at&t assemply에 관련된 문서를 찾아 읽어보시고
인스트럭션에 대한 공부를 원하신다면 intel site에서 IA32 architecture 등에 관한 문서를 찾아 읽어 보시기 바랍니다.
제가 가장 추천하는 것은 intel의 문서 입니다.
http://linuxassembly.org/
http://linuxassembly.org/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
http://savannah.nongnu.org/projects/pgub
http://savannah.nongnu.org/projects/pgubook/
이 문서도 AT&T 문법이 배우기 쉽게 잘 설명되어있습니다
댓글 달기