The Linux Page

mov eax,dword ptr fs:[0000000h]

As I was trying to debug a problem using an STL vector, I looked at the resulting assembly and saw this strange thing:

mov eax,dword ptr fs:[0000000h]

And a little further down, the opposite:

mov dword ptr fs:[0000000h],eax

These statements are from VC++ so the first is "put fs:[0] in eax" and the second is "save eax at fs:[0]".

Curious I looked around and found a page describing what's really hapenning. If you need to know, that's actually initializing the exception structure for this function. The fs:[0] location is where that structure pointer is saved so when an exception does occur, the kernel can find the handler simply by looking at that location for your thread.

Obviously, the physical address of fs:[0] is different for each thread of each process.

Source: http://blogs.msdn.com/b/satyem/archive/2012/01/17/where-is-my-exception-...