首页
社区
课程
招聘
[求助]VC编译成64位汇编以后不能理解的语句
发表于: 2012-8-2 09:51 7806

[求助]VC编译成64位汇编以后不能理解的语句

2012-8-2 09:51
7806
; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01  

include listing.inc

INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

PUBLIC ?c@@3HA ; c
_DATA SEGMENT
?c@@3HA DD 09H ; c
_DATA ENDS
PUBLIC WinMain
EXTRN __imp_MessageBoxA:PROC
pdata SEGMENT
$pdata$WinMain DD imagerel $LN3
DD imagerel $LN3+87
DD imagerel $unwind$WinMain
pdata ENDS
xdata SEGMENT
$unwind$WinMain DD 011801H
DD 06218H
; Function compile flags: /Odtp
xdata ENDS
_TEXT SEGMENT
a$ = 32
b$ = 36
hInstance$ = 64
hPrevInstance$ = 72
szCmdLine$ = 80
iCmdShow$ = 88
WinMain PROC
; File c:\program files (x86)\microsoft visual studio 10.0\vc\bin\amd64\sd.cpp
; Line 9
$LN3:
mov DWORD PTR [rsp+32], r9d
mov QWORD PTR [rsp+24], r8
mov QWORD PTR [rsp+16], rdx
mov QWORD PTR [rsp+8], rcx
  sub rsp, 56 ; 00000038H
mov DWORD PTR a$[rsp], 1
; Line 11
mov DWORD PTR b$[rsp], 0
; Line 12
mov eax, DWORD PTR ?c@@3HA ; c
mov ecx, DWORD PTR a$[rsp]
add ecx, eax
mov eax, ecx
add eax, DWORD PTR b$[rsp]
mov DWORD PTR ?c@@3HA, eax ; c
; Line 18
xor r9d, r9d
xor r8d, r8d
xor edx, edx
xor ecx, ecx
call QWORD PTR __imp_MessageBoxA
; Line 19
xor eax, eax
add rsp, 56 ; 00000038H
ret 0
WinMain ENDP
_TEXT ENDS
END

以上是sd.cpp经过CL /c sd.cpp /Faad.asm编译后得到的asm文件,其中的pdata是什么意思呢?
$pdata$WinMain DD imagerel $LN3这一句的imagerel是什么意思,而且用到了$LN3标号,而$LN3
标号要在这条语句之后,在代码段才进行定义,因此ml64编译到这条语句会出错,显示$LN3为定义。
这难道是VC++编译器在编译64位asm的时候产生的BUG吗?
xdata又是什么呢?

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
看这种代码不如看反汇编出来的代码呢。
2012-8-2 12:03
0
雪    币: 506
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上头相一直在赚,如果你不正眼看它的话。
2012-8-2 12:11
0
雪    币: 1024
活跃值: (240)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
4
楼上楼上头相一直在赚,如果你不正眼看它的话。

xdata pdata应该是不同属性的段  其他的不懂
2012-8-2 12:37
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这种代码是可以用ML64编译通过的,可以编译在连接形成可执行文件.exe,正常情况是没有语法错误的,而这个文件却产生了语法错误,标号$LN3未定义,不知道pdata是什么意思。
2012-8-2 13:41
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
许多问题我觉得问得莫名其妙,你问xdata是什么,那我问你aait是什么意思啊?
2012-8-2 20:26
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我找到答案了,把上述asm中间的pdata和xdata改成.pdata和.xdata,文件头增加
OPTION DOTNAME 语句,然后把标号 $LN3:一个冒号改为$LN3::两个冒号,文件编译通过了!
2012-9-1 19:47
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01  

include listing.inc
OPTION DOTNAME
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

PUBLIC ?c@@3HA ; c
_DATA SEGMENT
?c@@3HA DD 09H ; c
_DATA ENDS
PUBLIC WinMain
EXTRN __imp_MessageBoxA:PROC
.pdata SEGMENT
$pdata$WinMain DD imagerel $LN3
DD imagerel $LN3+87
DD imagerel $unwind$WinMain
.pdata ENDS
.xdata SEGMENT
$unwind$WinMain DD 011801H
DD 06218H
; Function compile flags: /Odtp
.xdata ENDS
_TEXT SEGMENT
a$ = 32
b$ = 36
hInstance$ = 64
hPrevInstance$ = 72
szCmdLine$ = 80
iCmdShow$ = 88
WinMain PROC
; File c:\program files (x86)\microsoft visual studio 10.0\vc\bin\amd64\sd.cpp
; Line 9
$LN3::
mov DWORD PTR [rsp+32], r9d
mov QWORD PTR [rsp+24], r8
mov QWORD PTR [rsp+16], rdx
mov QWORD PTR [rsp+8], rcx
  sub rsp, 56 ; 00000038H
mov DWORD PTR a$[rsp], 1
; Line 11
mov DWORD PTR b$[rsp], 0
; Line 12
mov eax, DWORD PTR ?c@@3HA ; c
mov ecx, DWORD PTR a$[rsp]
add ecx, eax
mov eax, ecx
add eax, DWORD PTR b$[rsp]
mov DWORD PTR ?c@@3HA, eax ; c
; Line 18
xor r9d, r9d
xor r8d, r8d
xor edx, edx
xor ecx, ecx
call QWORD PTR __imp_MessageBoxA
; Line 19
xor eax, eax
add rsp, 56 ; 00000038H
ret 0
WinMain ENDP
_TEXT ENDS
END
2012-9-1 19:50
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
还要在.pdata段和.xdata段定义时增加DWORD   READ  '',即定义如下
.pdata SEGMENT DWORD   READ  ''
。。。。。。。。。。
.pdata ENDS
.xdata SEGMENT DWORD   READ  ''
。。。。。。。。。
.xdata ENDS
2012-9-1 19:56
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01  

include listing.inc
OPTION DOTNAME
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

PUBLIC ?c@@3HA ; c
_DATA SEGMENT
?c@@3HA DD 09H ; c
_DATA ENDS
PUBLIC WinMain
EXTRN __imp_MessageBoxA:PROC
.pdata SEGMENT DWORD   READ  ''
$pdata$WinMain DD imagerel $LN3
DD imagerel $LN3+87
DD imagerel $unwind$WinMain
.pdata ENDS
.xdata SEGMENT DWORD   READ  ''
$unwind$WinMain DD 011801H
DD 06218H
; Function compile flags: /Odtp
.xdata ENDS
_TEXT SEGMENT
a$ = 32
b$ = 36
hInstance$ = 64
hPrevInstance$ = 72
szCmdLine$ = 80
iCmdShow$ = 88
WinMain PROC
; File c:\program files (x86)\microsoft visual studio 10.0\vc\bin\amd64\sd.cpp
; Line 9
$LN3::
mov DWORD PTR [rsp+32], r9d
mov QWORD PTR [rsp+24], r8
mov QWORD PTR [rsp+16], rdx
mov QWORD PTR [rsp+8], rcx
  sub rsp, 56 ; 00000038H
mov DWORD PTR a$[rsp], 1
; Line 11
mov DWORD PTR b$[rsp], 0
; Line 12
mov eax, DWORD PTR ?c@@3HA ; c
mov ecx, DWORD PTR a$[rsp]
add ecx, eax
mov eax, ecx
add eax, DWORD PTR b$[rsp]
mov DWORD PTR ?c@@3HA, eax ; c
; Line 18
xor r9d, r9d
xor r8d, r8d
xor edx, edx
xor ecx, ecx
call QWORD PTR __imp_MessageBoxA
; Line 19
xor eax, eax
add rsp, 56 ; 00000038H
ret 0
WinMain ENDP
_TEXT ENDS
END
2012-9-1 19:56
0
游客
登录 | 注册 方可回帖
返回
//