VS2008 ml64汇编器不支持FLAT关键字问题

在VS2008中,把源cpp文件设置成输出汇编文件,输出的汇编文件中有关键字FLAT,ml64汇编器并不认识该关键字。

贴出cpp文件生成的x64 asm文件内容如下:

; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 

include listing.inc

INCLUDELIB OLDNAMES

PUBLIC	??_C@_1FM@CLOJACEI@?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?5?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?3?$AA?$CF?$AAd?$AA?0?$AA?5?$AAp?$AAM?$AAe?$AAm?$AAo?$AAr?$AAy?$AA?5?$AAv?$AAa?$AAl?$AAu?$AAe?$AA?5@ ; `string'
PUBLIC	??_C@_1DK@KBDHHII@?$AAi?$AAn?$AAp?$AAu?$AAt?$AA?5?$AAa?$AAn?$AAy?$AA?5?$AAc?$AAh?$AAa?$AAr?$AAa?$AAc?$AAt?$AAe?$AAr?$AA?5?$AAt?$AAo?$AA?5?$AAe?$AAx?$AAi?$AAt?$AA?3?$AA?$AA@ ; `string'
PUBLIC	??_C@_15GANGMFKL@?$AA?$CF?$AAs?$AA?$AA@		; `string'
EXTRN	__security_check_cookie:PROC
EXTRN	__imp_wprintf:PROC
EXTRN	__imp_wscanf_s:PROC
EXTRN	__imp_free:PROC
EXTRN	__imp_malloc:PROC
;	COMDAT ??_C@_15GANGMFKL@?$AA?$CF?$AAs?$AA?$AA@
CONST	SEGMENT
??_C@_15GANGMFKL@?$AA?$CF?$AAs?$AA?$AA@ DB '%', 00H, 's', 00H, 00H, 00H ; `string'
CONST	ENDS
;	COMDAT ??_C@_1DK@KBDHHII@?$AAi?$AAn?$AAp?$AAu?$AAt?$AA?5?$AAa?$AAn?$AAy?$AA?5?$AAc?$AAh?$AAa?$AAr?$AAa?$AAc?$AAt?$AAe?$AAr?$AA?5?$AAt?$AAo?$AA?5?$AAe?$AAx?$AAi?$AAt?$AA?3?$AA?$AA@
CONST	SEGMENT
??_C@_1DK@KBDHHII@?$AAi?$AAn?$AAp?$AAu?$AAt?$AA?5?$AAa?$AAn?$AAy?$AA?5?$AAc?$AAh?$AAa?$AAr?$AAa?$AAc?$AAt?$AAe?$AAr?$AA?5?$AAt?$AAo?$AA?5?$AAe?$AAx?$AAi?$AAt?$AA?3?$AA?$AA@ DB 'i'
	DB	00H, 'n', 00H, 'p', 00H, 'u', 00H, 't', 00H, ' ', 00H, 'a', 00H
	DB	'n', 00H, 'y', 00H, ' ', 00H, 'c', 00H, 'h', 00H, 'a', 00H, 'r'
	DB	00H, 'a', 00H, 'c', 00H, 't', 00H, 'e', 00H, 'r', 00H, ' ', 00H
	DB	't', 00H, 'o', 00H, ' ', 00H, 'e', 00H, 'x', 00H, 'i', 00H, 't'
	DB	00H, ':', 00H, 00H, 00H			; `string'
CONST	ENDS
;	COMDAT ??_C@_1FM@CLOJACEI@?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?5?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?3?$AA?$CF?$AAd?$AA?0?$AA?5?$AAp?$AAM?$AAe?$AAm?$AAo?$AAr?$AAy?$AA?5?$AAv?$AAa?$AAl?$AAu?$AAe?$AA?5@
CONST	SEGMENT
??_C@_1FM@CLOJACEI@?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?5?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?3?$AA?$CF?$AAd?$AA?0?$AA?5?$AAp?$AAM?$AAe?$AAm?$AAo?$AAr?$AAy?$AA?5?$AAv?$AAa?$AAl?$AAu?$AAe?$AA?5@ DB 's'
	DB	00H, 'i', 00H, 'z', 00H, 'e', 00H, 'o', 00H, 'f', 00H, ' ', 00H
	DB	'v', 00H, 'o', 00H, 'i', 00H, 'd', 00H, ' ', 00H, '*', 00H, ':'
	DB	00H, '%', 00H, 'd', 00H, ',', 00H, ' ', 00H, 'p', 00H, 'M', 00H
	DB	'e', 00H, 'm', 00H, 'o', 00H, 'r', 00H, 'y', 00H, ' ', 00H, 'v'
	DB	00H, 'a', 00H, 'l', 00H, 'u', 00H, 'e', 00H, ' ', 00H, 'i', 00H
	DB	's', 00H, ' ', 00H, '0', 00H, 'x', 00H, '%', 00H, '0', 00H, '1'
	DB	00H, '6', 00H, 'p', 00H, '.', 00H, 0dH, 00H, 0aH, 00H, 00H, 00H ; `string'
CONST	ENDS
PUBLIC	__$ArrayPad$
PUBLIC	wmain
EXTRN	__GSHandlerCheck:PROC
EXTRN	__security_cookie:QWORD
;	COMDAT pdata
; File e:\app\vc9\win64test\win64test\win64test.cpp
pdata	SEGMENT
$pdata$wmain DD	imagerel $LN3
	DD	imagerel $LN3+129
	DD	imagerel $unwind$wmain
pdata	ENDS
;	COMDAT xdata
xdata	SEGMENT
$unwind$wmain DD 031b19H
	DD	0260109H
	DD	03002H
	DD	imagerel __GSHandlerCheck
	DD	0120H
; Function compile flags: /Ogtpy
xdata	ENDS
;	COMDAT wmain
_TEXT	SEGMENT
ReadBuf$ = 32
__$ArrayPad$ = 288
argc$ = 320
argv$ = 328
wmain	PROC						; COMDAT

; 8    : {

$LN3:
	push	rbx
	sub	rsp, 304				; 00000130H
	mov	rax, QWORD PTR __security_cookie
	xor	rax, rsp
	mov	QWORD PTR __$ArrayPad$[rsp], rax

; 9    : 	void * pMemory;
; 10   : 	TCHAR ReadBuf[128];
; 11   : 
; 12   : 	pMemory = malloc(0x100000);

	mov	ecx, 1048576				; 00100000H
	call	QWORD PTR __imp_malloc

; 13   : 
; 14   : 	_tprintf(_T("sizeof void *:%d, pMemory value is 0x%016p.\r\n"), sizeof(pMemory), pMemory);

	lea	rcx, OFFSET FLAT:??_C@_1FM@CLOJACEI@?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?5?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?3?$AA?$CF?$AAd?$AA?0?$AA?5?$AAp?$AAM?$AAe?$AAm?$AAo?$AAr?$AAy?$AA?5?$AAv?$AAa?$AAl?$AAu?$AAe?$AA?5@
	mov	edx, 8
	mov	r8, rax
	mov	rbx, rax
	call	QWORD PTR __imp_wprintf

; 15   : 
; 16   : 	free(pMemory);

	mov	rcx, rbx
	call	QWORD PTR __imp_free

; 17   : 
; 18   : 	/* Just wait for test purpose */
; 19   : 	_tprintf(_T("input any character to exit:"));

	lea	rcx, OFFSET FLAT:??_C@_1DK@KBDHHII@?$AAi?$AAn?$AAp?$AAu?$AAt?$AA?5?$AAa?$AAn?$AAy?$AA?5?$AAc?$AAh?$AAa?$AAr?$AAa?$AAc?$AAt?$AAe?$AAr?$AA?5?$AAt?$AAo?$AA?5?$AAe?$AAx?$AAi?$AAt?$AA?3?$AA?$AA@
	call	QWORD PTR __imp_wprintf

; 20   : 	_tscanf_s(_T("%s"), ReadBuf);

	lea	rdx, QWORD PTR ReadBuf$[rsp]
	lea	rcx, OFFSET FLAT:??_C@_15GANGMFKL@?$AA?$CF?$AAs?$AA?$AA@
	call	QWORD PTR __imp_wscanf_s

; 21   : 
; 22   : 	return 0;

	xor	eax, eax

; 23   : }

	mov	rcx, QWORD PTR __$ArrayPad$[rsp]
	xor	rcx, rsp
	call	__security_check_cookie
	add	rsp, 304				; 00000130H
	pop	rbx
	ret	0
wmain	ENDP
_TEXT	ENDS
END

运行汇编器编译如下:

ml64  /c Win64Test.asm
Microsoft (R) Macro Assembler (x64) Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

 Assembling: Win64Test.asm
Win64Test.asm(87) : error A2006:undefined symbol : FLAT
Win64Test.asm(103) : error A2006:undefined symbol : FLAT
Win64Test.asm(109) : error A2006:undefined symbol : FLAT
Win64Test.asm(46) : error A2006:undefined symbol : $LN3
Win64Test.asm(47) : error A2006:undefined symbol : $LN3

可以看见,ml64汇编器不支持FLAT关键字。另外,从错误输出可以看到,ml64汇编器也不支持后向引用,$LN3符号就是后向引用!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值