- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图准确理解异常表 (.arm.extab
) 的工作原理。我知道这取决于编译器,所以我会限制自己使用 armcc(因为我使用的是 Keil)。
表中的典型条目类似于:b0aa0380 2a002c00 01000000 00000000
据我所知,第一个词编码了个性例程的指令,而第三个词是 R_ARM_PREL31
重定位到 catch block 的开头。
让我感到困惑的是第二个词——它似乎被分成了 2 个短裤,第二个短裤测量了距离 throw 功能开始的一段距离,但我不确定到底是什么(也不知道第一个短裤是什么确实)。
是否有任何地方记录了这些条目的结构?
我找到了 2 个相关文档,但据我所知,它们没有编译器相关的信息,因此它们还不够:
最佳答案
如果您碰巧错过了字节顺序,则适用以下内容。即使原始示例中的字节顺序正确,某些信息也可能有用。
extab
和 exidx
是由 AAPCS 添加的部分,它是较新的 ARM ABI。
对于较旧的 APCS,帧指针或 fp
是事件例程返回主例程(或 _start
)的链接的根。使用 AAPCS 记录被创建并放置在 exidx
和 extab
部分。当 fp
用作通用寄存器时,需要这些来展开堆栈(和资源)。
exidx
是例程起始地址和 extab
索引(或不能展开)的有序表。 PC
(程序计数器)可以通过表进行检查和搜索以找到相应的 extab
条目。
ARM EHABI文档的第 7 节是关于异常处理表条目的。这些是 extab
条目,您至少可以从那里开始了解更多信息。有两个定义,
紧凑 模型将用于大多数“C”代码。与 C++ 一样,堆栈上没有要销毁的对象。十六进制 8003aab0
给出,
1000
前导半字节,所以这是紧凑的。0000
b 为索引。 Su16—短03
h - 弹出 16 个字节,一些局部变量或填充。aa
h - 弹出 r4-r6b0
h - 完成表4,ARM定义的帧展开指令给出了每个字节的展开数据。
下一个是 0x002c002a
,它是 generic 个性例程的偏移量。接下来的四个值应该是 8.2 数据结构,它们是一个大小并且应该为零...接下来是跨度,然后是一个四字节的对象类型信息。偏移量 0x2c002a 将调用对象析构函数或某种包装器来执行此操作。
我认为所有 C++ 代码都旨在使用此通用 方法。其他方法适用于不同的语言和不是编译器。
相关问答和链接:
.cantunwind
、.vsave
等关于c++ - armcc中.arm.extab条目的结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57451208/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!