source code like this: ----------------------------------------------------------------------------------------------------- .section ".reset", "ax", %progbits .code16 .globl _start _start: .byte 0xe9 .int _start16bit - ( . + 2 ) /* Note: The above jump is hand coded to work around bugs in binutils. * 5 byte are used for a 3 byte instruction. This works because x86 * is little endian and allows us to use supported 32bit relocations * instead of the weird 16 bit relocations that binutils does not * handle consistently between versions because they are used so rarely. */ .previous
-----------------------------------------------------------------------------------------------------
I tried to modify the code and passed test (use qemu test). My code like this: ----------------------------------------------------------------------------------------------------- .section ".reset", "ax", %progbits .code16 .globl _start _start: jmp _start16bit .previous
-----------------------------------------------------------------------------------------------------
What is the meaning of hand coding? In 16-bit mode, the last two bytes are ignored.
------------------
王翔
安全研究员
广州市腾御安信息科技有限公司
广州市天河区珠江新城华穗路406号保利克洛维二期中景A座1020-1024