首页
社区
课程
招聘
[旧帖] [讨论]win32汇编讲学---菜鸟讲学 0.00雪花
发表于: 2010-11-1 22:56 3676

[旧帖] [讨论]win32汇编讲学---菜鸟讲学 0.00雪花

2010-11-1 22:56
3676
一个人学习,太枯燥了。看了某大牛的学习方法后,深受启发。决定把当天所学的内容全都讲出来。路过的菜菜和高手过来看看,
如果你是新手,就试着看一下;看起来觉得不对劲的就拿出来说,看不懂得就提问。
还有我小时候,上语文课不怎么专心,所以有些词不达意,不过经过1~2年的教训已经好多了。现在我已经看到第四章第2节了,明天从第四章开始讲起。总觉得只见森林不见树木。知道
.while        TRUE
        invoke        GetMessage,addr @stMsg,NULL,0,0
        .break        .if eax == 0
        invoke        TranslateMessage,addr @stMsg
        inveke        DispatchMessage,addr @stMsg
.endw

这是指消息循环的一般形式;但我还说不出来
invoke        TranslateMessage,addr @stMsg 为什么要这样写,这牵扯得太多了,还要回忆以前讲过的窗口程序运行过程图(我只记得有这么一张图,但不记得他叫什么名字,具体都说了些什么。消息是怎么循环的     。。。。 因为这张图表达的内容太多了,慢慢来,程序员禁忌浮躁)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (44)
雪    币: 70
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我突然想我以后也把每天的学习进度写出来,让大家也一起分享,最重要的是可以深刻自己的学习映像!
2010-11-2 00:26
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
窗口的好处:
试想一下有一个软件有很多功能;功能1.2.3.4.......
如果在命令行下就是这样的
*.exe 功能1 /参数.....
*.exe 功能2 /参数1、参数2......
这就意味着每接触一款软件 都要独立去学习他;如果要学习N款软件还不累死?还有软件返回的数据也显示不全。
窗口就不一样,有固定的菜按钮,软件所有的功能入口都在那几个菜单里,所以只要学习一款软件,其他的就容易搞定了。
窗口和程序的关系,窗口只是一个用户界面而已。并不是正真意义上的程序
窗口界面;窗口界面大多数都是一样的。
窗口程序的运行模式:窗口程序并不是window程序,比如:nc它是windwos程序,不是窗口程序。窗口程序是利用事件驱动(单击按钮,拖动窗口等等)模式,非窗口程序是采用过程驱动(bat脚本就是这种模式)模式
2010-11-2 09:17
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
贴代码:
第一个完整的窗口程序,麻雀虽小五脏俱全。
                .386
                .model flat,stdcall
                option casemap:none;变量和子程序区分小大写
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                gdi32.inc
includelib        gdi32.lib
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data?
hInstance        dd                ?
hWinMain        dd                ?

                .const
szClassName        db        'MyClass',0
szCaptionMain        db        'My first Window ! ADD THIS ',0
szText                db        'Win32 Assembly, Simple and powerful !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain        proc        uses ebx edi esi hWnd,uMsg,wParam,lParam;申明“ProcWinMian”函数;API也属于一种函数,程序是由各个函数(功能,作用)构建起来的;而后面的参数就是说明要使用这个函数 的那个功能;参数(子功能)是函数(功能)的子集
                local        @stPs:PAINTSTRUCT
                local        @stRect:RECT
                local        @hDc

                mov        eax,uMsg
;********************************************************************
                .if        eax ==        WM_PAINT
                        invoke        BeginPaint,hWnd,addr @stPs
                        mov        @hDc,eax

                        invoke        GetClientRect,hWnd,addr @stRect
                        invoke        DrawText,@hDc,addr szText,-1,\
                                addr @stRect,\
                                DT_SINGLELINE or DT_CENTER or DT_VCENTER

                        invoke        EndPaint,hWnd,addr @stPs
;********************************************************************
                .elseif        eax ==        WM_CLOSE
                        invoke        DestroyWindow,hWinMain
                        invoke        PostQuitMessage,NULL
;********************************************************************
                .else
                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
                        ret
                .endif
;********************************************************************
                xor        eax,eax
                ret

_ProcWinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain        proc                                                ;申明“_WinMain”函数
                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,\;offset的意思就是 引用数据段(常量)
                        WS_OVERLAPPEDWINDOW,\
                        100,100,600,400,\
                        NULL,NULL,hInstance,NULL
                mov        hWinMain,eax
                invoke        ShowWindow,hWinMain,SW_SHOWMAXIMIZED;显示窗口
                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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                call        _WinMain
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start
2010-11-2 09:27
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
分析一下程序的结果,发现入口时Start,然后执行了一个_MinMain子程序,完成后就执行退出函数,ExitProcess,再看_WinMain结构,前面是顺序下来的几个API:
GetModuleHandle:获取模块句柄
rTLzEROmEMORY:初始化局部变量,把所有的局部变量赋值==0(PS:全局变量自动赋值填零,局部变量她会自己填写随即数;想象一下一个程序里有几个数它会自己乱动,会出现什么后果?)

loadcursor:装在鼠标
registerclassEX:注册窗口类别扩展(EX:是指在win16扩展而来的)在此之前要填写WINDCLASSEX数据结构。
createwindowEX:创建窗口
showwindow:显示窗口
updatewindow:更新窗口

这地方不能上图,待会把它放到空间里。;觉得这个图没多大作用。
2010-11-2 09:45
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
registerclassEX:注册窗口类别扩展(EX:是指在win16扩展而来的)在此之前要填写WINDCLASSEX数据结构。
  填写WINDCLASSEX结构?在代码里没看见那地方填写了这个结构啊?后面注意一下
2010-11-2 09:48
0
雪    币: 1149
活跃值: (833)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
7
一起学习 最近看到 十一章了。。。很有感觉。。
2010-11-2 09:58
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
嗯!很好哈,如果你觉得前面的忘记了,来这里看看或许能想起来。
2010-11-2 10:36
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我为此特定搭建了一个学习环境
V3;金山词霸2009 radMASM 。走到哪里都可以学习
2010-11-2 10:38
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
   是这个地方

   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
2010-11-2 10:51
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
szUserDll        db        'User32.dll',0                        ;定义一个名叫“szuserdll”的字符串常量
                ...
                invoke        GetModuleHandle,addr szUSERdll
                .if        eax
                        mov        hUserDllHandle,eax        ;把getmodulehandle 函数的返回值传给 huserdllhandle                                    
                .endf
                ....

感悟1:eax如果在 invoke 下面,那么eax就已经接收了前面参数的返回值//好像在书上见过
感悟2:.if        寄存器;那么 这“.if        寄存器”表达式为真,所以下面的代码一定会执行。
2010-11-2 10:56
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
很多初学者和我一样,觉得这和WINDCLASSEX跟不是一回事严重变相了。(纯属心理安慰而已,我想有很多人都不是这样的)
回到过去看一些WINDCLASSEX数据结构是什么样的
WINDCLASSEX        STRUCT
        cbsize        DWORD
        style        DWORD
        .....        .....
WINDCLASSEX        ENDS
在楼上已经说了,在注册窗口(registerclassEX)之前要填写WINDCLASS结构
怎么做?
就是通过 “mov” 方式来填写
比如:mov  @stWndClass.hbrBackground,COLOR_WINDOW + 1
就是填写windows窗口的色彩值....(在这里不重要后面 再说)
关于@stWndClass;

_WinMain  proc            ;申明“_WinMain”函数
    local  @stWndClass:WNDCLASSEX
已近申明好了
关于“mov”
mov  @stWndClass.hbrBackground,COLOR_WINDOW + 1 结构类似于
mov  [bx+si],bx

它们看起来不怎么像诶,
2010-11-2 11:29
0
雪    币: 60
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
楼主看的啥书推荐下
2010-11-2 12:49
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
琢石成器-----Windows环境下32位汇编语言程序设计
琢石成器,这个名字起的好。我们起初都是别人看不起的石头,经过学习win32汇编(细心的雕琢)就变成人人都喜欢的玉器了
2010-11-2 13:26
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
前言:
了解了消息驱动体系的工作流程以后,让我们来分析如何用win32汇编实现这一切。
模块和句柄
1,模块:一个模块代表的是一个运行中的exe文件或dll文件,用来代表这个文件中所有的代码和资源,磁盘上的文件不是模块,装入内存后运行时就叫做模块。一个应用程序调用其他DLL中的API时,这些DLL文件装入内存就长生了不同的模块,为了区分地址空间中的不同模块,每个模块都有一个唯一的句柄来标识。
句柄:每个模块,窗口,甚至线程。凡是能叫得出“类”的东西都有自己独一无二的句柄。比如说:窗口句柄,一个windows不可能只打开一个窗口,每个窗口都有自己的句柄。我们不需要理解句柄它是什么,句柄XXXYYY它是指什么。因为,只要把这个句柄给windows它就会知道 XXXYYY是指的是什么东西。
2010-11-2 13:39
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
registerclassEX   :在楼上说过了
值得注意的是就是
程序定义了一个WNDCLASSEX结构变量@stWNDCLASS,用Rtzeromemory函数将其填零。
这里该说的楼上都说了:
值得注意的是;“style”风格的填写

CS_DBLCLKS风格,要想达到双击效果这个是必须的。在指定风格的时候在你很熟悉参数的前提下使用and,其他的初学的就乖乖使用or。这样会少很多无辜的郁闷。
2010-11-2 13:52
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
接下来的步骤就是在已经注册的窗口类的基础上奖励窗口,使用“类”的原因是定义窗口的“共性”,建立窗口时肯定还要制定窗口的很多“个性化”的参数----如WNDCLASSEX结构中没有定义的外观,标题,位置,大小和边框等类型属性,这些属性是建立窗口时才指定的。
重点:和注册窗口类不同,建立窗口时所有的属性都是用单个参数的方式传递的;
如:    invoke  CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\;offset的意思就是 引用数据段(常量)
      WS_OVERLAPPEDWINDOW,\
      100,100,600,400,\
      NULL,NULL,hInstance,NULL
2010-11-2 14:10
0
雪    币: 60
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
有电子书地址发下,万分感谢
2010-11-2 14:51
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
额,这个到没有。不过你可以到卓越网上去买。四十多块钱这样子,如果你有电脑应该买的起的。再说了,如果你没有电脑。买了也白搭。汇编靠手动实践的。佛祖说:实践出真知。我们的教主说:实践是检验实践验证里的唯一道理(这官话太难说了,注定就不是说给老百姓听的)
2010-11-2 14:55
0
雪    币: 60
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
很穷,不想买啊,大学课本还没肯透呢,我看看别的吧
2010-11-2 15:12
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
老许之,好样的!向你学习!
2010-11-2 16:40
0
雪    币: 156
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
老罗的书啊。刚好看到这里了。
2010-11-2 17:25
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
大学?!我一个月600快钱,老爸都还觉得我用多了。再说,我又没有上大学,就在家没事就看这个。看汇编主要是为了修身,就像头儿时不时练习钢笔字一样。
2010-11-2 21:43
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
贴代码:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 3rd Edition>
; by 罗云彬, http://www.win32asm.com.cn
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; FirstWindow.asm
; 在窗口模板程序上添加一个按钮
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff FirstWindow.asm
; Link /subsystem:windows FirstWindow.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat,stdcall
                option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                gdi32.inc
includelib        gdi32.lib
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data?

hInstance        dd                ?
hWinMain        dd                ?

                .const
szClassName        db        'MyClass',0
szCaptionMain        db        'My first Window !',0
szText                db        'Win32 Assembly, Simple and powerful !',0
szButton        db        'button',0
szButtonText        db        '&OK',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain        proc        uses ebx edi esi,hWnd,uMsg,wParam,lParam
                local        @stPs:PAINTSTRUCT
                local        @stRect:RECT
                local        @hDc

                mov        eax,uMsg
;********************************************************************
                .if        eax ==        WM_PAINT
                        invoke        BeginPaint,hWnd,addr @stPs
                        mov        @hDc,eax

                        invoke        GetClientRect,hWnd,addr @stRect
                        invoke        DrawText,@hDc,addr szText,-1,\
                                addr @stRect,\
                                DT_SINGLELINE or DT_CENTER or DT_VCENTER

                        invoke        EndPaint,hWnd,addr @stPs
;********************************************************************
; 建立一个按钮
;********************************************************************
                .elseif        eax ==        WM_CREATE
                        invoke        CreateWindowEx,NULL,\
                                offset szButton,offset szButtonText,\
                                WS_CHILD or WS_VISIBLE,\
                                10,10,65,22,\
                                hWnd,1,hInstance,NULL
;********************************************************************
                .elseif        eax ==        WM_CLOSE
                        invoke        DestroyWindow,hWinMain
                        invoke        PostQuitMessage,NULL
;********************************************************************
                .else
                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
                        ret
                .endif
;********************************************************************
                xor        eax,eax
                ret

_ProcWinMain        endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                call        _WinMain
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start
2010-11-2 22:19
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
我不喜欢听这种话谢谢
2010-11-2 22:20
0
游客
登录 | 注册 方可回帖
返回
//