id summary reporter owner description type status component version resolution keywords cc guest host 5200 mov rsi,rcx doesn't work in Virtual Box 3.0.8 Jonathan Markland " ** NOTE: This report does NOT concern a mainstream guest OS. ** I have developed a loader for a small X86-64 hobby OS system. This consists of a bootable floppy-disc image, which loads a binary image into memory, and executes it in 64-bit ""long"" mode. I have the following to report: My system boots and runs fine on: - The BOCHS PC Simulator 2.4.1 (booting from floppy image file) - Advent T9610 PC Intel Quad Core Q6600 (booting from CD el-torito floppy emu) - DELL M2300 Laptop Dual core Intel (booting from CD el-torito floppy emu) However, my system does NOT work when booting from floppy image mounted in Virtual Box 3.0.8. I get a guru error and VBOX bombs out with *either* a clean guru error box, or a dirty Vista-standard ""this program has stopped working"" dialog. [In fact this might even be a second issue I can report -- something to do with MSVCR80.dll] However, the primary issue concerns me more. I do not know if there are debug facilities within VBOX, so I am debugging by inserting an infinite loop ""jmp $"" in my NASM code, re-building and running. If VBOX hits this and loops forever and does NOT guru on me, I consider this a ""test pass"". If VBOX does not get this far because of a guru error I consider this a ""test fail"". Test results and source code snippets included below. In brief: In a routine to render a text message onto the (graphics mode) linear frame buffer : mov rsi,rcx (of all things) appears not to work: 0x0000000000210781 4889CE mov rsi,rcx On entry, rcx is 0x210fdd, which is the address of a message string: 0x0000000000210fdd db ""TEST MESSAGE"",0 When executed at address 0x210781, with rcx=0x210fdd and rsi=0xccccCCCCccccCCCC, and the null-terminated ASCII string ""TEST MESSAGE"" at address 0x210fdd, according to VBOX.LOG, ""mov rsi,rcx"" appears to load rcx with value ""0x53454d2054534554"" rather than the expected 0x210fdd. ** Interestingly, ""0x53454d2054534554"" would be mov rsi,[rcx] ** OTHER NOTES I am using the 2MB page size. The above memory is covered by a 2MB page at address 0x200000 (2MB). Opcode ""4889CE"" was generated by the NASM assembler, version 2.06 compiled on Jun 29 2009, and was dis-assembled by the graphic debugger in BOCHS PC Simulator v 2.4.1 Also, the following is the first line of code in my GP Fault (exception 13) handler, however the system is so broken by this stage, it never runs: 00:00:03.487 CPUM: 0008:0000000000210b60 4c 8d 3d 05 00 00 00 lea r15, [000000005h wrt rip] TEST NOTES IN DETAIL FOLLOW. Here I am illustrating the pertinent part of the routine, and I move the ""jmp $"" infinite-loop instruction down one place per test: === TEST 1 : Prove RCX is an OK address ======== sv_printf: ; Called from C++ ; RCX = address of message string PUSHAQ call get_kh_screen_base ; NOTE: RDI is now the screen memory base address xchg bx,bx ; DEBUG: This is just the BOCHS Pc-Simulator's breakpoint (benign otherwise) mov AL,[RCX] ; DEBUG: Prove RCX is OK (if VirtualBox doesn't crash) jmp $ ; DEBUG Infinite loop here (no Guru message if all is OK) mov RSI,RCX ; Move address of string into RSI mov AL,[RSI] ; DEBUG Prove RSI is OK (if VirtualBox doesn't crash) TEST RESULT: PASS === TEST 2 : Prove mov RSI,RCX doesn't immediately crash =========== sv_printf: ; Called from C++ ; RCX = address of message string PUSHAQ call get_kh_screen_base ; NOTE: RDI is now the screen memory base address xchg bx,bx ; DEBUG: This is just the BOCHS Pc-Simulator's breakpoint (benign otherwise) mov AL,[RCX] ; DEBUG: Prove RCX is OK (if VirtualBox doesn't crash) mov RSI,RCX ; Move address of string into RSI jmp $ ; DEBUG Infinite loop here (no Guru message if all is OK) mov AL,[RSI] ; DEBUG Prove RSI is OK (if VirtualBox doesn't crash) TEST RESULT: PASS === TEST 3 : Prove RCX's value copied into RSI OK (FAIL) =========== sv_printf: ; Called from C++ ; RCX = address of message string PUSHAQ call get_kh_screen_base ; NOTE: RDI is now the screen memory base address xchg bx,bx ; DEBUG: This is just the BOCHS Pc-Simulator's breakpoint (benign otherwise) mov AL,[RCX] ; DEBUG: Prove RCX is OK (if VirtualBox doesn't crash) mov RSI,RCX ; Move address of string into RSI mov AL,[RSI] ; DEBUG Prove RSI is OK (if VirtualBox doesn't crash) jmp $ ; DEBUG Infinite loop here (no Guru message if all is OK) TEST RESULT: FAIL I appreciate this is not a standard guest system, so may not be high priority, however, this system does run on the systems listed above, and it is odd that this crashes Virtual Box, which I would quite like to starting using. Please contact me if you need the image file of the boot floppy disc and instructions. Thanks for your time, Jonathan. " defect closed other VirtualBox 3.0.8 invalid other Windows