![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编与底层
文章平均质量分 55
wudaijun
新博客地址:wudaijun.com,QQ:812915118,欢迎交流。
展开
-
数据的表示____浮点
浮点数的二进制编码分为三个域: 符号域s,指数域k, 尾数域n 我们设指数部分二进制表示值为e 尾数部分表示为f 而实际表示小数的小数为M 指数为E浮点数的表示分为三种情形: 规格化值: 这是在指数域既不为1也不为0的情况下: E = e-Bias M = 1+f 非规格化值(表示接近于0的值):原创 2012-11-01 09:22:54 · 758 阅读 · 0 评论 -
初步接触____编译器的优化
编译器VC++6.0有两种优化方案 O1(占用空间最小)和O2(运行效率最快) Debug下,编译器的优化能力是有限的,需要增加一些调试代码。Release版本下,编译器采用O2方案 例子: 源码: int main() { 15+20; int nVarOne = 0; int nVarTwo = 0;原创 2012-11-01 09:26:46 · 747 阅读 · 0 评论 -
更形式化的论述___堆管理
关于堆结构:前面在内存跟踪的时候,可能你已经发现,加入我们申请100个字节的堆内存,char* p = (char*)malloc(100);堆管理器实际上会分配给我们比100字节更大的一块内存给我们,这里多余的字节不只是堆结构的头,还有根据分配算法而多出来的那一部分。管理器返回给我们结构头之后的空闲块开始处的地址。当调用free(p)时,管理器假定p是动态分配返回的可用内存首地址,然后它会使p回原创 2012-11-01 09:32:45 · 893 阅读 · 0 评论 -
内存跟踪___栈溢出
实例:int main(){ char p[] ="123456"; char s[2]; strcpy(s, p); cout return 0;}得到输出: 56结果讨论: 关于栈:三个特性: 1. 函数栈内存以一个地址即四个字节对齐 2. 地址从高地址到低地址分配原创 2012-11-01 09:27:42 · 1647 阅读 · 1 评论 -
内存跟踪___堆
前面已经探讨了栈结构 这里对堆也跟踪一下: 堆的分配规则和栈不一样 堆的地址是从小到大分配的 并且连续分配的两个内存块的起始地址是肯定不同的。 写在前面: 关于内存所谓的空闲区值: 经常写代码忘了初始化的人可能会注意到,每次定义一个整形变量没有初始化直接使用 往往每次都得到一个很大的负数 不是说没原创 2012-11-01 09:29:51 · 740 阅读 · 0 评论 -
目标文件格式分析____ELF
这里不使用工具详细逐步分析验证ELF内容 可参见书目《程序员的自我修养---链接装载与库》本文主要也是阅读该书第三章的读书笔记 供整理思路 理清脉络之用 ELF主要内容: 1.文件头: 里面主要包含包含了: a.平台版本信息:里面有个比较有意思的魔数: 最开始的4个字节是所有ELF文件都必原创 2012-12-06 23:37:57 · 1052 阅读 · 0 评论 -
PE文件格式应用实例__为PE文件添加启动时对话框
本实例通过为修改目标PE文件内容来实现在该PE文件启动时,弹出一个对话框。对话框内容和标题由用户指定。 点击生成,在QQ.exe目录下有QQ_Box.exe。双击运行,弹出消息框: 点击确定,即开始运行QQ。 主要涉及到文件映射,虚拟地址空间,PE文件格式等知识; 为了让PE文件实现这一功能,我们在P原创 2013-03-17 21:22:25 · 3224 阅读 · 0 评论