老码识途的笔记(14)

>我来写笔记

按有用程度 按页码先后 最新笔记

  • 杜晓东

    杜晓东

    switch基本因素:case数目,跳转地址表大小 3个case是临界,都是3条指令,但占用空间却无速度优势 case个数小于3本质和if-else一样,大于3使用地址表 地址表过大时,引入索引表,索引表元素大小1字节 大于255时,也退化为if-else

    2018-07-07 13:42

  • 杜晓东

    杜晓东

    条件判断有2套指令集:针对有符号数和针对无符号数

    2018-07-07 13:37

  • 杜晓东

    杜晓东

    网络顺序就是大端表示:htonl,ntohl 结构体定义的最佳实践:无填充对齐

    2018-07-07 12:58

  • 杜晓东

    杜晓东

    编译器有编译选项:结构成员对齐 结构体存储大小: 2个基本因素:最大域的大小,对齐长度 1个逻辑单元:盒子大小,不会大于最大域的大小,和对齐长度取小的那个 2个规律:依次往盒子中放,但地址必须是自身大小的整数倍 CPU处理未对齐的地址方式也有差异:有的结束进程,有的增加更多的指令来兼容。

    2018-07-07 12:29

  • 杜晓东

    杜晓东

    结构体只是体现在编译层面,汇编层面只有基本数据类型。

    2018-07-07 12:23

  • 杜晓东

    杜晓东

    C语言数组索引从0开始:少了一次减法计算,换取计算速度。 数组属性:首部地址,元素个数,元素大小 索引从1开始的语言:Pascal

    2018-07-07 11:40

  • 杜晓东

    杜晓东

    函数原型3大属性:参数表,返回类型,调用惯例 函数实现了指令组合级别的模块化,函数指针实现了模块的模块化-灵活性增强了一级。

    2018-07-07 11:11

  • 杜晓东

    杜晓东

    调用方清栈,用多出的一条指令换取了变参功能。C语言默认 被调用方清栈,ret x 。_stdcall微软采用 _fastcall寄存器传参,只优化前2个 栈传参,C语言从右往左,调用方清栈;Pascal从左往右,被调用方清栈。

    2018-07-07 08:06

  • 杜晓东

    杜晓东

    变量地址:地址大小是固定的,所以有对齐问题,可查看、修改 整型表示:起始地址直接编码进汇编代码中,默认使用和地址一样大小,如果需要使用其它大小,需借助寄存器转换大小 机器码:汇编指令及其参数,可反编译查看,EIP寄存器的内容指定下一条指令 代码地址:机器码存放的地方,内存载入前可修改 功能:修改已有机器码内容,直接构建新的机器码,操作EIP串联起流程。

    2018-07-05 20:09

  • 杜晓东

    杜晓东

    使用short定义局部变量会比直接使用int多一条汇编指令: mov eax, 0ch 指针的类型信息体现在赋值指令mov中。 安全法则:不越界

    2018-07-05 19:37

<前页 1 2 后页>

笔记是你写在书页留白边上的内容;是你阅读中的批注、摘抄及随感。

笔记必须是自己所写,不欢迎转载。摘抄原文的部分应该进行特殊标明。

老码识途

>老码识途