이번에는 칼리 리눅스 환경에서 어셈블리 언어로
Hello World! 를 띄워 볼라 합니다.
처음 nano를 사용하여 HelloWorld.s 파일을 만들겠습니다.
텍스트 저장을 위한 데이터 섹션과 텍스트 섹션을 정의 합니다.
그리고 start 부분을 정의 합니다
이 부분은 밑에 참고 자료와 함께 정리하겠습니다.
소스코드를 다 작성하였다면 Ctrl + x 키를 누른 후 y를 눌러 저장을 합니다.
리눅스 환경에서는 ls를 사용하여 파일을 확인 할 수 있으므로
아까 만든 HelloWorld.s가 보입니다.
nasm 명령어를 활용하여 형식자를 .o로 바꿔주겠습니다
ld 명령어를 활용해 .o를 실제 우리가 볼 수 있는 파일로 변환을 해주겠습니다.
ls를 활용해 보면 아까 변경했던 파일들이 보입니다.
그 중 최종 파일인 HelloWorld파일을 열어보겠습니다.
리눅스 환경에서 파일을 열기 위해서 ./를 사용합니다
정상적으로 코드를 작성하였다면 아까 data 섹션에 작성했던
Hello World!가 보입니다.
위 start에 작성된 코드들은
https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
Linux System Call Table for x86 64 · Ryan A. Chapman
Linux 4.7 (pulled from github.com/torvalds/linux on Jul 20 2016), x86_64 Note: 64-bit x86 uses syscall instead of interrupt 0x80. The result value will be in %rax To find the implementation of a system call, grep the kernel tree for SYSCALL_DEFINE.\?(sysca
blog.rchapman.org
위 사이트에서 64비트 기준 리눅스 시스템 콜을 확인해보면 알 수 있습니다.
또한 시스템 콜을 위한 레지스터들은
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/x64-architecture
x64 Architecture - Windows drivers
x64 Architecture
docs.microsoft.com
위 사이트에서 확인 할 수 있습니다.
다음에는 메모리 구조를 정리해보도록 하겠습니다.
'Assemble' 카테고리의 다른 글
[Assemble] 반복문 구현하기 (0) | 2020.06.01 |
---|---|
[Assemble] 기초 문법 정리 (0) | 2020.05.31 |
[Assemble] 입력한 값을 출력하는 프로그램 만들기 (0) | 2020.05.30 |
[Assemble] 메모리 구조 (0) | 2020.05.27 |