OK, the only thing i did is modify the configuration table of boot kernel selection.
use a hex editor to open
boot.efi. and goto offset
722f0. then you will see the hex values:
Code:
[COLOR="Green"]AEA70600[/COLOR][COLOR="Blue"]00000000[/COLOR][COLOR="Red"]03000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]B6A70600[/COLOR][COLOR="blue"]01000000[/COLOR][COLOR="red"]05000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]BEA70600[/COLOR][COLOR="blue"]01000000[/COLOR][COLOR="red"]02000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]C9A70600[/COLOR][COLOR="blue"]01000000[/COLOR][COLOR="red"]03000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]D4A70600[/COLOR][COLOR="blue"]00000000[/COLOR][COLOR="red"]07000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]D9A70600[/COLOR][COLOR="blue"]00000000[/COLOR][COLOR="red"]03000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]E0A70600[/COLOR][COLOR="blue"]00000000[/COLOR][COLOR="red"]02000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
then goto offset
ec8b8, you will see:
Code:
[COLOR="Green"]D869060000000000[/COLOR][COLOR="Blue"]00000000[/COLOR][COLOR="Red"]03000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]E069060000000000[/COLOR][COLOR="blue"]01000000[/COLOR][COLOR="red"]05000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]E869060000000000[/COLOR][COLOR="blue"]01000000[/COLOR][COLOR="red"]02000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]F369060000000000[/COLOR][COLOR="blue"]01000000[/COLOR][COLOR="red"]03000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]FE69060000000000[/COLOR][COLOR="blue"]00000000[/COLOR][COLOR="red"]07000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]036A060000000000[/COLOR][COLOR="blue"]00000000[/COLOR][COLOR="red"]03000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
[COLOR="green"]0A6A060000000000[/COLOR][COLOR="blue"]00000000[/COLOR][COLOR="red"]02000000[/COLOR]0200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
the first block is used in 32bit efi, the second block is used in 64bit.
you may see each line has 3 marked part
the green part is a pointer that defines the modle type.
the blue part is a 32bit integer that defines whether it is a laptop.
the red part is a 32bit integer that defines the modle number. this part is to modified.
these values could be translated to:
Code:
[COLOR="Green"]macmini[/COLOR][COLOR="Red"]3[/COLOR],1
[COLOR="green"]macbook[/COLOR][COLOR="red"]5[/COLOR],1
[COLOR="green"]macbookair[/COLOR][COLOR="red"]2[/COLOR],1
[COLOR="green"]macbookpro[/COLOR][COLOR="red"]3[/COLOR],1
[COLOR="green"]imac[/COLOR][COLOR="red"]7[/COLOR],1
[COLOR="green"]macpro[/COLOR][COLOR="red"]3[/COLOR],1
[COLOR="green"]xserve[/COLOR][COLOR="red"]2[/COLOR],1
if your mac has a less modle number then the definitions,
boot.efi will load 32bit kernel, other wise 64bit. but 32bit kernel does not exist in ML. as a result,
boot.efi will return an error when trying to load it. so, simply change all the red part to
01000000 will make
boot.efi to load a 64bit kernel anyway.
but your problem is not about these definitions. it is probably because of the 32bit efi will make the 64bit kernel to do a wrong memory map when you have more then 4GB ram installed.
i don't know how to fix it by modifying the
boot.efi file. but i think there are 2 ways might work.
the first way is to use a hackintosh loader. and it is not recommend.
the second way is to compile a 32bit kernel by yourself when darwin 12 source is released.