2013-11-04 14 views
5

मैं क्यूमु के लिए नया हूं और मैंने पढ़ा है कि यह सिंगलस्टेप मोड इम्यूलेशन के लिए अनुमति देता है। यह सहायक है क्योंकि मैं हर चक्र में भौतिक राम के कुछ पतों को डंप करने की कोशिश कर रहा हूं। दुर्भाग्यवश, क्यूमू दस्तावेज बहुत खराब है। मुझे पता है कि क्यूमु मॉनीटर से सिंगलस्टेप मोड को कैसे सक्षम किया जाए, लेकिन मुझे नहीं पता कि कोड को कहां रखना है जिसे मैं हर चरण में निष्पादित करना चाहता हूं। क्या किसी के पास इस बारे में कोई जानकारी है?क्यूईएमयू में एकल चरण मोड का उपयोग कैसे करें?

+0

क्या @peter से उत्तर आपकी मदद करता है? – stackoverflowwww

+1

संबंधित: https://reverseengineering.stackexchange.com/questions/4738/using-qemu-monitor-interface-to-extract-execution-traces-from-a-binary –

उत्तर

0

आप QEMU को

--gdb टीसीपी के साथ अतिथि को संलग्न करने के लिए gdb उपयोग कर सकते हैं ::

विकल्प और उसके बाद का उपयोग

$ gdb <binary> 
(gdb) symbol-file <sym file> 
(gdb) target remote <host>:<port number> 
(gdb) b <function> 
(gdb) c 

'बी' के एक ब्रेकपाइंट सेट। कोड के बावजूद 'n' '' 'i' का उपयोग किया जा सकता है। gdb मोड में "जानकारी" में प्रवेश कर और अधिक जानकारी

+0

और अच्छी तरह से -singlestep मोड है - सुनिश्चित नहीं है कि कैसे यह काम करता है - शायद यह जीडीबी के लिए प्रत्येक चरण में एक ब्रेकपॉइंट उठाता है? –

+0

यहां एक और विस्तृत QEMU GDB सेटअप मार्गदर्शिका है: https://stackoverflow.com/a/33203642/895245 –

0

http://www.xenproject.org/help/questions-and-answers/problem-with-vga-passthrough.html

लिंक ऊपर से QEMU के लिए singlestep मोड में प्रवेश करने के लिए आदेश पंक्ति विकल्प है दिखाएगा। do_singlestep (मॉनिटर * मोन, स्थिरांक QDict * qdict)

बस एक झंडा "singlestep" सेट: अगली QEMU (http://wiki.qemu.org/Download)

के लिए समारोह monitor.c स्रोत कोड प्राप्त करने के लिए है। ध्यान दें कि यह "singlestep_enabled" जैसा नहीं है, जो हार्डवेयर सिंगलस्टेप इम्यूलेशन का अनुकरण करना है।

(वैश्विक var vl.c में घोषित किया गया है)।

अब targt-i386/translate.c में सभी कार्यों की जांच - जहां "singlestep" झंडा परीक्षण कर रहे हैं कर रहे हैं:

if (singlestep) { 
     gen_jmp_im(pc_ptr - dc->cs_base); 
     gen_eob(dc); 
     break; 
    } 

इस स्थान पर बाइनरी या तो क्रियान्वित कर रहे हैं (या "अनुवाद" है अधिक सटीक होने के लिए), या अन्यथा हार्डवेयर अपवाद उठाया और हैंडलर (उदाहरण के लिए)। यदि कोई ऐसा व्यवहार है जिसे आप संशोधित करना चाहते हैं तो शायद आप यहां आज़मा सकते हैं?

संबंधित मुद्दे