Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)
/usr/lib/gcc-lib/i386-linux/2.95.4/cpp0 -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=95 -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ a.c a.i
GNU CPP version 2.95.4 20011002 (Debian prerelease) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.4/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3
/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../i386-linux/include
End of omitted list.
/usr/lib/gcc-lib/i386-linux/2.95.4/cc1 a.i -quiet -dumpbase a.c -version -o a.s
GNU C version 2.95.4 20011002 (Debian prerelease) (i386-linux) compiled by GNU C version 2.95.4 20011002 (Debian prerelease).
as -V -Qy -o a.o a.s
GNU assembler version 2.12.90.0.1 (i386-linux) using BFD version 2.12.90.0.1 20020307 Debian/GNU Linux
/usr/lib/gcc-lib/i386-linux/2.95.4/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/i386-linux/2.95.4/crtbegin.o -L/usr/lib/gcc-lib/i386-linux/2.95.4 a.o -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-linux/2.95.4/crtend.o /usr/lib/crtn.o
이렇게 하면 assembler(as)가 어떻게 사용되는지 알 수 있고,
중간에 나오는 a.s file이 assembly어 로 되어 있는 소스이죠.
GNU assembler를 사용하지요.일단 바로 assembler
GNU assembler를 사용하지요.
일단 바로 assembler를 이용하는 것은 재미가 없으니까..
c 로 다음과 같이 만들어 봅시다.
gcc -o a.c -save-temps -v
이렇게 하면 assembler(as)가 어떻게 사용되는지 알 수 있고,
중간에 나오는 a.s file이 assembly어 로 되어 있는 소스이죠.
아마 원하는시는 부분을 이 파일을 수정해서 하시는것이 재밌을 것입니다.
a.s 내용은
a.s 를 수정하신다음
이렇게 위에 나온대로 해주면 원하시는 어셈블 프로그램을 할 수 있지 않을까요?
---
http://coolengineer.com
어억..
:shock: 가... 감사합...니다..
이렇게 자세한 설명을.. :shock:
주제랑 좀 다른얘기지만, 위에 서술된 내용에 대해 참고하시라고 ..
주제랑 좀 다른얘기지만, 위에 서술된 내용에 대해 참고하시라고 ..
compile까지만 하고 link는 하지 않으려면,
gcc -S a.c
해주시면 아마 a.s 까지 생성되고 멈출겁니다.
nasm이 나을듯 하네요...
gas쪽 문법은 좀 알아보기가 복잡한 편이라서(물론 사람마다 다르겠지만)
nasm을 추천해 드립니다. 특히 도스의 masm에 익숙하셨던 분이라면
더 쉽게 익힐 수 있을 겁니다. nasm 구하시려면 신선고기 뒤져보세요.
그리고 리눅스에서는 모두 32bit flat model만을 쓰고,
(메모리 접근시 세그먼트는 모두 DS 레지스터만 사용합니다)
시스템 호출은 int 80h 쓴다는거 알아두세요. 도스 세계와는 완전히 틀립니다.
시스템 호출의 구체적인 내용은 http://www.linuxassembly.org 가보시면
나와 있습니다. 그외 Assembly-HOWTO 문서도 보시고요
Written By the Black Knight of Destruction
댓글 달기