摘要: C 代码循环结构的优化,主要从两个方面着手 : 1. 消去除数据流计算以外的多余开销(如降低循环开销)。 可以通过 减少不必要的程序调用,减少不必要的内存引用,循环展开等来实现。 2. 提高数据数据计算的并行性。 现代处理器可以通过流水线和乱序的执行代码来优化性能,并且对机器级程序呈现的仍是顺序执行 阅读全文
posted @ 2019-08-26 17:08 哼哼先生 阅读(368) 评论(1) 推荐(0) 编辑
摘要: 在机器中的实现细节如图: 注意 :上图中的返回地址是去之后计算出的下一条指令的地址,并将其压入栈中。 在函数返回之前,栈指针已经指向的返回地址所在的内存空间。 对于栈空间的分配和释放,机器指令并不负责。所以调用前的栈空间分配,和返回前的栈空间释放,都需要汇编代码来负责执行。 By The Way : 阅读全文
posted @ 2019-08-07 18:52 哼哼先生 阅读(876) 评论(0) 推荐(0) 编辑
摘要: C语言浮点数有 float 和 double 。 浮点数在内存中的组成存放形式为 : 符号 s + 阶码 E +尾数 M 。其中 s 确定正负,E确定每一位的权重,M为未加权重的各位编码。 float 中 s 一位, E 的位数 k =8 , M 的位数 f =23 . 数值 = (-1) ^ s 阅读全文
posted @ 2019-07-25 16:07 哼哼先生 阅读(727) 评论(0) 推荐(0) 编辑
摘要: nop sled 是一种可以破解栈随机化的缓冲区溢出攻击方式。 攻击者通过输入字符串注入攻击代码。在实际的攻击代码前注入很长的 nop 指令 (无操作,仅使程序计数器加一)序列, 只要程序的控制流指向该序列任意一处,程序计数器逐步加一,直到到达攻击代码的存在的地址,并执行。 栈随机化指运行时栈的起始 阅读全文
posted @ 2019-07-24 19:05 哼哼先生 阅读(3282) 评论(0) 推荐(0) 编辑
摘要: struct ll 大小为8字节(4+2+2=8,为了对齐填充了2字节)。 由以上的代码运行发现,将指针运算P=P+4,得出的地址 = P地址的值 +(4*8). 即 gcc 将代码 P=P+4 优化为指向当前地址后的第 4 个struct ll; 所以,得到的数值为无意义的值; 而方式一将指针的转 阅读全文
posted @ 2019-07-22 18:20 哼哼先生 阅读(375) 评论(0) 推荐(0) 编辑