From: César <div...@gm...> - 2012-01-27 16:43:50
|
Hi, thank you, your comments were very helpful. César. 2012/1/24 Stanislav <stl...@gm...>: > Hi, > > Of course you cannot use functions like read_RMW_virtual_byte because of two > reasons: > a) you don’t understand what the function does > this particular function does checks store access permission > and call for OS exception if store permission check fail > I guess checking for store permission for load > instruction is not very good idea :) > b) In general you won't like to affect guest code with your > instrumentation, definition not cause guest code exceptions. > If you want to read guest memory on physical address you have > dbg_ function to do it. One to read memory and another one to translate > linear address to physical. > Look on the debugger code - it has plenty of examples. > > For having smth like - just in case I am working on this :) > But don't expect any working prototype in next month or two - it will take a > lot of time. > > Stanislav > > P.S> BTW in your instrumentation code you have a problem. > You read ins->b1() which is meaningless. Real opcode could 2-byte or even > 3-byte but b1() is truncated to 8 bit only. > So opcode 0x10 and 2-byte opcode 0x0f 0x10 will look the same for you (same > b1()). > You should use i->getIaOpcode() instead. So in your case it will be like: > > switch (ins->getIaOpcode ()) { > case BX_IA_CMP_EbIb: > printCmp(ins, 1, AL, ins->Ib()); > break; > case BX_IA_CMP_EwIw: // cmp ax, imm16 > printCmp(ins, 2, EAX, ins->Id()); > break; > case BX_IA_CMP_EdId: // cmp eax, > printCmp(ins, 2, EAX, ins->Id()); > break; > } > > And etc. For every uniq opcode there is uniq enum in getIaOpcode() > > -----Original Message----- > From: César [mailto:div...@gm...] > Sent: Tuesday, January 24, 2012 11:55 PM > To: Stanislav > Cc: boc...@li... > Subject: Re: [Bochs-developers] Fetch Operands > > Hi, thank you Stanislav. > > I mean the actual value used to compute the outcome of the instruction, > > I know how the opcode/operands are encoded in the instruction and, indeed, I > did some work to 'parse' its prefix/opcode/modRm/* fields and check if the > current instruction is relevant to the experiment. > However the modR/m part is a bit trickier and I tried to use the same > function that bochs does (that pointed by i->ResolveModrm), but apparently > when the following line execute it mess something in the O.S memory and it > doesn't boot: > > BX_CPU_C::read_RMW_virtual_dword(ins->seg(), eaddr); > > I think would be great to have is something like: > > bxInstruction::howManyOperands(); > bxInstruction::getOperand( Bit8u ); > > An part of my previous instrumentation code is attached. > > > César. > > 2012/1/24 Stanislav <stl...@gm...>: >> What do you mean the value of first operand ? >> >> If you have instruction like: >> >> cmp ecx, [ebx+esp+2] >> >> what is going to be a first operand ? BX_32BIT_REG_ECX (equal to 1) ? >> or actual value of ecx register ? >> what is going to be a second operand ? Here it is a memory location, >> so the second operand is not very well defined. >> >> Anyway, for each and every instruction operands defined differently, >> some reg from nnn() and write to rm(), most of the instruction do vise > versa. >> Some instructions access memory, some not, some instructions access >> even multiple memory locations. >> >> Stanislav >> >> -----Original Message----- >> From: César [mailto:div...@gm...] >> Sent: Tuesday, January 24, 2012 7:40 PM >> To: boc...@li... >> Subject: [Bochs-developers] Fetch Operands >> >> Hi, >> >> What is the easiest way to get an instruction operand data? For >> example, lets say the current instruction is a CMP r/m32, r32, how >> obtain the value of the first operand (the r/m32 part) ? >> >> I tried to use: >> >> bx_address eaddr = BX_CPU_CALL_METHODR(ins->ResolveModrm, (ins)); >> op1 = BX_CPU_C::read_RMW_virtual_dword(ins->seg(), eaddr); >> >> (with the proper checks for ensuring the first operand is r/m32). >> However, strange results show up and the O.S doesn't boot. >> >> >> thanks in advance. >> César. >> >> ---------------------------------------------------------------------- >> ------ >> -- >> Keep Your Developer Skills Current with LearnDevNow! >> The most comprehensive online learning library for Microsoft >> developers is just $99.99! Visual Studio, SharePoint, SQL - plus >> HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you > subscribe now! >> http://p.sf.net/sfu/learndevnow-d2d >> _______________________________________________ >> bochs-developers mailing list >> boc...@li... >> https://lists.sourceforge.net/lists/listinfo/bochs-developers >> > |