什么是fs:[register + value]意思是汇编?

时间:2016-03-04 21:31:32

标签: windows assembly x86 nasm

xor    ebx,ebx
mov    eax,DWORD PTR fs:[ebx+0x3]

我知道这段代码的第一行,但是fs:[ebx+0x3]是什么? 为什么在编译时给我一个错误?

test.asm:2: error: comma, colon, decorator or end of line expected after operand

1 个答案:

答案 0 :(得分:6)

xor操作码将EBX设置为0.因此mov操作码访问fs:[3]处的DWORD。这将访问位于Current Structured Exception Handling (SEH) framefs:[0](4个字节)的Win32 Thread Information Block's fs:[3]的最后一个字节以及Stack Base变量的前三个字节,即ESP的价值。

除非你遇到一些复杂构造和混淆的病毒或反调试技术,它将这些3 + 1字节组合成有用的东西,否则这只是一个随机数

另一种可能性是,在这些指令之前修改了“段”寄存器FS以包含合理的基址。在这种情况下,这可能是许多其他人的有用指令。您提供的代码段不可判断。

例如

mov eax, fs
inc eax
mov fs, eax
...
xor    ebx,ebx
mov    eax,DWORD PTR fs:[ebx+0x3] 

将在EAX中返回'Stack Base' - '(FS + 1)+(0 + 3)'= real-FS:[4] ='Stack Base'位置。

另外:为了完整性:为什么它没有汇编在'Ross Ridge'的评论中提到:它是MASM语法而不是NASM语法。