.Net AOT--Win11搭建和编译 X64 汇编

楔子

windows11上编译x64汇编,很多人不太了解。甚至搞出DOSBox这种几亿年前的老古董,还有的专门搞些Linux下面的工具来搞到Windows上运行。其实这些大可不必,也没这么麻烦。微软技术出身,基本上工具链齐全。

本篇来看下Windows简单的搭建X64汇编环境,非常简单。

作用?

因为.Net 7 AOT的编译就是这么搞的,ILC通过被封装的ObjWriter.dll来操纵LLVM调用ml64生成目标文件。来具体来看看。



ml64

这个工具是微软的新一代x64汇编编译工具,主要是编译.Obj。打开VS命令行工具:x64 Native Tools,它可以操纵前者。

代码:

includelib User32.lib
extern MessageBoxA:Proc 
.datag_CT db "Zhu Yoa Nei Rong!",0g_BT db "Biao Ti",0
.code
Winmain Procsub rsp, 68hmov rcx, 0mov rdx,offset g_CTmov r8,offset g_BTxor r9, r9call MessageBoxAadd rsp, 68hret
Winmain Endp
end

编译成目标文件

把上面的代码保存为test.asm

然后用命令:ml64 /c test.asm
编译成 test.obj文件。

链接成exe

通过link的子系统来连接下这个Winmain入口函数:

link /subsystem:windows /entry:Winmain test.obj

结果:

最后得到了一个exe文件,双击就会弹出对话框。

ba4eac1ea11e06d5c75ef6808dc50ed4.png

结尾:

通过上面的过程以及结果,可以看到了一个完整的AOT编译链。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装mongoDB遇见的一个路径问题

如果安装路径不存在,则不会解压EXE软件! 安装monogoDB后,它不会自动添加执行路径! 意思就是安装路径是D盘下面的mongoDB文件夹,假如不存在这个文件夹,则不会安装成功 你需要添加路径: 你可以利用…

【Filecoin源码仓库全解析】第一章:搭建Filecoin测试节点

2019.2.14 情人节,Filecoin项目开放了核心源码仓库go-filecoin,并更新了 filecoin-project organization下的诸多核心成果,这意味着,Filecoin已然度过了最困难的难点攻关期,进入到了全民公测阶段。 本系列文章将协助大…

DNS 代理?Pipy:这我也可以

Pipy 是个可编程代理,曾经我们做过 TCP/HTTP 代理、MQTT 代理、Dubbo 代理、Redis 代理、Thrift 代理。前几天有人问 DNS[1] 的代理能不能做?当然可以,而且 DNS 代理已经应用在 跨集群流量调度 中,文末经对此进行简单地介绍。阅读…

如何在Windows中快速轻松地将文件发送到SkyDrive

We have already shown you how you can share external folders with your SkyDrive, but what if you actually want to copy a file or folder into your SkyDrive folder? Of course copying and pasting is nowhere near geeky enough, so here’s how to add a SkyDrive…

windows删除桌面ie_从Windows 8“开始”屏幕启动IE的桌面版本

windows删除桌面ieThere are two versions of Internet Explorer in Windows 8, one you can only launch from the Start Screen and the Desktop version which you can only launch from the Desktop. Lets look at how we can launch the Desktop version from the Start S…

.NET Conf China 2022 圆满落幕,明年再见!

时光飞快,还记得本月的第一个周末吗?12月3日-12月4日,相信对于 .NET 开发者来说一定记忆犹新!.NET Conf China 2022 于12月4日圆满落幕。八方助力共谱大会盛宴.NET Conf China 2022 是一个社区性质的技术峰会,本次大会…

马哥linux高薪中级-DNS

第一章 简介一、DNSdomain name server,用来将计算机名称或者域名解析成ip地址的服务协议。用户在使用域名访问时会先通过DNS服务请求域名对应的ip地址,然后缓存下来,然后才通过ip地址进行通信。最初域名解析是通过HOSTS文件来静态绑定的。DN…

愚蠢的怪胎技巧:通过命令行管理SkyDrive

Originally launched as an April Fools prank by the Microsoft SkyDrive team, SkyCMD turned out to be a really geeky way to manage files and folders on your SkyDrive from the command line. Lets take a quick look. SkyCMD最初是由Microsoft SkyDrive团队以愚人节恶…

关于vue父子组件之间事件触发及数据传递问题

父组件:1,引入子组件2,ref 3,需要更新数据操作的地方 子组件:1,定义同名事件,拿到数据执行相关操作

.NET Core如何通过认证机制访问Kafka?

【.NET Core】| 总结/Edison Zhou大家好,我是Edison。最近有一个ASP.NET Core使用认证机制访问Kafka的需求,加之我们又使用了CAP这个开源项目使用的Kafka,于是网上寻找了一番发现对应资料太少,于是调查了一番,做了如下…

JQuery框架2.位置属性|筛选方法|事件

1、位置属性 jquery的css position获取匹配元素相对父元素的偏移位置;offset获取匹配元素在当前视口的相对偏移,返回的对象包含两个整型属性:top 和 left $("p").offset() $(div).offset().top $("p").offset().left scrollTop获取匹…

jenkins没安装git报错

Jenkins新建项目中源码管理使用Git时遇到如下问题: 在安装jenkins服务器上查看一下git版本,可能没有安装git 也可能是git版本太低 [rootlocalhost nnnnn]# git --version git version 1.8.3.1 yum安装的版本太低了 打开Jenkins的 主页面 > 系统管理 …

mac 不能连接wi-fi_如何在Mac OS X中查看当前的Wi-Fi连接速度

mac 不能连接wi-fiEver since I’ve been using my new MacBook Air, I’ve been befuddled by how to do some of the simplest tasks in Mac OS X that I would normally do from my Windows laptop—like show the connection speed for the current Wi-Fi network. So am I…

User Stories - 最佳实践 (Best Practices)

在转向敏捷之后,很多团队开始使用“用户故事”一词。用户故事是一种简单而优雅的技术,可以收集客户需求。然而,它需要一定的理解和实践才能用User Stories构建出色的软件。 让我们仔细看看用户故事是什么以及如何使用这种技术取得成功。 什么…

聊一聊promise的前世今生

promise的概念已经出现很久了,浏览器、nodejs都已经全部实现promise了。现在来聊,是不是有点过时了? 确实,如果不扯淡,这篇随笔根本不会有太多内容。所以,我就尽可能的,多扯一扯,聊一…

chromebook刷机_如何在Chromebook上切换(或离开)Canary频道

chromebook刷机Just like Chrome, Google offers multiple channels of the Chrome OS operating system. In addition to the standard Stable, Beta, and Developer channels you can choose from on the About page, there’s a special bleeding-edge Canary channel. The …

C++--day05

目录: 1. C的提高 1-131P 时间七天 2. C的基础 132-286P 时间八天 3. C的提高 287-378P 时间五天 4. C/C的数据结构 379-482P 时间五天 5. C/C的设计模式基础 483-540P 时间三天 视频资料:https://www.bilibili.com/video/av27904891?fromsearch&seid108915144…

libreoffice_如何更改您在LibreOffice中可以撤消的操作数

libreofficeIn LibreOffice programs, you can undo one action after another…to a point. The default number of actions you can undo is 100, but that number is easy to change. 在LibreOffice程序中,您可以撤消一个动作,直到某个点。 您可以撤消…

远程连接服务器出现身份验证错误 要求的函数不受支持

来源:https://www.cnblogs.com/lindajia/p/9021082.html 以往发布程序到服务器都没问题。今天远程桌面连接到服务器,突然出现了异常!异常信息为: 在网上看到有多种解决方案:发现有种修改注册表的方式很简单。 详细步骤…

CDH集群安装配置(五)- Cloudera Manager Server

在线安装 sudo yum install cloudera-manager-daemons cloudera-manager-server 离线安装 资源下载地址 https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/ 上次下面资源包到cdh1节点 cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm cloudera-manager-s…