https://bbs.kanxue.com/thread-280974.htm
在 x64 下 CS 含义变成了存储段信息
The CS register contains information about the current privilege level (Ring 0 for kernel mode and Ring 3 for user mode) and the code segment’s base address.
CS 寄存器包含有关当前特权级别(内核模式的 Ring 0 和用户模式的 Ring 3)和代码段的基地址的信息。
cs register value: for x86 : 0x23, x64 : 0x33 cs 寄存器值:对于 x86:0x23,x64:0x33
The CS selector cannot be 0. It must refer to a valid code segment descriptor in the GDT or LDT. The L bit of the code segment descriptor controls whether the current process is 64-bit mode or 32-bit compatibility mode.
CS 选择器不能为 0。它必须引用 GDT 或 LDT 中的有效代码段描述符。代码段描述符的 L 位控制当前进程是 64 位模式还是 32 位兼容模式。
在 x64 架构中,CS(代码段寄存器) 存放的是当前执行代码的段选择子,它指向全局描述符表(GDT)或局部描述符表(LDT)中的一个代码段描述符。这个描述符包含了执行代码的一些关键信息。
具体来说,CS 寄存器在 x64 模式下的作用主要有以下几点:
-
段选择子:
- CS 寄存器存储的是一个 16 位的段选择子,它引用了 GDT 或 LDT 中的代码段描述符。
-
64 位模式与 32 位兼容模式的切换:
- 段描述符中有一个L 位(64-bit flag),该位用于区分当前进程是在 64 位模式还是32 位兼容模式。
- L 位=1 时,表示当前代码段是 64 位模式,处理器将使用 64 位指令和寄存器。
- L 位=0 时,表示当前代码段是 32 位兼容模式,处理器将使用 32 位指令和寄存器。
-
特权级别:
- CS 寄存器还携带了当前代码段的特权级别(CPL,Current Privilege Level),这是 CS 段选择子中的最低两位,用于控制对系统资源的访问权限。CPL 可以是 0 到 3,0 级别是最高特权级(内核模式),3 级别是最低特权级(用户模式)。
The default base address for an EXE file is 0x400000 for 32-bit images or 0x140000000 for 64-bit images
做法就是改文件头,拖进去重新分析然后重定位基地址然后只分析 32 位的部分