本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订 。
介绍几种常见的提权方法,你用过几个? 阅读原文»
提权方法
信息收集
通过CVE-2015-1701进行提权
利用错误配置进行提权
【系列分享】ARM 汇编基础速成7:栈与函数 阅读原文»
译者:arnow117
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
传送门
【系列分享】ARM 汇编基础速成1:ARM汇编以及汇编语言基础介绍
【系列分享】ARM 汇编基础速成3:ARM模式与THUMB模式
【系列分享】ARM 汇编基础速成4:ARM汇编内存访问相关指令
在这部分我们将研究一篇独特的内存区域叫做栈,讲解栈的目的以及相关操作。除此之外,我们还会研究ARM架构中函数的调用约定。
栈
一般来说,栈是一片在程序/进程中的内存区域。这部分内存是在进程创建的时候被创建的。我们利用栈来存储一些临时数据比如说函数的局部变量,环境变量等。在之前的文章中,我们讲了操作栈的相关指令PUSH和POP。
在我们开始之前,还是了解一下栈的相关知识以及其实现方式吧。首先谈谈栈的增长,即当我们把32位的数据放到栈上时候它的变化。栈可以向上增长(当栈的实现是负向增长时),或者向下增长(当栈的实现是正向增长时)。具体的关于下一个32位的数据被放到哪里是由栈指针来决定的,更精确的说是由SP寄存器决定。不过这里面所指向的位置,可能是当前(也就是上一次)存储的数据,也可能是下一次存储时的位置。如果SP当前指向上一次存放的数据在栈中的位置(满栈实现),SP将会递减(降序栈)或者递增(升序栈),然后再对指向的内容进行操作。而如果SP指向的是下一次要操作的数据的空闲位置(空栈实现),数据会先被存放,而后SP会被递减(降序栈)或递增(升序栈)。
不同的栈实现,可以用不同情形下的多次存取指令来表示(这里很绕...):



没有评论:
发表评论