There is strange thing is here :
EIP register is set to 0xc10094d1.
When I modify the opcode at the address 0xc10094d1 to 0xc10094d2 to 0x9090 (NOP, NOP) , and then issue a "si" ( single step – step one instruction exactly, the EIP jump from 0xc10094d1 to 0xc10094ef.
I expect it to jump from 0xc10094d1 to 0xc10094d2 but the system jump from 0xc10094d1 to 0xc10094ef.
Can anyone advice what is the problem here ?
- - monitor mdw [addr] à read one byte opcode
- - monitor mww [add] [val] -> write one byte opcode
- - monitor reg ( dump all the registers in lakemont CPU )
- - "si" command is single step
Did you build your own custom image, if so, what changes did you apply, what features have you added?
Did you modify the boot/grub/grub.conf, if so, what did you change?
Additionally what steps you followed that led you to this issue, did you follow any guides?
Finally, remember the user that the Quark Debug Operations guide states:
The core automatically resets EIP after each instruction while in Probe Mode. This is done to prevent segment violations and triggering breakpoints while in Probe Mode"
Hi Sergio ;
Thanks or the reply here.
The problem that the "si" command didnt work is because the previous instruction before the EIP 0xc10094ef is "HLT" ( which is at EIP 0xc10094ee) and causing the CPU to stuck at this LIP when "si" command is sent to the OpenOCD.
Modify the HLT instruction at EIP 0xc10094ee to NOP then only load my assembly program at EIP 0xc10094ef, I able to get my assembly source executed.