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 本机代码调用约定是什么? 的相关文章

随机推荐

  • 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