首页
社区
课程
招聘
[求助]汇编masm32编程问题
发表于: 2013-3-1 15:45 4169

[求助]汇编masm32编程问题

2013-3-1 15:45
4169
.386
.model flat,stdcall
option casemap:none

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib

RGB macro red,green,blue
        xor eax,eax
        mov ah,blue
        shl eax,8
        mov ah,green
        mov al,red
endm

.DATA
ClassName         db "SimpleWinClass",0
AppName                db "Our First Window",0
OurText         db "Win32 assembly is great and easy!",0
fontname            db "script",0

.DATA?
hInstance     HINSTANCE         ?
CommandLine   LPSTR             ?

.CONST
APP_ICON EQU 1300

.CODE
start:
    invoke GetModuleHandle, NULL
    mov    hInstance,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hwnd:HWND
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    push  hInst
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_WINDOW+1
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,APP_ICON
    mov   wc.hIcon,eax
    mov   wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
           hInst,NULL
    mov   hwnd,eax
    invoke ShowWindow, hwnd,SW_SHOWNORMAL
    invoke UpdateWindow, hwnd
        .WHILE TRUE
                invoke GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                invoke TranslateMessage, ADDR msg
                invoke DispatchMessage, ADDR msg
        .ENDW
        mov     eax,msg.wParam
        ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    LOCAL hdc:HDC
    LOCAL ps:PAINTSTRUCT
    LOCAL hfont:HFONT
    LOCAL @lf:LOGFONT
    .IF uMsg==WM_DESTROY
        invoke PostQuitMessage,NULL
    .ELSEIF uMsg==WM_CREATE
        invoke LoadIcon,hInstance,APP_ICON
        Invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,EAX
      
    .ELSEIF uMsg==WM_PAINT
        invoke BeginPaint,hWnd, ADDR ps
        mov    hdc,eax
        mov @lf.lfHeight,24
        mov @lf.lfWidth,16
        mov @lf.lfEscapement,NULL
        mov @lf.lfOrientation,NULL
        mov @lf.lfWeight,NULL
        mov @lf.lfItalic,NULL
        mov @lf.lfUnderline,NULL
        mov @lf.lfStrikeOut,NULL
        mov @lf.lfCharSet,OEM_CHARSET
        mov @lf.lfOutPrecision,OUT_DEFAULT_PRECIS
        mov @lf.lfClipPrecision,CLIP_DEFAULT_PRECIS
        mov @lf.lfQuality,DEFAULT_QUALITY
        mov @lf.lfPitchAndFamily,DEFAULT_PITCH or FF_SCRIPT
       mov @lf.lfFaceName,offset fontname                                    ;提示无效的操作数
        invoke CreateFontIndirect,addr @lf              
        invoke SelectObject, hdc, eax
        mov hfont,eax                                这里提示无效字符

        RGB 200,200,50                             
       invoke SetTextColor,hdc,eax
        RGB 0,0,255                                          RGB宏命令提示主代码
        invoke SetBkColor,hdc,eax

        
        invoke TextOut,hdc,0,0,ADDR OurText,SIZEOF OurText
        invoke SelectObject,hdc, hfont

        invoke EndPaint,hWnd, ADDR ps
    .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor   eax, eax
    ret
WndProc endp
end start

求大牛指点下,REDASM编译一直过不了郁闷啊,看来看去代码并没有什么问题啊

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有编译器,目测的话就看到提示无效字符那里用的逗号是中文的
2013-3-1 15:53
0
雪    币: 6664
活跃值: (947)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢大牛,我看过你好多视频啊
2013-3-2 08:03
0
雪    币: 3
活跃值: (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mov @lf.lfFaceName,offset fontname                                    ;提示无效的操作数
invoke CreateFontIndirect,addr @lf              
invoke SelectObject, hdc, eax 
mov hfont,eax                                这里提示无效字符
RGB 200,200,50                             
invoke SetTextColor,hdc,eax
RGB 0,0,255                                          RGB宏命令提示主代码
invoke SetBkColor,hdc,eax

改成:
invoke lstrcpy, addr @lf.lfFaceName,offset fontname            ;提示无效的操作数
invoke CreateFontIndirect,addr @lf              
invoke SelectObject, hdc, eax 
mov hfont,eax                                ;这里提示无效字符(中文逗号问题)
RGB 200,200,50                             
invoke SetTextColor,hdc,eax
RGB 0,0,255                                   ;       RGB宏命令提示主代码(中文逗号问题)
invoke SetBkColor,hdc,eax
2013-3-2 20:43
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2楼头像跟我的好像~~
2013-3-2 21:09
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
为什么不用masm编译呢?
2013-3-2 21:11
0
游客
登录 | 注册 方可回帖
返回
//