Microsoft MVP성태의 닷넷 이야기
Linux: 54. 리눅스/WSL - hello world 어셈블리 코드 x86/x64 (nasm) [링크 복사], [링크+제목 복사],
조회: 12908
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 3개 있습니다.)
Linux: 54. 리눅스/WSL - hello world 어셈블리 코드 x86/x64 (nasm)
; https://www.sysnet.pe.kr/2/0/13181

Windows: 217. Windows 환경에서의 Hello World x64 어셈블리 예제 (MASM 버전)
; https://www.sysnet.pe.kr/2/0/13182

개발 환경 구성: 653. Windows 환경에서의 Hello World x64 어셈블리 예제 (NASM 버전)
; https://www.sysnet.pe.kr/2/0/13185




리눅스/WSL - hello world 어셈블리 코드 x86/x64 (nasm)

WSL에서도 테스트 가능합니다. NASM - The Netwide Assembler를 설치하고,

$ sudo apt install nasm

이렇게 코딩을 추가한 다음,

$ cat hello.asm

; x86 Assembly: Hello World!
; https://youtu.be/HgEGAaYdABA

global _start

section .text:
_start:
    mov eax, 0x4 ; #define __NR_write 4
        ; ssize_t write(int fd, const void *buf, size_t count);
        ;
    mov ebx, 1 ; fd standard console output == 1
    mov ecx, message ; buf
    mov edx, message_length ; count
    int 0x80

    mov eax, 0x1 ; #define __NR_exit 1
        ; void _exit(int status);
    mov ebx, 0 ; status == 0
    int 0x80

section .data:
    message: db "Hello World!", 0x0a
    message_length equ $-message

빌드하면 결과를 확인할 수 있습니다.

$ nasm -f elf32 -o hello.o hello.asm
$ ld -m elf_i386 -o hello hello.o
$ ./hello
Hello World!




동일한 역할의 코드를 x64로 하면 ABI가 달라진다는 점만 고려하면 기본은 같습니다.

// LINUX SYSTEM CALL TABLE FOR X86 64
// https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

$ cat app.asm

section .data
    message: db "Hello World!", 0x0a
    message_length equ $-message

section .text
global _start

_start:
    mov rax, 1 ; sys_write
    mov rdi, 1 ; stdout
    mov rsi, message ; buf
    mov rdx, message_length ; count
    syscall

    mov rax, 60 ; sys_exit
    mov rdi, 0 ; error code 0
    syscall

실행도 잘 되고. ^^

$ nasm -f elf64 -o app.o app.asm
$ ld app.o -o app
$ ./app
Hello World!

그나저나, WSL로 인해 개발 환경이 정말 많이 편해졌습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 12/4/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... [166]  167  168  169  170  171  172  173  174  175  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
893정성태7/25/201027440오류 유형: 99. .NET 4.0 설치된 윈도우 7에서 SQL Server 2008 R2 설치 오류
892정성태7/9/201029111오류 유형: 98. 영문 윈도우에 한글 SQL Server 2008 R2 설치할 때 오류 [4]
891정성태7/8/201025040오류 유형: 97. MsiGetProductInfo failed to retrieve ProductVersion for package with Product Code = '{...}'. Error code: 1605. [2]
889정성태7/5/201026755.NET Framework: 179. Dictionary.Get(A) 대신 Dictionary.Get(A.GetHashCode())를 사용해서는 안 되는 이유 [1]
888정성태6/30/201024555오류 유형: 96. Hyper-V 연결 오류 - A connection will not be made because credentials may not be sent to the remote computer
887정성태6/23/201034348개발 환경 구성: 79. Hyper-V의 가상 머신에서 소리 재생 방법 [2]
886정성태6/23/201022563제니퍼 .NET: 14. ASMX, WCF 호출 모니터링 및 누수 확인
885정성태6/20/201024149개발 환경 구성: 78. COM+ 서버에서 COM+ 서버를 호출하는 방법
884정성태6/20/201027102제니퍼 .NET: 13. COM+ 서버 모니터링 [2]
883정성태6/18/201029021개발 환경 구성: 77. Appinit_Dlls로 구현한 환경 변수 설정 DLL [5]파일 다운로드1
882정성태6/17/201031794개발 환경 구성: 76. JKS(Java Key Store)에 저장된 인증서를 ActiveX 코드 서명에 사용하는 방법 [1]
881정성태6/14/201021179제니퍼 .NET: 12. COM+ 호출 모니터링 및 누수 확인
879정성태6/10/201023829제니퍼 .NET: 11. 소켓 모니터링 기능으로 본 ASP.NET의 소켓 풀링 기능 [1]
878정성태6/6/201023644제니퍼 .NET: 10. 소켓 모니터링 기능으로 본 WCF의 WSDualHttpBinding 성능 부하
877정성태5/31/201020349제니퍼 .NET: 9. 성능 관리 퀴즈 세 번째 문제 (닷넷 개발자 컨퍼런스)
876정성태5/31/201019835제니퍼 .NET: 8. 성능 관리 퀴즈 두 번째 문제 (닷넷 개발자 컨퍼런스) [2]
875정성태5/30/201021584제니퍼 .NET: 7. 성능 관리 퀴즈 첫 번째 문제 (닷넷 개발자 컨퍼런스)
873정성태5/19/201028387제니퍼 .NET: 6. 제니퍼를 위한 방화벽 설정
872정성태5/15/201027721제니퍼 .NET: 5. 제니퍼 서버 - NT 서비스로 구동시키는 방법
871정성태5/13/201034322VC++: 40. MSBuild를 이용한 VC++ 프로젝트 빌드파일 다운로드1
870정성태5/12/201025331제니퍼 .NET: 4. 닷넷 APM 솔루션 - 제니퍼 닷넷의 기능 요약 [2]
869정성태11/8/201926810오류 유형 : 95. WCF 인증서 설정 관련 오류 정리 [4]
865정성태5/5/201029080개발 환경 구성: 75. 인증서의 개인키를 담은 물리 파일 위치 알아내는 방법파일 다운로드1
864정성태5/4/201032871.NET Framework: 178. WCF - 사용자 정의 인증 구현 예제 [4]파일 다운로드1
863정성태5/4/201058826개발 환경 구성: 74. 인증서 관련(CER, PVK, SPC, PFX) 파일 만드는 방법 [1]파일 다운로드1
862정성태5/3/201020714제니퍼 .NET: 3. 제2회 닷넷 개발자 컨퍼런스에서 뵙겠습니다. ^^
... [166]  167  168  169  170  171  172  173  174  175  176  177  178  179  180  ...