[Assemble] Hello World!
Assemble

[Assemble] Hello World!

이번에는 칼리 리눅스 환경에서 어셈블리 언어로 

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

위 사이트에서 확인 할 수 있습니다.

 

다음에는 메모리 구조를 정리해보도록 하겠습니다.