首页
社区
课程
招聘
[求助]汇编结构体嵌套问题,在线求教?
发表于: 2009-7-11 20:50 5952

[求助]汇编结构体嵌套问题,在线求教?

2009-7-11 20:50
5952
代码摘要如下:
_time           proc near
TimeZoneInformation= _TIME_ZONE_INFORMATION ptr -0CCh
var_20          = dword ptr -20h
var_1A          = word ptr -1Ah
var_18          = word ptr -18h
var_16          = word ptr -16h
SystemTime  = _SYSTEMTIME ptr -10h
arg_0           = dword ptr  8

                push    ebp
                mov     ebp, esp
                sub     esp, 0CCh
                lea     eax, [ebp+SystemTime]
                push    eax             ; lpSystemTime
                call    ds:GetLocalTime
                lea     eax, [ebp+var_20]
                push    eax             ; lpSystemTime
                call    ds:GetSystemTime
                mov     ax, [ebp+var_16]
                cmp     ax, word_A1C0FA
                jnz     short loc_624444

                mov     ax, [ebp+var_18]
                cmp     ax, word_A1C0F8
                jnz     short loc_624444

                mov     ax, [ebp+var_1A]
                cmp     ax, word_A1C0F6
                jnz     short loc_624444

                mov     ax, word ptr [ebp+var_20+2]
                cmp     ax, word_A1C0F2
                jnz     short loc_624444

                mov     ax, word ptr [ebp+var_20]
                cmp     ax, word_A1C0F0
                jnz     short loc_624444

                mov     eax, dword_A1C0E8
                jmp     short loc_624489

; ---------------------------------------------------------------------------

loc_624444:                             
                lea     eax, [ebp+TimeZoneInformation]
                push    eax             ; lpTimeZoneInformation
                call    ds:GetTimeZoneInformation
                cmp     eax, 0FFFFFFFFh
                jz      short loc_624471

                cmp     eax, 2
                jnz     short loc_62446D

                cmp     [ebp+TimeZoneInformation.DaylightDate.wMonth], 0
                jz      short loc_62446D

                cmp     [ebp+TimeZoneInformation.DaylightBias], 0
                jz      short loc_62446D

                push    1
                pop     eax
                jmp     short loc_624474

; ---------------------------------------------------------------------------

loc_62446D:
                xor     eax, eax
                jmp     short loc_624474

; ---------------------------------------------------------------------------

loc_624471:
                or      eax, 0FFFFFFFFh

loc_624474:
                push    esi
                push    edi
                lea     esi, [ebp+var_20]
                mov     edi, offset word_A1C0F0
                movsd
                movsd
                movsd
                movsd
                pop     edi
                mov     dword_A1C0E8, eax
                pop     esi

loc_624489:
                push    eax
                movzx   eax, [ebp+SystemTime.wSecond]
                push    eax
                movzx   eax, [ebp+SystemTime.wMinute]
                push    eax
                movzx   eax, [ebp+SystemTime.wHour]
                push    eax
                movzx   eax, [ebp+SystemTime.wDay]
                push    eax
                movzx   eax, [ebp+SystemTime.wMonth]
                push    eax
                movzx   eax, [ebp+SystemTime.wYear]
                push    eax
                call    ___loctotime_t

                mov     ecx, [ebp+arg_0]
                add     esp, 1Ch
                test    ecx, ecx
                jz      short locret_6244B9

                mov     [ecx], eax

locret_6244B9:
                leave
                retn

_time           endp

结构体定义如下:

SYSTEMTIME      struc ; (sizeof=0x10, standard type)
wYear           dw ?
wMonth          dw ?
wDayOfWeek      dw ?
wDay            dw ?
wHour           dw ?
wMinute         dw ?
wSecond         dw ?
wMilliseconds   dw ?
SYSTEMTIME      ends

_SYSTEMTIME     struc ; (sizeof=0x10, standard type)
wYear           dw ?
wMonth          dw ?
wDayOfWeek      dw ?
wDay            dw ?
wHour           dw ?
wMinute         dw ?
wSecond         dw ?
wMilliseconds   dw ?
_SYSTEMTIME     ends

_TIME_ZONE_INFORMATION struc ; (sizeof=0xAC, standard type)
Bias            dd ?
StandardName    dw 32 dup(?)
StandardDate    SYSTEMTIME ?
StandardBias    dd ?
DaylightName    dw 32 dup(?)
DaylightDate    SYSTEMTIME ?
DaylightBias    dd ?
_TIME_ZONE_INFORMATION ends

把结构体不管是放在.data还是.code编译都出错
提示:structure improperly initialized和syntax error : in structure错误

初学汇编,该如何处理,请指点,在此先行谢过!

环境是MASMPlus

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 615
活跃值: (1202)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
masm32  不是已经定义好了 直接拿来用就可以

LOCAL st:SYSTEMTIME
2009-7-11 21:12
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
还是不太明白您说的意思!
不管有没有上面的代码,在定义
_TIME_ZONE_INFORMATION struc ; (sizeof=0xAC, standard type)
Bias            dd ?
StandardName    dw 32 dup(?)
StandardDate    SYSTEMTIME ?
StandardBias    dd ?
DaylightName    dw 32 dup(?)
DaylightDate    SYSTEMTIME ?
DaylightBias    dd ?
_TIME_ZONE_INFORMATION ends

结构体时,编译就通不过?

_TIME_ZONE_INFORMATION 具体应该怎么写才对?
2009-7-11 21:19
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哪位请指点一下?!不胜感谢!
2009-7-12 00:16
0
雪    币: 615
活跃值: (1202)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
x:\masm32\include\windows.inc
2009-7-12 08:27
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼上的试过了,加上后出现更多的错误
2009-7-12 10:46
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
7
include \masm32\include\windows.inc

SYSTEMTIME和TIME_ZONE_INFORMATION这两个结构体在windows.inc中都已经有声明,不需要自己再声明一次。

windows.inc中声明TIME_ZONE_INFORMATION的内容:
TIME_ZONE_INFORMATION STRUCT
  Bias          DWORD       ?
  StandardName  WORD        32 dup(?)
  StandardDate  SYSTEMTIME  <>
  StandardBias  DWORD       ?
  DaylightName  WORD        32 dup(?)
  DaylightDate  SYSTEMTIME  <>
  DaylightBias  DWORD       ?
TIME_ZONE_INFORMATION ENDS

注意红字部分
另外结构体声明不需要放在.data段或.code段内。

如果包括windows.inc的结果出来一大堆错误,那楼主写的程序肯定不对劲。
从贴出的内容上看,楼主是从IDA的反汇编结果中copy出一段,不加修改就放到MASMPlus里了,而因为楼主缺乏MASMPlus的语法基础,又不知道怎么把它修改好。
2009-7-12 19:01
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢,按照方法已解决!
2009-7-12 19:26
0
游客
登录 | 注册 方可回帖
返回
//