《深入理解计算机系统》Machine level programming-V Advanced topics

B    0

KB    3

MB    6

GB    9

TB     12

PB  pegabytes  15

EB Exabyte  18

ZB Zettabyte  21

0x0000 7FFF FFFF FFFF 这个地址在Linux中为栈的起始地址。

不安全的函数:

gets

strcpy

strcat

sscanf fscanf scanf  当传入%s时

栈溢出:

如果发生栈溢出,则由很大可能栈空间的返回地址会被篡改,程序会跳到某个地方。

代码注入攻击则利用这个原理,将原栈空间破坏,跳转到目标地址。

目前,系统层面上,有一些防治代码注入的方法:

1. ASLR(Address space layout randomization)地址空间布局随机化,global val 和 code segment 每次运行地址不变,heap和stack地址每次运行都会变化。

2. nonexecutable code segment,可以避免利用漏洞导致的内存覆盖。有的内存块可写,有的内存块只读。另外,栈设置成不可执行,不能放置代码段。

3. gcc 的编译选项:-fstack-protector(金丝雀)

如果检测到栈溢出,则会打印:stack smashing detected,简易原理图:

gdb 命令:查看某个函数的反汇编:

disass echo

gadget

大小端:

小端:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值