On Wed, Feb 28, 2018 at 4:19 AM, Zenghui Yu via Syslinux
<syslinux at zytor.com> wrote:> Hi All,
>
> I have encountered a problem when reading PXELinux's source code.
>
> In syslinux/core/pxelinux.asm, function *pxenv* is as below:
>
> pxenv:
>
> pushfd
>
> pushad
>
>
> ; We may be removing ourselves from memory
>
> cmp bx,PXENV_RESTART_TFTP
>
>
> ......
>
>
> push es
>
> push di
>
> push bx
>
> .jump:
>
> call 0:0
>
> add sp,6
>
> mov [cs:PXEStatus],ax
>
> ......
>
> ret
>
>
> "Around" .jump, we store ES:DI and BX on PXE stack, which points
to PXE
> parameter block and PXE opcode correspondingly. Then we should call
!PXE's
> EntryPointSP to call specified PXE API, but why we use *call 0:0* here?
Placeholder.
> What does physical address 0x0 have?
0.
> Can anyone who can please explain it?
Read further. You'll see PXEEntry references it and is modified
elsewhere in code. Where depends on what version and architecture
(EFI32/EFI64/BIOS)
--
-Gene