Staring at the assembly in xstart there is the following code
snippet:
pushl %eax
ADDR32 LJMPI(_execaddr-_start16)
1:
...
_execaddr:
.long 0
What I don't get is how this snippet of code successfully jumps
to an application. ADDR32 should ljmpi should take a m16:32.
Where the offset which comes first is 32 bits, and the segment
that comes after is 16bits. I just don't see how that works when
we pass it a m16:16 in execaddr.
The code has looked like this since 4.6.x so I don't doubt it works
for someone but a confirmation, or even more an explanation would be
nice.
Eric
|