Archive for 4月 17th, 2012

  1. Hello, Win32 API(MASM) World!

    Posted on 4月 17th, 2012 by cx20

    Win32 API(MASM)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は MASM からの呼出し例である。

    ソースコード(MASM)

    ; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.762 
     
            TITLE   hello.c
            .686P
            .XMM
            include listing.inc
            .model  flat
     
    INCLUDELIB LIBCMT
    INCLUDELIB OLDNAMES
     
    _DATA   SEGMENT
    $SG77810 DB     'Hello, World!', 00H
            ORG $+2
    $SG77811 DB     'Hello, Win32 API(MASM) World!', 00H
    _DATA   ENDS
    PUBLIC  _main
    EXTRN   __imp__MessageBoxA@16:PROC
    ; Function compile flags: /Odtp
    _TEXT   SEGMENT
    _argc$ = 8                                              ; size = 4
    _argv$ = 12                                             ; size = 4
    _main   PROC
    ; File hello.c
    ; Line 4
            push    ebp
            mov     ebp, esp
    ; Line 5
            push    0
            push    OFFSET $SG77810
            push    OFFSET $SG77811
            push    0
            call    DWORD PTR __imp__MessageBoxA@16
    ; Line 6
            xor     eax, eax
    ; Line 7
            pop     ebp
            ret     0
    _main   ENDP
    _TEXT   ENDS
    END

    上記コードは、下記の C のソースを「cl hello.c /FA」にてアセンブラ出力したものである。

    ソースコード(C言語)

    #include <windows.h>
     
    int main( int argc, char* argv[] )
    {
        MessageBoxA( NULL, "Hello, Win32 API(MASM) World!", "Hello, World!", MB_OK );
        return 0;
    }

    コンパイル方法(Visual C++)

    C:¥> ml hello.asm
    C:¥> link hello.obj user32.lib

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(MASM) World!
    ---------------------------
    OK   
    ---------------------------