连续两条目的操作数为rcx的mov指令的作用是什么?
两条MOV指令的含义解析
这两条mov指令是连续的指针取值操作,完全没有你猜测的“相加”逻辑,具体拆解如下:
第一条指令:
mov rcx,qword ptr gs:[20h]
在Windows内核环境中,gs段寄存器指向当前处理器的_KPCR(处理器控制区)结构体。这条指令从_KPCR偏移0x20的位置取出一个64位指针值,存入rcx寄存器,这个指针通常指向当前线程的_KTHREAD结构体。第二条指令:
mov rcx,qword ptr [rcx+6180h]
这条指令是覆盖rcx原有值的操作:先将rcx中存储的指针(即_KTHREAD的地址)加上0x6180的偏移,再从这个新地址中取出64位值重新存入rcx。最终rcx里的内容是一个CONTEXT结构体的指针——因为后续调用的nt!RtlCaptureContext函数,在x64调用约定下要求用rcx传递第一个参数,而这个参数正是用来保存处理器上下文的CONTEXT结构体地址。
简单来说,这两条指令是通过两次“取指针指向的内存值”,一步步把rcx设置成目标函数需要的参数地址。
对应的汇编代码片段:
... mov rcx,qword ptr gs:[20h] mov rcx,qword ptr [rcx+6180h] call nt!RtlCaptureContext (fffff802`c1d4c7b0)
内容的提问来源于stack exchange,提问作者JkT
相关产品推荐
相关产品推荐

