ARM 上的 Windows RT 本机代码调用约定是什么?

2024-02-12

我找不到任何有关 Visual Studio C++ 使用的 Windows RT on ARM 调用约定的文档。微软用的是ARM吗AAPCS http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf?

如果 Microsoft 对 ARM 上的 Windows RT 使用 AAPCS/EABI,那么它是否也使用ARM 的 C++ ABI http://infocenter.arm.com/help/topic/com.arm.doc.ihi0041d/IHI0041D_cppabi.pdf(源自 Itanium C++ ABI)?也许甚至是ARM异常处理ABI http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf?

ARM 上的 Windows RT 使用的调用约定与其他(嵌入式)ARM Windows 变体使用的调用约定是否不同?

是否有可靠的方法通过预定义的编译器宏来检测 ARM 上的 Windows RT?

更新:添加了有关 C++ ABI 的问题。


与 Windows CE(使用原始APCS http://infocenter.arm.com/help/topic/com.arm.doc.dui0041c/BGBGFIDA.html又名旧 ABI),ARM 上的 Windows RT 使用 EABI。更具体地说,该变体使用浮点寄存器来传递浮点数据和 8 字节堆栈/参数对齐。

如果我采用以下函数:

int g(float x) {
  return x;
}

并用VS2012的ARM编译器编译它,我得到以下程序集:

|g| PROC
    vcvt.s32.f32 s0,s0
    vmov        r0,s0
    bx          lr
    ENDP  ; |g|

你可以看到它正在使用S0并不是R0为了论证。

VS2008 中的一个(可用于针对较旧的 Windows CE 版本)会产生以下结果:

str     lr, [sp,#-4]!
ldr     r3, =__imp___stoi
ldr     r3, [r3]
mov     lr, pc
bx      r3
ldr     pc, [sp],#4

此代码调用辅助函数来执行转换。

Windows Compact 7 附带的 Windows CE 编译器支持旧的调用约定(MS 称为“cdecl”)和 EABI。看Platform Builder 7 中的新增功能 http://download.microsoft.com/download/2/4/A/24A36661-A629-4CE6-A615-6B2910A1367A/What%27s%20New%20in%20Platform%20Builder.pdf.

EDIT: 刚才注意到你添加了一个关于 C++ 的问题。 Microsoft 不使用 Itanium 风格的 C++ ABI,因为它们的实现早于它。您可以在我的 OpenRCE 文章中了解 Microsoft 的实现(1 https://www.openrce.org/articles/full_view/21, 2 https://www.openrce.org/articles/full_view/23)和后续侦察演示 http://www.hexblog.com/?p=704。另请参阅设计师 Jan Gray 的原始描述:PDF https://www.openrce.org/articles/files/jangrayhood.pdf.

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

ARM 上的 Windows RT 本机代码调用约定是什么? 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • dplyr 滞后于列值中的 n

    是否可以将列值用作n in a dplyr 滞后功能 可重现的例子 DF lt data frame V runif 1000 min 100 max 100 nlag as integer runif 1000 min 1 max 10
  • AWS负载均衡器和维护页面

    我正在使用带有 3 个 EC2 服务器的 AWS 负载均衡器 并且我尝试在站点维护时提供维护页面 该页面需要返回 503 HTTP 代码 因为它是维护模式的正确代码 可以防止 SEO 可能出现的问题 当我从任何服务器返回 503 代码时 负
  • 如何在django中保存多对多关系

    如何为具有多对多字段的 Django 模型创建对象 https stackoverflow com questions 6996176 how to create an object for a django model with a ma
  • 如何绕过 Marshal.Copy(32 位)长度限制?

    我正在尝试在托管 C 和非托管 C Win32 代码之间来回移动数据 我可以用Marshal Copy它工作得很好 直到数据集变得更大 gt 2GBMarshal Copy有符号 32 位 int 2GB 长度限制 知道如何解决这个问题吗
  • 如何在 django 管理界面中添加带有超链接的自定义列?

    我有一个 django 管理界面 在模型列表中我想要一个自定义列 该列将是使用其中一个字段值的超链接 基本上 模型的字段之一是 url 我希望该列在可点击的超链接中包含该 URL 该链接需要在其前面添加额外的 URL 作为其在模型字段中的相
  • 以编程方式获取无线接入点列表

    这是一个一般性的编程问题 尽管我更喜欢Node js 齿轮解决方案 是否有任何 JavaScript 或 NET API 用于检索无线接入点列表及其相关数据 SSID MAC 地址等 我用了篡改数据看看当您与 Firefox 共享您的位置并
  • strcmp 不工作

    我知道这可能是一个完全新手的问题 我已经很长一段时间没有接触过 C 了 但是有人可以告诉我为什么这不起作用吗 printf Enter command bzero buffer 256 fgets buffer 255 stdin if s
  • 我必须将 .aar 文件作为库添加到 Android studio 的子项目中。它给了我一个错误。

    我已将 aar 文件添加到子项目中的 libs 文件夹中 并将存储库指定为 repositories mavenCentral mavenLocal flatDir dirs libs 在这个子项目的build gradle中 我还需要在主
  • Apollo 的 Check-and-run-apollo-codegen.sh 不起作用?

    我正在尝试在我的 iOS 项目中安装 Apollo 我按照此处的说明进行操作 https www apollographql com docs ios installation html https www apollographql co
  • 为什么我的所有函数都在运行,即使我只调用一个模块中的一个函数?

    我有以下代码Test fs file namespace Testing module test1 let Run printfn Test1 module test2 let Run printfn Test2 In my Program
  • 为什么 Hibernate 转而使用 LONG 而不是 CLOB?

    看起来 Hibernate 开始使用LONG版本 3 5 5 我们从 3 2 7 升级 中的数据类型而不是CLOB为 的财产type text 这导致了以下问题LONGOracle 中的数据类型是一种过时的数据类型 请参阅http www
  • OnItemClickListener 使用 ArrayAdapter 用于 ListView

    我想要为使用 ArrayAdapter 创建的 ListView 提供一个 OnItemClickListener 这是我用来创建它的代码 List
  • 我想以一种不同的方式分解变量[重复]

    这个问题在这里已经有答案了 我有这个变量 var A B C D 1 2 3 4 5 6 E F 我想分解它以获得以下数组 array 0 gt A 1 gt B 2 gt C 3 gt D 4 gt 1 2 3 4 5 6 5 gt E
  • MySql UTF 编码

    java sql SQLException Incorrect string value xAC xED x00 x05sr for column xxxx 该列是 MYSQL 中的长文本 具有 utf8 字符集和 utf8 general
  • MySQL 警告:错误的字符串值:'\x96

    我正在尝试导入 CVS 文件 但收到此警告 1366 错误的字符串值 列的 x96 PART 我在某处读到这是关于 4 位 utf8 字符的 但是将表和列的排序规则更改为 utf8mb4 也不起作用 The hex 96大概是latin1编
  • Symfony2:在表单集合中自定义表单标签

    我正在尝试自定义在子表单中生成的表单标签 我想显示特定比赛周中包含的足球比赛 如下所示 Fixture 1 Manchester United 0 1 Arsenal Fixture 2 Chelsea 2 1 Liverpool 我的表单
  • 如何附加到 Visual Studio Code 中的特定进程

    当我在 VSC 中调试 net core 项目时 系统会要求我提供要附加的进程 ID 这显示了一长串正在运行的进程 我可以在其中键入或滚动以查找特定进程 每次我想调试时如何附加到特定的同一进程 在 Visual Studio 代码中 您的调
  • 每 40 毫秒执行一次 php 脚本?

    有没有办法每 40 毫秒执行一次 php 脚本 我不知道cronjob是否是正确的方法 因为每秒25次需要大量CPU 那么 如果 php 不是正确的语言 我应该使用什么语言 我正在制作一个在线游戏 但我需要一些东西来处理游戏中发生的事情 移
  • 在远程服务器上安装 Xdebug (bluehost.com)

    我已经在我的 mac 上安装并运行了 xdebug 但我似乎无法将其安装在我的服务器 bluehost com 服务器 上 我已经尝试了很多年 并希望得到任何可能的帮助 基本上我已经下载了 xdebug so 并将其安装在我的 public
  • ARM 上的 Windows RT 本机代码调用约定是什么?

    我找不到任何有关 Visual Studio C 使用的 Windows RT on ARM 调用约定的文档 微软用的是ARM吗AAPCS http infocenter arm com help topic com arm doc ihi