All of lore.kernel.org
 help / color / mirror / Atom feed
From: Viswesh S <viswesh_vichu@yahoo.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: Re: Windows,grub and grub2
Date: Tue, 14 Oct 2008 04:34:53 -0700 (PDT)	[thread overview]
Message-ID: <83465.72271.qm@web31605.mail.mud.yahoo.com> (raw)

Hi,



----- Original Message ----
> From: Bean <bean123ch@gmail.com>
> To: The development of GRUB 2 <grub-devel@gnu.org>
> Sent: Monday, 29 September, 2008 4:20:57 PM
> Subject: Re: Windows,grub and grub2
> 
> On Mon, Sep 29, 2008 at 1:18 PM, Viswesh S wrote:
> > Hi,
> >
> >
> >
> > ----- Original Message ----
> >> From: Bean 
> >> To: The development of GRUB 2 
> >> Sent: Tuesday, 23 September, 2008 7:20:49 PM
> >> Subject: Re: Windows,grub and grub2
> >>
> >> On Tue, Sep 23, 2008 at 4:23 PM, Viswesh S wrote:
> >> >
> >> >
> >> >
> >> >
> >> > ----- Original Message ----
> >> >> From: Bean
> >> >> To: The development of GRUB 2
> >> >> 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
> >
> > The patch works and now Windows is booting perfectly fine from Grub2.
> >
> > I will go through the assembly and try to understand what modifications you 
> have done.So there is a problem in Grub2 code, which needs to be fixed ?
> >
> > Till this point, I was chainloading grub from Grub2 and then chainloading 
> Windows2008 from it.
> >
> > Thanks for the consistent help till this point and for the future also.
> 
> Hi,
> 
> That's strange, the patch doesn't do anything except output the value of dx:
> 
>     /* 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"
> 
> Perhaps you can try:
> 
> 1, %edi is used as backup register in case %edx is changed by
> prot_to_real, you can remove "movl %edx, %edi", "push %di", "call
> hex_out" and see if it still works.
> 
> 2, It's possible that the bug is position related, replace "push %dx",
> "call hex_out" with equal number of nop and see what happens.
> 
> -- 
> Bean
> 

We can remove the patch completely, without putting nop also, but just comment out the following code

/*
    xorl    %eax, %eax
    call    EXT_C(grub_gate_a20)
*/

This is the only difference and when I comment out this, Windows boots up from Grub2.

Regards,
Viswesh


      Add more friends to your messenger and enjoy! Go to http://messenger.yahoo.com/invite/



             reply	other threads:[~2008-10-14 11:35 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-14 11:34 Viswesh S [this message]
  -- strict thread matches above, loose matches on Subject: below --
2008-11-08 17:26 Windows,grub and grub2 Viswesh S
2008-11-10 13:08 ` James Shewey
2008-09-29  5:18 Viswesh S
2008-09-29 10:50 ` Bean
2008-09-23  8:23 Viswesh S
2008-09-23 13:50 ` Bean
2008-09-09  6:00 Viswesh S
2008-09-22  3:40 ` Bean
2008-09-01 17:01 Viswesh S
2008-09-04 17:37 ` Bean
2008-09-01 15:27 Viswesh S
2008-09-01 15:35 ` Bean
2008-09-01 13:53 Viswesh S
2008-09-01 14:35 ` Bean
2008-09-01 13:37 Viswesh S
2008-09-01 13:51 ` Bean
2008-09-01 10:48 Viswesh S
2008-09-01 13:02 ` Bean
2008-09-01  9:08 Viswesh S
2008-09-01 10:16 ` Bean
2008-08-29 20:29 Viswesh S
2008-08-30  4:30 ` Bean
2008-08-30  5:31   ` Bean
2008-08-30 15:03   ` Vesa Jääskeläinen
2008-08-30 15:21     ` Bean

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83465.72271.qm@web31605.mail.mud.yahoo.com \
    --to=viswesh_vichu@yahoo.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.