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 模式下的作用主要有以下几点:

  1. 段选择子

    • CS 寄存器存储的是一个 16 位的段选择子,它引用了 GDT 或 LDT 中的代码段描述符。
  2. 64 位模式与 32 位兼容模式的切换

    • 段描述符中有一个L 位(64-bit flag),该位用于区分当前进程是在 64 位模式还是32 位兼容模式
    • L 位=1 时,表示当前代码段是 64 位模式,处理器将使用 64 位指令和寄存器。
    • L 位=0 时,表示当前代码段是 32 位兼容模式,处理器将使用 32 位指令和寄存器。
  3. 特权级别

    • 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 位的部分