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
答案 0 :(得分:6)
xor
操作码将EBX设置为0.因此mov
操作码访问fs:[3]处的DWORD。这将访问位于Current Structured Exception Handling (SEH) frame
到fs:[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语法。