I just compiled some C code that reads in input using gets
and disassembled the code. The platform is Ubuntu 32-bit.
There are these 3 lines that check if the canary value has been tampered with.
0x08048455 <+33>: mov edx,DWORD PTR [esp+0x7c]
0x08048459 <+37>: xor edx,DWORD PTR gs:0x14
0x08048460 <+44>: je 0x8048467 <main+51>
I set a breakpoint on 0x08048459
and saw that the gs
register had the value 0x33.
My questions are:
- What is gs:0x14 given that gs is 0x33? Is 0x33 an index to something? Is it a memory location of some sort?
- Are there any x86 instructions to move the value of gs to any other register? Or perhaps push it onto the stack?