Assembly 在IA-32汇编语言中,IDTR、GDTR或LDTR是否可以修改或';已加载';没有LIDT、LGDT和LLDT说明?

Assembly 在IA-32汇编语言中,IDTR、GDTR或LDTR是否可以修改或';已加载';没有LIDT、LGDT和LLDT说明?,assembly,cpu-registers,x86,Assembly,Cpu Registers,X86,在IA-32汇编语言中,IDTR、GDTR或LDTR是否可以在没有LIDT、LGDT和LLDT指令的情况下进行修改/加载 此外,是否有可用于修改其他寄存器的完整指令列表?我需要知道哪些指令可以用来修改CR3,哪些指令可以用来修改ECX 我是IA-32组装的新手。我知道MOV、ADD、SUB等,但是它需要一个完整的列表,我相信可能有很多指令可以用来修改这些寄存器 谢谢!:) 编辑:我想知道的原因是我正在考虑是否监视指令跟踪(使用硬件调试)在外部“完整性监控”机器中,检测任何恶意rootkit的一种

在IA-32汇编语言中,IDTR、GDTR或LDTR是否可以在没有LIDT、LGDT和LLDT指令的情况下进行修改/加载

此外,是否有可用于修改其他寄存器的完整指令列表?我需要知道哪些指令可以用来修改CR3,哪些指令可以用来修改ECX

我是IA-32组装的新手。我知道MOV、ADD、SUB等,但是它需要一个完整的列表,我相信可能有很多指令可以用来修改这些寄存器

谢谢!:)


编辑:我想知道的原因是我正在考虑是否监视指令跟踪(使用硬件调试)在外部“完整性监控”机器中,检测任何恶意rootkit的一种可行方法是对已执行指令进行排序,这些恶意rootkit会改变这些寄存器中的地址,以执行所谓的地址转换重定向攻击(ATRA)。因此,我试图确定是否有可能确定修改每个寄存器的潜在恶意指令序列的完整列表。

关于
IDTR
GDTR
LDTR
,有以下答案:

第2.4.1节,“全局描述符表寄存器”(
GDTR
):

LGDT
SGDT
指令加载并存储
GDTR
寄存器, 分别

第2.4.2节,“本地描述符表寄存器”(
LDTR
):

LLDT
SLDT
指令加载并存储段选择器 分别为
LDTR
寄存器的一部分。包含
LDT
必须在
GDT
中有段描述符。当
LLDT
指令在
LDTR
中加载一个段选择器:基址,
LDT
描述符中的限制和描述符属性是自动的- 自动加载到
LDTR
中。当任务切换发生时,
LDTR
被激活 使用段选择器和描述符自动加载 新任务的LDT。
LDTR
的内容不会自动显示 在将新的
LDT
信息写入寄存器之前保存

因此,只有两条指令用于修改表,但处理器中的任务切换(尽管主流操作系统不再使用它,因此您是否应该担心这一点取决于您实际执行的操作)可能会导致该寄存器的内容发生更改

第2.4.3节,“
IDTR
中断描述符表寄存器”:

LIDT
SIDT
指令加载并存储
IDTR
寄存器, 分别

然而,关于ECX,没有一个明确的答案。由于它在实数模式中用作“计数”寄存器,因此可能会被一些与循环相关的指令隐式修改。不经意间:

  • 循环
    (及其衍生物),它使ECX递减,如果不是零则跳跃。然而,您不应该在新代码中经常看到此指令,因为它主要是CISC时代的遗留指令,因此在为今天的CPU发出代码时不鼓励使用它。这是由于解码时间相对较长(与
    测试
    +跳转相比)
  • REP
    (及其衍生物),只要
    ECX
    不为零,它就会重复给定的指令
  • CPUID
    ,它使用所有寄存器返回CPU标识信息

我肯定还有一些。如果存在这样一个列表,我会感到惊讶,尽管它有时肯定会有用。

关于
IDTR
GDTR
、和
LDTR
,他们有以下答案:

第2.4.1节,“全局描述符表寄存器”(
GDTR
):

LGDT
SGDT
指令加载并存储
GDTR
寄存器, 分别

第2.4.2节,“本地描述符表寄存器”(
LDTR
):

LLDT
SLDT
指令加载并存储段选择器 分别为
LDTR
寄存器的一部分。包含
LDT
必须在
GDT
中有段描述符。当
LLDT
指令在
LDTR
中加载一个段选择器:基址,
LDT
描述符中的限制和描述符属性是自动的- 自动加载到
LDTR
中。当任务切换发生时,
LDTR
被激活 使用段选择器和描述符自动加载 新任务的LDT
LDTR
的内容不会自动显示 在将新的
LDT
信息写入寄存器之前保存

因此,只有两条指令用于修改表,但处理器中的任务切换(尽管主流操作系统不再使用它,因此您是否应该担心这一点取决于您实际执行的操作)可能会导致该寄存器的内容发生更改

第2.4.3节,“
IDTR
中断描述符表寄存器”:

LIDT
SIDT
指令加载并存储
IDTR
寄存器, 分别

然而,关于ECX,没有一个明确的答案。由于它在实数模式中用作“计数”寄存器,因此可能会被一些与循环相关的指令隐式修改。不经意间:

  • LOOP
    (及其衍生物),它使ECX递减