Identifying Execution Location
Shellcode needs to dereference a base pointer when accessing data in a position-independent manner. Adding or subtracting values to this base value will allow it to safely access data that is included with the shellcode. Because the x86 instruction set does not provide EIP-relative data access, as it does for control-flow instructions, a general-purpose register must first be loaded with the current instruction pointer, to be used as the base pointer.
Obtaining the current instruction pointer may not be immediately obvious, because the
instruction pointer on x86 systems cannot be directly accessed by software. In fact, there is no way
to assemble the instruction mov eax, eip to directly load a general-purpose register ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access