현재 어셈블리 언어의 arkane 기술을 배우고 있습니다.
(Windows 8.1에서는) 대화 상자를 표시하는 프로그램을 작성했습니다. msdn 참조를 확인하고 대화 상자의 광 및 동작을 변경하는 방법을 알아 냈습니다. 반환 값이 저장되는 위치와 읽는 방법도 배웠습니다. 그래서 제 질문은 "내가 갇혀있게 도와주세요"와 같은 것이 아닙니다. 이 작은 대화 상자 프로그램에서
봐는 :
.386
.model flat, stdcall
includelib "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\user32.lib"
includelib "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib"
MessageBoxA PROTO :DWord, :DWord, :DWord, :DWord
ExitProcess PROTO :DWord
.data
Caption db "Masm shizzle",0
Text db "Click OK my friend",0
.code
start:
push 11h
push OFFSET Caption
push OFFSET Text
push 0
call MessageBoxA
push 0
call ExitProcess
end start
이 마법처럼 일했다, 나는 매개 변수가 스택에 주문해야하는지 알아 냈어.
나는 다음 코드를 개선하고 더 읽기와 청소기 만들려고, 그래서 아래로 .CODE 섹션을 부러 :
.code
start:
invoke MessageBoxA, 0, addr Text, addr Caption, 11h
invoke ExitProcess, 0
end start
그리고 난 당신이 코드를 더 읽기 쉽게 만들 수 발표 웹 페이지를 통해 발견 "windows.inc"의 도움으로 기호 이름을 사용하여. 함수 A (ANSI)를 쓸 필요가 없다고 말했습니다.
그래서 호출 호출은 다음과 같을 것이다 :
invoke Messagebox, NULL, addr Text, addr Caption, MB_ICONINFORMATION
문제는 "windows.inc"더 구체적으로, 이러한 상징적 인 이름이 MASM32 패키지에서 점이다.
기본적으로 masm32를 사용하는 것에 반대하는 것은 아니지만, 내가 사용할 수있는 Visual Studio 만 설치된 "standart"Windows 호스트에 동일한 파일이 있는지 알고 싶습니다.
원격 mashine에서이 코드를 실행 (또는 심지어 컴파일)하고 싶다면 호스트에 masm32 설치가 있다고 가정 할 수 없으므로 include가 아무 곳에도 가리 키지 않습니다. 는 (내가 알고있는, 또는 그대로 내가 미리 컴파일 된 경우는 실행 파일로 포장?)
그 다음 내가 기호 이름 라이브러리를 작성해야 할 것 같아요, MASM32없이 할 수없는 경우 ....
을, 그것을 실행하지 않을 때. 최종 사용자가 코드를 다시 컴파일하려면 MASM32가 필요합니다. (또는 호환 가능한 써드 파티 어셈블러이지만 그러한 어셈블러는 포함 파일의 자체 버전을 제공해야합니다.) 그래서 나는 당신에게 문제가 있다고 생각하지 않습니다. –
이것에 약간의 명확성을 가져 주셔서 감사합니다. 그래서 나는 내가 필요한 모든 버전을 미리 컴파일한다고 생각한다. 완료를 위해이 파일과 동일한 Microsoft 프로그램이 있습니까? – clockw0rk
실제로 MASM32가 제 3 자 패키지라는 사실을 알지 못했습니다. 마이크로 소프트에 상응하는 것이 있는지는 모르겠다. 라이선스에 따라 관련 콘텐츠를 소스 코드에 직접 복사 할 수 있습니다. –