arm32 stack check

arm64 反汇编分析分析了armv8的stack check原理, 这里分析下arm32的原理
基本流程和arm64一致,我们看下arm32如何保存canary值, 
__set_tls

ENTRY(__set_tls)
	 mov ip, r7
	 ldr r7, =__ARM_NR_set_tls
	 swi #0
	 mov r7, ip
	 cmn r0, #(MAX_ERRNO + 1)
	 bxls lr
	 neg r0, r0
	 b __set_errno_internal
END(__set_tls)

# define __get_tls() ({ void** __val; __asm__("mrc p15, 0, %0, c13, c0, 3"
   : "=r"(__val)); __val; })//cp1513_val13
Read User read-only Thread and Process ID Register


extern "C" void** __get_tls() {
	#include "private/__get_tls.h"
	 return __get_tls();
}

也就是通过系统调用去设置tls的指针值,
__get_tlstls

参考
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/Babeihid.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值