编译 MSVC2012 的 64 位 hello world 程序集输出

2024-01-03

我想修改 MSVC 生成的 C++ 代码中的一些汇编代码行。我想这样做的原因可以在这里找到对于高度优化的矩阵乘法代码,MSVC 和 GCC 之间的性能差异 https://stackoverflow.com/questions/21134279/difference-in-performance-between-msvc-and-gcc-for-highly-optimized-matrix-multp

所以我尝试用汇编输出来朗姆酒masm,但它得到了一堆错误。相反,我只是尝试了一个“hello world”示例。

include <stdio.h>
int main() {
    printf("asdf\n");
}

使用 /FA /O2 以 64 位模式编译它...请参阅下面的输出

当我运行 ml64 /c Source.asm 时出现以下错误

Source.asm(35) : error A2006:undefined symbol : FLAT
Source.asm(17) : error A2006:undefined symbol : $LN3
Source.asm(18) : error A2006:undefined symbol : $LN3

在花了太多时间之后我发现了这两个线程http://social.microsoft.com/Forums/en-US/e0e541d9-5421-4297-8018-7c6a0f12ae62/compile- assembly- generated-by-cl?forum=whatforum http://social.microsoft.com/Forums/en-US/e0e541d9-5421-4297-8018-7c6a0f12ae62/compile-assembly-generated-by-cl?forum=whatforum and http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4aad9e70-6bb8-4622-a5d9-a3b07b51fc7f/c-compiler-creates-assembler-directives-that-ml64-doesnt-understand?forum= Windows SDK http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4aad9e70-6bb8-4622-a5d9-a3b07b51fc7f/c-compiler-creates-assembler-directives-that-ml64-doesnt-understand?forum=windowssdk微软说

在使用 Microsoft C/C++ 编译器针对 x64 开展工作之前,我们呼吁不再支持汇编 C/C++ 生成的列表文件。换句话说,列表文件仅供参考。

有人可以解释另一种方法来从 MSVC2012 中的 C++ 代码生成汇编代码,以便我可以修改几行然后重新编译/汇编它吗?

Edit:这里有一些更有用的评论cl.exe 和 ml.exe 的问题 https://stackoverflow.com/questions/7488056/a-problem-with-cl-exe-and-ml-exe/7495413#7495413 and MS Visual Studio 2010如何使用.asm生成的文件 https://stackoverflow.com/questions/7733091/ms-visual-studio-2010-how-to-use-the-asm-generated-file

这是组装输出

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

;include listing.inc

INCLUDELIB OLDNAMES

PUBLIC  ??_C@_05DBBGCHPA@asdf?6?$AA@            ; `string'
EXTRN   __imp_printf:PROC
EXTRN   __security_check_cookie:PROC
;   COMDAT ??_C@_05DBBGCHPA@asdf?6?$AA@
CONST   SEGMENT
??_C@_05DBBGCHPA@asdf?6?$AA@ DB 'asdf', 0aH, 00H    ; `string'
CONST   ENDS
PUBLIC  main
;   COMDAT pdata
pdata   SEGMENT
$pdata$main DD  imagerel $LN4
    DD  imagerel $LN4+24
    DD  imagerel $unwind$main
pdata   ENDS
;   COMDAT xdata
xdata   SEGMENT
$unwind$main DD 010401H
    DD  04204H
xdata   ENDS
; Function compile flags: /Ogtpy
;   COMDAT main
_TEXT   SEGMENT
main    PROC                        ; COMDAT
; Line 2
$LN4:
    sub rsp, 40                 ; 00000028H
; Line 3
    lea rcx, OFFSET FLAT:??_C@_05DBBGCHPA@asdf?6?$AA@
    call    QWORD PTR __imp_printf
; Line 4
    xor eax, eax
    add rsp, 40                 ; 00000028H
    ret 0
main    ENDP
_TEXT   ENDS
END

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译 MSVC2012 的 64 位 hello world 程序集输出 的相关文章

随机推荐

  • 在 React 中使用 Three.js obj-loader

    在第一次尝试中 我使用了从 node modules 的正常导入 之后甚至使用了 minifided lib 但没有成功 在下一步中 我使用了旧版本的三 js 库无需任何更改 我找到了导入三个 obj loader 模块的示例并尝试了它 但
  • 如何在 java 8 流 api 中使用 guava 谓词作为过滤器

    Guava 谓词 http docs guava libraries googlecode com git javadoc com google common base Predicate html不能直接用作 java 8 流 API 的
  • Xpath:选择直接子元素

    我有一个如下所示的 XML 文档
  • 如何在 C++ 中实现通用哈希函数

    我正在尝试通过模板在 C 中实现 HashTable 这是签名 template
  • 工具提示中的高图表总计

    我正在使用此代码来显示共享工具提示 tooltip crosshairs true shared true headerFormat KW point key table pointFormat tr td series name b b
  • 如何用 Angular CLI 替换 SCSS 文件?

    Angular CLI 提供了以下可能性 替换文件 https angular io guide build configure target specific file replacements构建项目时 我想使用此功能将具有默认样式的
  • Rxswift Observable.of 和 Observable.create 有什么区别

    我是 rxSwift 的新手 我在创建 Observable 时发现了一些区别Observable of and Observable
  • 如何自动判断项目使用了哪些PHP扩展?

    有没有办法自动找出您拥有源代码的特定项目使用了哪些 PHP 扩展 当将网站从一台服务器迁移到另一台服务器时 我经常想知道应该启用哪些 PHP 扩展才能使网站正常运行 是的 如果项目使用 Docker 或有详尽的安装指南 则此用例可能无关紧要
  • GHC 的 zlib 构建错误

    我正在使用具有以下配置的虚拟机 Arch Linux 3 0 ARCH 内核 GHC 7 0 3 cabal 安装 0 10 2 阴谋集团库 1 10 1 0 当我尝试使用 cabal 构建 zlib 时 cabal install zli
  • 在 Compass 中使用数据 URI 的新 Bulletproof @font-face 语法

    我正在使用指南针 font face与inline font files and font files为了创造一些沿着新的 Bulletproof Font Face 语法 http www fontspring com blog the
  • CollectionAssert.AreEquivalent 与 Assert.Equals()

    public void NumericListCanBeSorted var sorted sort SortNumbers nums Assert AreEqual sorted nums public List
  • 通过 VBA 终止所有资源管理器实例 - Excel

    Private Sub CommandButton1 Click Dim objWMI As Object objProcess As Object objProcesses As Object Set objWMI GetObject w
  • 按空格数拆分 NSString

    我有一个NSString包含一些由未知数量的空格字符分隔的值 例如 NSString line 1 2 3 我想分割NSString进入一个NSArray像这样的值 1 2 3 将组件分隔开 并删除所有对象 例如 从结果数组中 NSStri
  • 使用VBA检查日期是否在两个日期之间

    因此 我浏览了该网站上的许多问题来回答这个问题 并且我相信我的代码是正确的 但它仍然无法正确验证 但我不明白为什么 我正在尝试做的事情 我在 Excel 中使用用户表单 我有一个日期输入框和一个日历选择器 当其中一个发生更改时 另一个也会更
  • 使用 C# 启动和停止服务[重复]

    这个问题在这里已经有答案了 我想停止一项服务 然后在停止后重新启动该服务 我正在使用 C 并生成了以下代码 问题是 如果服务启动 它将停止服务但不会重新启动服务 如果下次调用该函数时服务停止 它将仅启动该服务 string strCmdTe
  • 什么是 C++ Mixin 风格?

    我刚刚看到这个关键词C Mixin Style 有人知道这是什么吗 In 这个帖子 https stackoverflow com questions 543262 is mixin considered a design pattern
  • 如何强制Python字典收缩?

    我在其他语言中也经历过这种情况 现在我在Python中遇到了同样的问题 我有一本包含很多 CRUD 操作的字典 人们会认为从字典中删除元素应该会减少它的内存占用 事实并非如此 一旦字典的大小增加 通常加倍 它永远不会 释放分配的内存 我已经
  • 如何在 Typescript 中使用 Google libphonenumber?

    我想在我的 Angular 项目中使用 Typescript 使用 Google libphonenumber 我在互联网上搜索了很多 找到了很多东西 但找不到任何可以满足我的目的的东西 大多数可用内容都显示了 JavaScript 代码
  • 如何使用 Moovweb SDK 在 Javascript 中移动 AJAX 内容?

    因此 有时在使用 Moovweb SDK 时 客户端会在内容点中进行 AJAX 但它会位于不正确的区域 我无法使用 tritium 来移动此内容 因为我想要将其移动到的区域是在页面加载后插入的 例子 div class where i wa
  • 编译 MSVC2012 的 64 位 hello world 程序集输出

    我想修改 MSVC 生成的 C 代码中的一些汇编代码行 我想这样做的原因可以在这里找到对于高度优化的矩阵乘法代码 MSVC 和 GCC 之间的性能差异 https stackoverflow com questions 21134279 d