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

x64/x86-64/AMD64/ml64入门解惑 x64/x86-64/amd64/ml64 入门解惑,示意图已更新,内容已更新 阅读详情

在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符号就是后向引用!
使用VS2008在64位平台下编译代码 使用VS2008在64位平台下编译代码的说明 最近要把一个之前在32位平台下编译的项目改成64位平台,之前从来没搞过关于64位的东西,所以到处查资料,所幸搞成功了,把过程记录一下,防止以后忘记。 首先声明:64位平台无法直接调用32位dll,32平台也无法直接调用64位dll 立即下载

相关推荐

在VC2008下将32位C++内嵌汇编迁移到64位

64位Windows不支持内嵌汇编,在VC2008下将32位C++内嵌汇编迁移到64位,解决64位系统不支持内嵌汇编。

VS 2008的64位编译环境的安装和使用

作者:朱金灿来源:http://blog.youkuaiyun.com/clever1011. 安装64位编译环境 最近准备编译64位版本的程序。因为之前已经安装了VS 2008,开始以为只是使用VS 2008的安装文件添加功能即可,后来发现没这么简单。直接双击VS 2008的安装文件来安装会出现下面的错误提示:...

weixin_34248849的博客 834

组合导航(八):INS/GPS组合导航

INS/GPS组合导航1 误差反馈1.1 开环INS/GPS架构1.2 闭环INS/GPS架构2 组合导航的类型2.1 松耦合 的INS/GPS组合导航2.2 紧耦合 的INS/GPS组合导航2.3 深度耦合的 INS/GPS组合导航3 INS方程的动态误差模型4 松耦合的INS/GPS组合导航模型4.1 系统模型4.2 测量模型4.3 INS/GPS松耦合总框图5 紧耦合的INS/GPS组合导航模型5.1 系统模型5.2 测量模型 INS/GPS组合导航 对比INS与GPS导航方法,二者都有其各自的优.

weixin_43793960的博客 3万+

VS2008编写64位程序

1、首先在安装VS的时候,得安装x64编译器和工具。 2、生成—配置管理器,活动解决方案平台,选择x64 3、现在OK了,编译的程序就是x64位的了。 4、要注意的是,VS编写X64位程序不支持内嵌汇编。

十年磨一剑,霜刃未曾试! 2244

思科模拟器CIsco Packet Tracer利用三层交换机实现VLAN间路由

版权声明:如果对大家有帮助,大家可以自行转载的。 1.技术原理: 三层交换机具备网络层的功能,实现 VLAN 相互访问的原理是:利用三层交换机的路由功能,通过识别数据包的 IP 地址,查找路由表进行选路转发,三层交换机利用直连路由可以实现不同 VLAN 之间的相互访问。三层交换机给接口配置 IP 地址。采用 SVI(交换虚拟接口)的方式实现 VLAN 间互连。SVI 是指为交换机中的VLAN 创建...

qq_37992321的博客 1万+

Halcon实战:5分钟搞定灰度图转热力图(附完整代码)

本文提供了一份Halcon实战指南,详细讲解如何在5分钟内将灰度图转换为直观的热力图。通过核心代码演示了利用HSV颜色模型进行色彩映射的原理与步骤,包括图像归一化、通道构建与空间转换,并附赠了深度图可视化等进阶应用技巧,帮助工程师快速提升图像分析效果。

weixin_29240343的博客 282

vs2008下编译x64asm配置过程记录

最近由于工作需要,需要在vs2008下嵌入部分x64汇编.现将配置过程记录如下,主要参考的帖子有以下三个 参考1:https://www.cnblogs.com/talenth/p/9135626.html 参考2:https://bbs.youkuaiyun.com/topics/391816828 参考3:https://bbs.youkuaiyun.com/topics/391829884?list=lz ...

GalaxyLegend的博客 1236

实战对比:Lmcache+vllm将KVcache卸载到CPU和SSD的性能差异(附完整配置)

本文通过实战对比Lmcache与vLLM在KV Cache卸载到CPU和SSD的性能差异,详细解析了配置优化、基准测试及高级调优策略。实验显示,CPU卸载在低并发下表现优异,而SSD方案在高并发场景中更具性价比优势,为LLM推理任务提供了高效的存储解决方案。

weixin_30664051的博客 700

64汇编写程序

示例代码2.asm ;语法:ML64 extrn MessageBoxA: proc .data text     db 'Hello x64!', 0 caption  db 'My First x64 Application', 0 .code Main proc sub rsp,28h xor r9d,r9d lea r8, caption lea rdx, text xor rcx,r

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 723

UE5实战技巧:TextRender高效集成中文字体与材质优化

本文针对UE5中TextRender组件显示中文的常见问题,提供了一套完整的实战解决方案。详细讲解了如何通过手动创建字体资产、精准控制字符集来优化性能,并重点介绍了通过调整材质中的Lerp节点参数(如设为-85, 92)来解决中文字体显示残缺和边缘模糊等核心难题,帮助开发者实现高效且美观的中文文本渲染。

weixin_28040125的博客 379

Unity3D Pico VR 手势交互实战:基于MRTK3实现抓握与射线控制

本文针对Pico VR原生手势交互功能不足的问题,提供了基于MRTK3实现高级手势交互的实战解决方案。通过将MRTK3成熟的交互框架与Pico的手势追踪能力相结合,详细讲解了从环境配置、SDK导入、核心适配到真机调试的全流程,帮助开发者高效实现抓握与射线控制等复杂交互,有效提升Pico VR应用的开发效率与体验。

weixin_29011667的博客 391

windows C/C++系列 64位汇编

64位汇编语言如何集成到VS中

王马的博客 2408

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构

本文记录的是基于RepVit的YOLOv11轻量化改进方法研究。RepVit的网络结构借鉴ViT的设计理念,通过分离的token mixe和减少推理时的计算和内存成本,同时减少扩展比率并增加宽度,降低延迟,并通过来弥补参数大幅减少的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和五种模型,以满足不同的需求。

Limiiiing的博客 2975

MASM32连接程序时error A2006: undefined symbol : u

MASM32中的SYSTEM_INFO结构定义代码中省略了微软官网其中的DUMMYUNIONNAME联合体和DUMMYSTRUCTNAME结构体,难怪使用.DUMMYUNIONNAME.DUMMYSTRUCTNAME.wProcessorArchitecture来访问在连接时会出错,奇怪的是出错信息里没有提示DUMMYUNIONNAME.DUMMYSTRUCTNAME未定义,而是莫明奇妙的u。SYSTEM_INFO中的wProcessorArchitecture存储了已安装操作系统的处理器体系结构。

Purpleendurer@优快云 2139

组态王与DLT645-2007电能表通讯调试总结

组态王与电力协议DLT 645-2007调试总结 DLT 645-2007是多功能电能表通信协议,该标准由中国电力企业联合会2006年提出,该协议为主-从结构的半双工通信方式。手持单元或其它数据终端为主站,多功能电能表为从站。每个多功能电能表均有各自的地址编码。通信链路的建立与解除均由主站发出的信息帧来控制。帧是传送信息的基本单元,每帧由帧起始符、从站地址域、控制码、数据域长度、数据域、帧信息纵向校验码及帧结束符7个域组成,每部分由若干字节组成,帧格式如图1所示。 1.确定设备地址 地址域由 6 个字节构

逍遥子的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...

跳转指令分三类: 一、无条件跳转: JMP; 二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转); 三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS...

weixin_34329187的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[汇编]伪指令(一)

[汇编]伪指令(一) 段定义伪指令     段定义伪指令是表示一个段开始和结束的命令,80x86有两种段定义的方式:完整段定义和简化段定义,分别使用不同的段定义伪指令来表示各种段。   1 完整的段定义伪指令   完整段定义伪指令的格式如下:   段名 SEGMENT     .     .     .   段名 ENDS   段名由用户命名。对于数据段、附加段

极品小肥羊的博客 2135

汇编语言(四)——编程语法入门

0.第一个汇编程序 汇编程序几乎提供了全部信息的语言。程序员可以看到正在发生的所有事情,甚至包括 CPU 中的寄存器和标志!但是,在拥有这种能力的同时,程序员必须负责处理数据表示的细节和指令的格式。程序员工作在一个具有大量详细信息的层次。现在以一个简单的汇编语言程序为例,来了解其工作过程。 下面这个程序是执行两个数相加,并将结果保存在寄存器中的代码:(没运行起来) .data ;此为数据区 sum DWORD 0 ...

图像学习之旅 2365

VS2010 X64汇编(使用了非标准扩展: 不支持在此结构上使用“_asm”关键字解决方法)

原因:VS x64平台不支持内联汇编 解决方法 步骤1.新建->常规->空项目 2.项目点击右键,选择生成自定义 3.选中masm,确定 4.项目->右键->添加新建项 5.选择text文件,文件扩展名为.asm 6.项目->右击->属性->配置属性->链接器->系统->子系统

日月忽其不淹兮,春与秋其代序 认知即成长 2万+
上一篇: 最小的C语言Hello,world程序
下一篇: DOS运行环境回顾
二进制脑袋
博客等级 码龄25年 25粉丝 21原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值