2016-07-08 1 views
2

FASM을 마친 후 NASM 어셈블러를 시작합니다. Windows 운영 체제에서 이것을 코딩하고 있습니다. 내 코드를 읽NASM 튜토리얼에서는 int 80h를 사용하지만 Windows에서는 작동하지 않습니다

section.data ;Constant 
      msg: db "Hello World!" 
      msg_L: equ $-msg ; Current - msg1 

section.bss ;Varialble 

section.text ; Code 
     global [email protected] 

[email protected]: 
     mov eax,4 
     mov ebx,1; Where to wrte it out. Terminal 
     mov ecx, msg 
     mov edx, msg_L 
     int 80h 

     mov eax, 1 ; EXIT COMMAND 
     mov ebx,0 ; No Eror 
     int 80h 

를 컴파일하고 내가 사용하는 실행하려면 : 나는 현재 NASM 튜토리얼에이 비디오를 다음입니다

nasm -f win32 test.asm -o test.o 
ld test.o -o test.exe 

. 시작을 WIN32로 바꿨지 만, 실행하면 멈추고 실행되지 않습니다 ...이 문제가 있습니까?

답변

9

Windows 운영 체제에서 Linux 시스템 호출 (int 80h)을 만들려고합니다.

이것은 작동하지 않습니다. Windows API 함수를 호출해야합니다. 예를 들어 MessageBox은 화면에 메시지 상자를 표시합니다.

section.data ;Constant 
      msg: db "Hello World!" 
      msg_L: equ $-msg ; Current - msg1 

section.bss ;Varialble 

section.text ; Code 
     global [email protected] 
     extern [email protected] 

[email protected]: 
     ; Display a message box 
     push 40h ; information icon 
     push 0 
     push msg 
     push 0 
     call [email protected] 

     ; End the program 
     xor eax, eax 
     ret 

당신이 읽고있는 책/튜토리얼에 대한 NASM와 윈도우 프로그래밍이 아닌 리눅스 프로그래밍되어 있는지 확인합니다!

+0

하나의 질문입니다. 내 Linux VM에서 컴파일 한 다음 .o 파일을 Windows로 보내면 잘 작동합니까? – amanuel2

+1

아니요. Linux VM에서 컴파일하고 Linux VM에서 * 실행 * 할 수 있지만 Windows에서 Linux 시스템 호출이 없으므로 Windows에서 실행할 수는 없습니다. @dsafds –

+0

왜 Linux VM에서 컴파일 할 수 없습니까? 그것은 그를 위해 일합니다 : https : //www.youtube.com/watch? v = uca_zY8ZNpA (Ubuntu BTW) – amanuel2

관련 문제