. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->汇编语言学习交流区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  win32中MSG STRUCT的问题  [待解决] 回复[ 3次 ]   点击[ 508次 ]  
thedaydreamwang
[帖 主]   [ 发表时间:2010-07-12 00:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18
MSG STRUCT
  hwnd      DWORD      ?
  message   DWORD      ?
  wParam    DWORD      ?
  lParam    DWORD      ?
  time      DWORD      ?
  pt        POINT      <>
MSG ENDS
有人知道上面pt  POINT    <>是怎么定义的吗
如果我在一个字程序中定义一个局部变量如 local @@aa:MSG 则程序执行的时候@@aa变量是取的多大的内存????局部变量不是在程序加载的时候必需确定吗???
xqnimmmmm
[第1楼]   [ 回复时间:2010-08-06 09:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-06 09:10
PIONT 是一个位置的定义 它代表了鼠标的位置。它只有X Y两个参数代表了鼠标的位置的坐标
  第二个问题  变量取的内存地址是当前EBP(当前块的偏移指针)的值加4 的位置上占一个双字
xqnimmmmm
[第2楼]   [ 回复时间:2010-08-06 09:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-06 09:10
今天没有时间  有时间了再给你说仔细点
thedaydreamwang
[第3楼]   [ 回复时间:2010-08-09 04:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18
明白一点了POINT实际上是嵌套在MSG结构中的一个结构,通过反编译得到的结果是
push ebp
mov ebp,esp
add esp,FFFFFFB4
可见子程序的局部变量已经是经过编译器的时候已经由编译器化分好了,并不是在加载的过程中由程序动态分配的,不知道是不是老罗的书里写错了,还有一点让我奇怪的是first hello.asm的源程序执行方式因为一直搞不明白,有高人对反编译熟悉的清指点小弟一把!!我用的反编译软件是W32Dasm高手多多指点!!
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain        proc
                local        @stWndClass:WNDCLASSEX
                local        @stMsg:MSG

                invoke        GetModuleHandle,NULL
                mov        hInstance,eax
                invoke        RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
                invoke        LoadCursor,0,IDC_ARROW
                mov        @stWndClass.hCursor,eax
                push        hInstance
                pop        @stWndClass.hInstance
                mov        @stWndClass.cbSize,sizeof WNDCLASSEX
                mov        @stWndClass.style,CS_HREDRAW or CS_VREDRAW
                mov        @stWndClass.lpfnWndProc,offset _ProcWinMain
                mov        @stWndClass.hbrBackground,COLOR_WINDOW + 1
                mov        @stWndClass.lpszClassName,offset szClassName
                invoke        RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
                invoke        CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
                        WS_OVERLAPPEDWINDOW,\
                        100,100,600,400,\
                        NULL,NULL,hInstance,NULL
                mov        hWinMain,eax
                invoke        ShowWindow,hWinMain,SW_SHOWNORMAL
                invoke        UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
                .while        TRUE
                        invoke        GetMessage,addr @stMsg,NULL,0,0
                        .break        .if eax        == 0
                        invoke        TranslateMessage,addr @stMsg
                        invoke        DispatchMessage,addr @stMsg
                .endw
                ret

_WinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved