了解 ARM 程序集说明和 C/C++ 指针
Understanding ARM assembly instructions and C/C++ pointers
我正在尝试解码在地址上运行的汇编指令,16位ARM拇指指令。所以,我认为我不应该关心数据类型。因为我只对那里的 16 位存储感兴趣。我有单独的解释器来理解这些位,无论如何我都不想将其用作数据。
如果我有一个指针p
并且我想读取 4 个字节(即从p
到p+3
地址的数据)。将p
转换为int *
和取消引用是否会为我提供数据?
你有一个指向某个类型的指针。指针算术和取消引用支持数据类型。
请注意,您只能通过具有兼容类型或字符指针的左值表达式访问任何变量(对象)的存储值。盲目地强制指针强制转换为其他不兼容的类型并尝试取消引用,这将违反严格的别名规则,您将面临未定义的行为。
引用C11
,第§6.5章
对象的存储值只能由具有以下 以下类型:88)
— 与对象的有效类型兼容的类型,
— 与对象的有效类型兼容的类型的限定版本,
— 一种类型,它是与 的有效类型对应的有符号或无符号类型 对象
— 一种类型,它是与 的限定版本相对应的有符号或无符号类型 对象的有效类型,
— 包含上述类型之一的聚合或联合类型 成员(递归地包括子聚合或包含的联合的成员),或
— 字符类型。
但是,您始终可以使用char *
指向任何类型并取消引用和递增(并重复)以获取字节的各个值,但您需要自己注意字节序。
相关,引用C11
,章节§6.3.2.3
[....]当指向对象的指针转换为指向字符类型的指针时, 结果指向对象的最低寻址字节。的连续增量 结果(不超过对象的大小)生成指向对象剩余字节的指针。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错