超线程:英特尔® 超线程技术是一项硬件创新,允许在每个内核上运行多个线程。更多的线程意味着可以并行完成更多的工作。
超线程如何工作?当英特尔® 超线程技术处于激活状态时,CPU 会在每个物理内核上公开两个执行上下文。这意味着,一个物理内核现在就像两个“逻辑内核”一样,可以处理不同的软件线程。较之传统的单线程内核,两个逻辑内核可以更有效地完成任务。英特尔® 超线程 (HT) 技术充分利用了内核以前在等待其他任务完成时的空闲时间,提高了 CPU 吞吐量。
CPU芯片:CPU芯片是计算机的大脑,负责处理和执行各种计算任务,是实现计算能力的核心组件。
CPU引脚:CPU引脚是芯片上的金属接点,用于与其他电子器件进行电连接和数据传输,扮演着信息输入输出和控制信号传递的重要角色。
控制单元:
CPU控制单元是CPU的关键部件,负责解析和执行指令,协调各个部件的工作,以及控制数据流程和处理器状态的转换。它是CPU的指挥中心,确保计算机按照预定的程序顺序执行操作。
控制指令:
CPU控制指令是一组特定的机器指令,用于控制CPU的操作,例如跳转、支、循环等,以及控制其他外设和存储器的读写操作,从而实现程序的顺序执行和数据处理。
存储单元:
CPU存储单元是用于存储和访问数据的部件,包括寄存器和高速缓存,用于暂时存储指令和数据,以提高CPU的运行效率和数据访问速度。
数据:数据是指在计算机中用来表示和处理信息的数字、字符、图像等各种形式的数据,包括被处理的输入数据、中间计算结果和最终的输出数据等。
运算单元:
CPU运算单元是CPU的核心组成部分,负责执行各种算术、逻辑和控制操作,包括整数运算、浮点运算、位操作等,以实现计算机的运算和处理功能。
几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个阶段:
例如:
eip: mov eax,dword ptr ds:[0x12345678]
转为机器码:
0xb8 0x78,0x56,0x34,0x12
执行该指令会经过几个阶段:
指令预取,一般在EIP指向当前代码段时,会存在预取过程(本地缓存)(预取会并行执行以上后4个步骤(指令译码…),预取缓存大概9-32条指令。
JMP EIP 和JCC(JZ,JC EIP)区别:
- JMP 会清空本地缓存,JCC不会
- JMP比JCC指令长,JCC 2字节,JMP 4字节
- JMP指令跳转范围最大2G,JCC范围-127-128字节。这种跳转范围会影响性能。
0x12345678 实际是逻辑地址,逻辑地址=段地址*10+偏移地址,
而保护模式是访问一个表,访问标识为ds的项,并且检查你是否有权限访问ds项,一般是ds段寄存器对应的段描述符,记录该段是否有权限访问某内存。
例如win95,win98 winxp 都是实模式
,内存都是线性内存,如下图。
逻辑地址的计算:线性地址=段地址*0x10+偏移地址,
缺点:
例如win7之后,主要通过GDT将ring3和ring0内存区分开
然后出现段页
来区分每个进程地址的上下文,来访问进程的内存。
x86 CPU的三种模式:
保护模式实际是保护寄存器
x86是由Intel推出的一种复杂指令集能够生产支持,这种指令集。
CPU公司主要是Intel和AMD
AMD在1999年的时候,拓展了这套指令集,称为x86-64,后改名为AMD64,Intel也兼容了这个产品,称为Intel64.但AMD64和ntel64几乎是一样的,所以在很多资料中统称为x64.
这套指令集是对x86的拓展,向下兼容的。
Intel白皮书第三卷
滴水内部教程
反调试
PCHuter
需要c语言,汇编基础会更好