【摘自CSDN】
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int )a+1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;
}
第一个,&a 取得地址以后加一的操作,指针增加了sizeof(a)这么多的绝对地址。这应该是指针加了20,然后一个-1有减去了4,这样相当于指针的绝对地址加了16,指向的就是a[4]的首地址
第二个,加的是绝对内存地址,假如原来是0x0001,加完了以后是0x0002
然后再考虑pc的小端存储(little endian)
a 的内存存放
地址: 00 01 02 03 04 05 06 07
数据: 01 00 00 00 02 00 00 00
a = 00;
ptr2 = (int*)((int)a + 1);
ptr2 = 01;
所以ptr2指向的内存为
地址: 01 02 03 04
数据: 00 00 00 02
即*ptr2 = 0x2000000;
这是little-endian情况下。
如果是big-endian,结果不一样。
a 的内存存放
地址: 00 01 02 03 04 05 06 07
数据: 00 00 00 01 00 00 00 02
ptr2指向的内存为
地址: 01 02 03 04
数据: 00 00 01 00
*ptr2 = 0x100;
在我的机器LINUX上运行结果:
5,2000000
分享到:
相关推荐
6. 数字6的题目可能涉及到结构体,要求选手理解如何定义结构体类型,创建结构体变量,以及结构体在内存中的布局。 7. 数字7可能涵盖链表的操作,如单链表的插入、删除、遍历等,这需要选手对指针的高级应用有深入...
此题考察结构体的内存布局及类型转换。在C语言中,结构体在内存中的布局是按照成员变量的声明顺序依次排列的。当`pt`指向结构体`s`的地址时,通过`(int*)pt`将其转换为指向整数的指针,并解引用得到第一个成员变量`a...
理解它们的定义、使用方式及其内存布局是重要的知识点。 5. **预处理指令**:宏定义、条件编译等预处理指令在试题中也有所体现,考生需掌握其作用和使用规则。 6. **输入/输出**:标准输入输出函数(如scanf、...
理解它们的内存布局和访问方式,是高级C语言编程的基础。 五、预处理与文件操作 预处理指令如#define、include、条件编译等,用于在实际编译之前处理源代码。文件操作则涉及文件的打开、读写和关闭,考生应掌握...
本文将深入探讨嵌入式系统的笔试题目,涵盖C/C++的基础知识、中断处理、内存布局以及数据存储格式。 首先,我们来看一道C语言的程序分析题。程序段a中,`c=c++%5` 这样的表达式存在风险,因为它对变量`c`进行了两次...
4. **结构体与联合体**:结构体和联合体是C语言中复合数据类型,试题可能要求考生创建和操作结构体数组,理解结构体内存布局,或者使用联合体进行内存优化。 5. **函数**:函数的递归、参数传递、局部和全局变量的...
4. **结构体与共用体**:学习如何定义结构体,理解结构体内存布局,掌握结构体的动态分配和使用。 5. **内存管理**:理解栈和堆的区别,知道动态内存分配(malloc、calloc、realloc、free)以及内存泄漏问题。 6. ...
1. **C程序的基本结构**:在填空题中,提到C程序源文件的后缀名为`.c`,说明了C语言源代码文件的常规命名规则。此外,C程序至少需要包含一个主函数`main()`。 2. **逻辑运算符和位运算符**:填空题中有一道题涉及到...
4. 通过修改内存布局,可能需要进行堆溢出或栈溢出来改变指针的值。 5. 触发函数调用,执行攻击者提供的命令。 在"Pwn-BabyHeap"中,提供的libc.so.6文件是静态编译的库文件,我们可以对其进行分析,寻找关键函数的...
- **数组与指针在内存布局上的差异:** 数组是连续分配的内存区域,而指针可以指向任意位置。 **案例分析:** - **数组名示例:** 通过数组名访问数组元素时,实际上是在使用指向数组第一个元素的指针。 - **指针...
- **编程语言**:熟练掌握C/C++语言,理解指针、内存管理、中断处理等概念。 - **操作系统**:熟悉嵌入式操作系统的工作原理,如实时操作系统(RTOS)的特点和使用场景。 - **硬件接口**:掌握串口、I2C、SPI等常用...
5. **结构体和联合体**:学习如何定义和使用结构体,理解结构体内存布局,以及结构体在链表、树等数据结构中的应用。 6. **文件操作**:学会打开、关闭文件,读写文件,以及如何处理文件指针。 7. **预处理器**:...
- **内存布局**:由于成员共享内存,因此需要注意内存布局和类型安全。 - **示例**:提供了一些实际使用`union`的例子,展示了其在嵌入式系统编程中的用途。 #### 14. 基于ARM的嵌入式Linux移植真实体验 这部分...
近指令、远指针和巨指针的概念反映了这种差异,它们的使用取决于目标系统的内存布局和寻址模式。 #### 13. 基于ARM的嵌入式Linux移植真实体验 这部分内容分享了在ARM架构上移植Linux操作系统的实际经验,包括从...
- **面试题解析**:这一系列文章分析了C/C++程序员在求职过程中可能遇到的典型面试题目,包括但不限于指针、内存管理、数据结构等方面的问题。 #### 10. 一道著名外企面试题的抽丝剥茧 - **面试题分析**:通过详细...
C语言作为底层编程语言,能更直观地展现数据结构的内存布局和操作细节,对于理解数据结构的底层运作机制非常有帮助。习题集中的答案详尽解析了每一道题目,包括算法的设计思路、代码实现以及可能的优化方案,有助于...
每一道题都会详细解释解题思路,展示代码实现,并对可能出现的问题进行分析,这对于初学者理解并掌握C语言的关键概念具有极大帮助。 "上机指导"部分则是为了提升读者的实际编程能力。这部分可能包含了一系列的编程...
- **内存模型**:解释了不同类型的指针在C/C++内存模型中的作用和区别。 - **应用场景**:在特定的内存管理需求下,这些概念非常重要。 ### 13. 基于ARM的嵌入式Linux移植真实体验 - **系统移植过程**:这部分详细...
本题涉及的是一道基于高版本glibc的House of Apple攻击,这是一种利用大型bin(large bin)攻击的_IO_FILE结构的方法。下面我们将深入探讨相关的知识点。 1. **高版本glibc的Large Bin Attack** Large Bin Attack...