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 <[email protected]>
>> 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
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel