On Tue, Sep 23, 2008 at 4:23 PM, Viswesh S <[EMAIL PROTECTED]> wrote: > > > > > ----- Original Message ---- >> From: Bean <[EMAIL PROTECTED]> >> To: The development of GRUB 2 <grub-devel@gnu.org> >> Sent: Monday, 22 September, 2008 9:10:26 AM >> Subject: Re: Windows,grub and grub2 >> >> On Tue, Sep 9, 2008 at 2:00 PM, Viswesh S wrote: >> > Below is the dump of screen output while chainloading the ntfsnew file. >> > *************************************** >> > DI=CFF0 SI=07EE BP=1FF0 SP=1FE8 BX=0000 DX=0000 CX=0000 AX=0000 >> > CS=0000 SS=0000 DS=0000 ES=0000 FG=0246 IP=7C57 >> > >> > DI=7FF0 SI=07EE BP=1FF0 SP=7BF4 BX=55AA DX=0000 CX=0000 AX=0100 CX=07C0 >> > DS=07C0 ES=0000 FG=0007 IP=0082 >> > ****************************************** >> > Could you please let me know the way to disassemble the binary file without >> > any header.The way in which you decoded the boot record. >> > >> > Also one more thing to let you know is that, >> > >> > with the grub-1.96 ( without the chainloader patch of disk->dev->read() ) , >> > with windows2003 in partition 1 and linux in partition 3, when we >> > chainload, >> > if we look at the partition table passed to another bootloader ie location >> > 0x7be - we can see that it is junk, but the surprising point is that, in >> > this case as I have mentioned in my first mail, windows boots up from >> > grub2.So it is that the partition table is not required for the chainloader >> > thing and just the boot record is sufficient >> >> Hi, >> >> Oh, sorry for another long delay. I disassemble the file with ida, >> which is an amazing tool. I don't know if there is open source >> alternative, please let me know if you find one. >> >> The output from ida is in masm format, I modify it a bit so that it >> can be compiled using nasm. Please note that nasm doesn't generate the >> same binary file as original one, but you can get an idea what it >> does. >> >> From the output, the program fails at the second int 13 call, int >> 13/ah = 48h. Although I notice that DL=0, which is not supposed to >> happen. Perhaps you can add a grub_printf in grub_chainloader_boot to >> show the value of boot drive: >> >> static grub_err_t >> grub_chainloader_boot (void) >> { >> grub_printf ("boot_drive=%d\n", boot_drive); >> grub_chainloader_real_boot (boot_drive, boot_part_addr); >> >> /* Never reach here. */ >> return GRUB_ERR_NONE; >> } >> >> -- >> Bean >> >> > > Hi, > > The value of boot drive is 0x80. > > This was the same value in disk->drive also.
Hi, Interesting, perhaps %dx is changed somewhere. Please try the following patch, it dumps the value of %dx just before jumping to the boot sector. -- Bean
diff --git a/kern/i386/pc/startup.S b/kern/i386/pc/startup.S index 18f61d8..a50977c 100644 --- a/kern/i386/pc/startup.S +++ b/kern/i386/pc/startup.S @@ -639,13 +639,46 @@ FUNCTION(grub_chainloader_real_boot) /* set up to pass boot drive */ popl %edx + movl %edx, %edi /* ESI must point to a partition table entry */ popl %esi + call prot_to_real .code16 + + push %dx + call hex_out + push %di + call hex_out + ljmp $0, $GRUB_MEMORY_MACHINE_BOOT_LOADER_ADDR + +hex_out: + pushw %bp + movw %sp, %bp + pushaw + movb $0xE, %ah + movw $7, %bx + movw $4, %cx + movw 4(%bp), %dx +1: + rol $4, %dx + movb %dl, %al + andb $0xF, %al + cmpb $10, %al + jb 2f + subb $('0'-'A'+10), %al +2: + addb $'0', %al + int $0x10 + loop 1b + movb $' ', %al + int $0x10 + popaw + popw %bp + ret $2 .code32 #include "../loader.S"
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel