Escribiendo un primitivo Debugger.rar

  • fernayuri
    了解作者
  • Visual C++
    开发工具
  • 83KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2020-12-02 18:02
    上传日期
A guide's Translation in English
Escribiendo un primitivo Debugger.rar
  • Escribiendo un primitivo Debugger.docx
    86.4KB
内容介绍
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <meta name="generator" content="pdf2htmlEX"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css"> <link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css"> <link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/626e694d40256a40ce81d03d/raw.css"> <script src="https://static.pudn.com/base/js/compatibility.min.js"></script> <script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script> <script> try{ pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({}); }catch(e){} </script> <title></title> </head> <body> <div id="sidebar" style="display: none"> <div id="outline"> </div> </div> <div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/626e694d40256a40ce81d03d/bg1.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x1 h3 y2 ff1 fs0 fc0 sc0 ls0 ws0">E<span class="_ _0"></span>s<span class="_ _0"></span>c<span class="_ _0"></span>r<span class="_ _0"></span>i<span class="_ _0"></span>b<span class="_ _0"></span>i<span class="_ _0"></span>e<span class="_ _0"></span>n<span class="_ _0"></span>d<span class="_ _0"></span>o<span class="_ _0"></span> <span class="_ _0"></span>u<span class="_ _0"></span>n<span class="_ _0"></span> <span class="_ _0"></span>p<span class="_ _0"></span>r<span class="_ _0"></span>i<span class="_ _0"></span>m<span class="_ _0"></span>i<span class="_ _0"></span>t<span class="_ _0"></span>i<span class="_ _0"></span>v<span class="_ _0"></span>o<span class="_ _0"></span> <span class="_ _0"></span>D<span class="_ _0"></span>e<span class="_ _0"></span>b<span class="_ _0"></span>u<span class="_ _0"></span>g<span class="_ _0"></span>g<span class="_ _0"></span>e<span class="_ _0"></span>r</div><div class="t m0 x1 h4 y3 ff2 fs1 fc0 sc0 ls0 ws0">&#58881;&#58882;&#58883;&#58884;&#58885;&#58886;&#58887;&#58888;&#58889;&#58890;&#58884;&#58891;&#58883;&#58887;&#58885;&#58884;&#58882;&#58885;&#58889;&#58891;&#58892;&#58885;&#58883;&#58893;&#58892;&#58886;&#58889;&#58888;&#58888;&#58894;&#58895;&#58891;&#58885;&#58896;&#58894;&#58891;&#58883;&#58884;&#58891;&#58883;&#58887;&#58897;&#58885;&#58886;&#58884;&#58885;&#58889;&#58891;&#58892;&#58885;&#58882;&#58884;&#58893;&#58894;<span class="_ _0"></span>&#58884;&#58885;&#58886;<span class="_ _1"></span>&#58884;&#58885;&#58892;&#58893;&#58898;&#58888;&#58889;&#58899;&#58887;&#58882;&#58885;&#58884;&#58882;&#58888;&#58893;&#58894;&#58883;&#58887;&#58882;&#58885;&#58900;&#58887;&#58893;&#58885;&#58901;&#58901;&#58901;&#58901;&#58901;&#58901;&#58901;&#58901;&#58901;&#58885;<span class="_ _0"></span>&#58886;&#58884;<span class="_ _1"></span>&#58882;&#58886;&#58884;&#58885;&#58884;&#58899;&#58885;&#58902;&#58903;&#58885;&#58886;&#58884;&#58885;</div><div class="t m0 x1 h4 y4 ff2 fs1 fc0 sc0 ls0 ws0">&#58891;&#58887;&#58904;&#58894;&#58884;&#58890;&#58905;&#58893;&#58884;&#58885;&#58892;&#58899;&#58885;&#58902;&#58906;&#58885;&#58886;&#58884;&#58885;&#58886;&#58894;&#58888;&#58894;&#58884;&#58890;&#58905;&#58893;&#58884;&#58885;&#58886;&#58884;&#58899;&#58885;&#58902;&#58907;&#58908;&#58906;&#58909;&#58885;&#58881;&#58899;&#58885;&#58892;&#58893;&#58910;&#58888;&#58889;&#58899;&#58887;&#58885;&#58887;&#58893;&#58894;&#58911;&#58894;&#58891;&#58892;&#58899;&#58885;&#58884;&#58891;&#58885;&#58894;<span class="_ _0"></span>&#58891;&#58911;&#58899;&#58884;&#58882;&#58885;&#58899;&#58887;&#58885;&#58900;&#58889;&#58884;&#58886;&#58884;&#58885;&#58884;&#58891;&#58888;&#58887;&#58891;&#58883;&#58893;&#58892;&#58893;&#58885;&#58884;&#58891;&#58885; !&#58881;&#58885;&#58881;&#58891;&#58886;&#58884;&#58892;&#58904;&#58887;&#58893;&#58882;&#58885;&#58896;&#58892;&#58899;&#58885;</div><div class="t m0 x1 h4 y5 ff2 fs1 fc0 sc0 ls0 ws0">&#58890;&#58887;&#58890;&#58884;&#58891;&#58883;&#58887;&#58885;&#58886;&#58884;&#58885;&#58884;&#58882;&#58888;&#58893;&#58894;&#58905;&#58894;&#58893;&#58882;&#58884;&#58885;&#58884;&#58882;&#58883;&#58892;&#58885;&#58883;&#58893;&#58892;&#58886;&#58889;&#58888;&#58888;&#58894;&#58895;&#58891;&#58897;&#58909;&#58885;</div><div class="t m0 x1 h4 y6 ff2 fs1 fc0 sc0 ls0 ws0">"&#58884;&#58882;&#58888;&#58893;&#58894;&#58905;&#58884;&#58885;&#58888;&#58895;&#58890;&#58887;&#58885;&#58894;&#58890;&#58900;&#58899;&#58884;&#58890;&#58884;&#58891;&#58883;&#58892;&#58893;&#58885;&#58899;&#58892;&#58882;&#58885;#&#58889;&#58891;&#58888;&#58894;&#58887;&#58891;&#58892;&#58899;&#58894;&#58886;&#58892;&#58886;&#58884;&#58882;&#58885;&#58890;$&#58891;&#58894;&#58890;&#58892;&#58882;&#58885;&#58900;&#58892;&#58893;&#58892;&#58885;&#58889;&#58891;&#58885;<span class="_ _0"></span>"&#58884;<span class="_ _1"></span>&#58905;&#58889;&#58911;&#58911;&#58884;&#58893;&#58885;&#58884;&#58891;&#58885;&#58899;&#58892;&#58885;<span class="_ _2"></span>&#58900;&#58899;&#58892;&#58883;&#58892;#&#58887;&#58893;&#58890;&#58892;&#58885;%&#58894;&#58891;&#58886;&#58887;&amp;&#58882;&#58885;&#58884;&#58891;&#58885;&#58899;&#58892;&#58885;</div><div class="t m0 x1 h4 y7 ff2 fs1 fc0 sc0 ls0 ws0">&#58892;&#58893;'&#58889;&#58894;&#58883;&#58884;&#58888;&#58883;&#58889;&#58893;&#58892;&#58885;()*+(*&#58906;&#58909;&#58885;&#58881;&#58899;&#58885;&#58890;&#58894;&#58882;&#58890;&#58887;&#58885;&#58888;&#58887;&#58891;&#58882;&#58883;&#58892;&#58885;&#58886;&#58884;&#58885;&#58888;&#58894;&#58891;&#58888;&#58887;&#58885;&#58900;&#58892;&#58893;&#58883;&#58884;&#58882;&#58885;,-&#58893;&#58894;&#58911;&#58894;&#58891;&#58892;&#58899;&#58890;&#58884;&#58891;&#58883;&#58884;&#58885;&#58884;&#58893;&#58892;&#58885;&#58889;&#58891;&#58885;&#58892;&#58893;&#58898;&#58888;&#58889;&#58899;&#58887;&#58885;&#58882;&#58884;&#58900;&#58892;&#58893;&#58892;&#58886;&#58885;&#58900;&#58887;&#58893;&#58885;&#58888;&#58892;&#58886;&#58892;&#58885;&#58889;&#58891;<span class="_ _0"></span>&#58892;.&#58888;<span class="_ _1"></span>&#58887;&#58890;&#58887;&#58885;</div><div class="t m0 x1 h4 y8 ff2 fs1 fc0 sc0 ls0 ws0">&#58882;&#58894;&#58911;&#58889;&#58884;&#58909;</div><div class="t m0 x2 h5 y9 ff3 fs2 fc0 sc0 ls0 ws0">&#61623;<span class="_ _3"> </span><span class="ff4">Lo B&#225;sico</span></div><div class="t m0 x2 h5 ya ff3 fs2 fc0 sc0 ls0 ws0">&#61623;<span class="_ _3"> </span><span class="ff4">A&#241;adiendo y Removiendo Puntos de Ruptura, Ejecuci&#243;n paso a paso</span></div><div class="t m0 x2 h5 yb ff3 fs2 fc0 sc0 ls0 ws0">&#61623;<span class="_ _3"> </span><span class="ff4">La Pila de Llamadas, los Registros, los Contextos</span></div><div class="t m0 x2 h5 yc ff3 fs2 fc0 sc0 ls0 ws0">&#61623;<span class="_ _3"> </span><span class="ff4">Los s&#237;mbolos de depuraci&#243;n</span></div><div class="t m0 x2 h5 yd ff3 fs2 fc0 sc0 ls0 ws0">&#61623;<span class="_ _3"> </span><span class="ff4">Caracter&#237;sticas Miscel&#225;neas</span></div><div class="t m0 x1 h4 ye ff2 fs1 fc0 sc0 ls0 ws0">/&#58899;&#58885;0&#58891;&#58892;&#58899;&#58885;&#58882;&#58884;&#58885;1&#58889;&#58891;&#58883;&#58892;&#58891;&#58885;&#58899;&#58887;&#58882;&#58885;&#58888;&#58887;&#58890;&#58884;&#58891;&#58883;&#58892;&#58893;&#58894;&#58887;&#58882;&#58885;&#58886;&#58884;&#58885;&#58899;&#58887;&#58882;&#58885;&#58888;&#58894;&#58891;&#58888;&#58887;&#58885;&#58892;&#58893;&#58898;&#58888;&#58889;&#58899;&#58887;&#58882;&#58885;&#58896;&#58882;&#58887;&#58899;&#58887;&#58885;&#58884;&#58899;&#58885;&#58900;&#58893;&#58894;<span class="_ _0"></span>&#58890;&#58884;&#58893;&#58887;&#58885;&#58883;&#58884;&#58891;&#58894;&#58892;&#58885;&#58888;&#58887;&#58890;&#58884;&#58891;&#58883;&#58892;&#58893;&#58894;&#58887;&#58882;&#58897;&#58909;</div><div class="t m0 x1 h5 yf ff4 fs2 fc0 sc0 ls0 ws0">El c&#243;digo completo referente a esto puede ser encontrado aqu&#237;. Destacar<span class="_ _1"></span> que fue usado el est&#225;ndar C + +11, </div><div class="t m0 x1 h5 y10 ff4 fs2 fc0 sc0 ls0 ws0">as&#237; es que MSVC 2012/2013 esta requerido.</div><div class="t m0 x1 h6 y11 ff5 fs3 fc0 sc0 ls0 ws0">Escribiendo Un Depurador Primitivo: Parte 1 (Lo B&#225;sico)</div><div class="t m0 x1 h4 y12 ff2 fs1 fc0 sc0 ls0 ws0">2&#58892;&#58893;&#58892;&#58885;&#58899;&#58887;&#58882;&#58885;&#58886;&#58884;&#58882;&#58892;&#58893;&#58893;&#58887;&#58899;&#58899;&#58892;&#58886;&#58887;&#58893;&#58884;&#58882;&#58885;&#58886;&#58884;&#58885;&#58882;&#58887;3&amp;&#58892;&#58893;&#58884;&#58885;&#58896;&#58887;&#58885;&#58894;&#58891;&#58911;&#58884;&#58891;&#58894;&#58884;&#58893;&#58887;&#58882;&#58885;&#58894;&#58891;&#58904;&#58884;&#58893;&#58882;&#58887;&#58882;&#58897;4&#58885;&#58899;&#58887;&#58882;&#58885;&#58886;&#58884;&#58900;<span class="_ _0"></span>&#58889;&#58893;&#58892;&#58886;&#58887;&#58893;&#58884;&#58882;&#58885;&#58882;&#58887;&#58891;&#58885;&#58889;&#58891;&#58892;&#58885;5&#58884;&#58893;&#58893;&#58892;&#58890;&#58894;&#58884;&#58891;&#58883;&#58892;&#58885;&#58894;&#58891;&#58904;&#58892;&#58899;&#58889;&#58892;&#58905;&#58899;&#58884;&#58909;&#58885;</div><div class="t m0 x1 h4 y13 ff2 fs1 fc0 sc0 ls0 ws0">6&#58894;&#58884;&#58891;&#58884;&#58891;&#58885;&#58884;&#58891;&#58885;&#58888;&#58889;&#58884;&#58891;&#58883;&#58892;&#58885;&#58892;&#58891;7&#58899;&#58894;&#58882;&#58894;&#58882;&#58885;&#58884;&#58891;&#58885;&#58910;&#58884;&#58890;&#58900;&#58887;&#58885;&#58886;&#58884;&#58885;&#58884;1&#58884;&#58888;&#58889;&#58888;&#58894;&#58895;&#58891;&#58885;&#58884;&#58885;&#58894;&#58891;&#58883;&#58893;&#58887;&#58882;&#58900;&#58884;<span class="_ _0"></span>&#58888;&#58888;<span class="_ _1"></span>&#58894;&#58895;&#58891;&#58885;+&#58888;&#58887;&#58890;&#58900;&#58893;&#58884;&#58891;&#58882;&#58894;&#58895;&#58891;&#58885;&#58886;&#58884;&#58899;&#58885;&#58900;&#58893;&#58887;&#58911;&#58893;&#58892;&#58890;&#58892;&#58885;&#58900;&#58892;&#58893;&#58892;&#58885;&#58884;&#58891;&#58888;&#58887;&#58891;&#58883;&#58893;&#58892;&#58893;&#58885;&#58888;&#58895;&#58890;&#58887;&#58885;</div><div class="t m0 x1 h4 y14 ff2 fs1 fc0 sc0 ls0 ws0">&#58883;&#58893;&#58892;&#58905;&#58892;1&#58892;&#58885;&#58887;&#58885;#&#58893;&#58884;&#58888;&#58889;&#58884;&#58891;&#58883;&#58884;&#58890;&#58884;&#58891;&#58883;&#58884;&#58885;&#58888;&#58887;&#58890;&#58887;&#58885;&#58891;&#58887;&#58885;&#58899;&#58887;&#58885;5&#58892;&#58888;&#58884;&#58909;&#58885;&#58881;&#58882;&#58883;&#58884;&#58885;&#58892;&#58893;&#58898;<span class="_ _0"></span>&#58888;&#58889;&#58899;&#58887;<span class="_ _1"></span>&#58885;&#58894;&#58893;7&#58885;&#58892;&#58899;&#58885;&#58894;&#58891;&#58883;&#58884;&#58893;&#58894;&#58887;&#58893;&#58885;&#58886;&#58884;&#58885;&#58888;&#58895;&#58890;&#58887;&#58885;&#58883;&#58893;&#58892;&#58905;&#58892;1&#58892;&#58891;&#58885;8&#58885;&#58888;&#58895;&#58890;&#58887;&#58885;&#58886;&#58884;&#58882;<span class="_ _0"></span>&#58892;&#58893;&#58893;&#58887;&#58899;&#58899;&#58892;&#58893;&#58885;&#58889;&#58891;&#58885;</div><div class="t m0 x1 h4 y15 ff2 fs1 fc0 sc0 ls0 ws0">&#58886;&#58884;&#58900;&#58889;&#58893;&#58892;&#58886;&#58887;&#58893;&#58885;&#58900;&#58893;&#58894;&#58890;&#58894;&#58910;&#58904;&#58887;&#58885;&#58900;&#58892;&#58893;&#58892;&#58885;&#58899;&#58892;&#58885;&#58900;&#58899;&#58892;&#58883;&#58892;#&#58887;&#58893;&#58890;&#58892;&#58885;%&#58894;&#58891;&#58886;&#58887;&amp;&#58882;&#58885;&#58884;&#58891;&#58885;&#58899;&#58892;&#58885;&#58892;&#58893;'<span class="_ _0"></span>&#58889;&#58894;&#58883;&#58884;&#58888;<span class="_ _1"></span>&#58883;&#58889;&#58893;&#58892;&#58885;()*+(*&#58906;&#58909;</div><div class="t m0 x1 h7 y16 ff1 fs2 fc1 sc0 ls0 ws0">Conectando/Desconectando</div><div class="t m0 x1 h5 y17 ff4 fs2 fc0 sc0 ls0 ws0">Para depurar un proceso, un debugger debe conectar con el mismo. Esto quiere decir<span class="_ _1"></span> que deber&#237;a haber una </div><div class="t m0 x1 h5 y18 ff4 fs2 fc0 sc0 ls0 ws0">forma para que el depurador pueda interactuar con el proceso de tal manera que<span class="_ _1"></span> tenga acceso al espacio de la</div><div class="t m0 x1 h5 y19 ff4 fs2 fc0 sc0 ls0 ws0">direcci&#243;n de procesos, la habilidad de parar y continuar<span class="_ _1"></span> la ejecuci&#243;n, modificar registros, etc&#233;tera. </div><div class="t m0 x1 h5 y1a ff4 fs2 fc0 sc0 ls0 ws0">Asimismo, un depurador deber&#237;a ser capaz de desconectarse con seguridad de<span class="_ _1"></span> un proceso y dejarlo continuar</div><div class="t m0 x1 h5 y1b ff4 fs2 fc0 sc0 ls0 ws0">con la ejecuci&#243;n cuando una sesi&#243;n de correcci&#243;n de errores ha terminado. En<span class="_ _1"></span> la plataforma Windows esto </div><div class="t m0 x1 h5 y1c ff4 fs2 fc0 sc0 ls0 ws0">se logra llamando la funci&#243;n DebugActiveProcess y especificando el identificador<span class="_ _1"></span> del proceso objetivo. </div><div class="t m0 x1 h5 y1d ff4 fs2 fc0 sc0 ls0 ws0">Alternativamente, tambi&#233;n puede llamarse a CreateProcess<span class="_ _1"></span> con las banderas de creaci&#243;n </div><div class="t m0 x1 h5 y1e ff4 fs2 fc0 sc0 ls0 ws0">DEBUG_PROCESS o DEBUG_ONLY_THIS_PROCESS. Este &#250;ltimo m&#233;todo crear&#225; un nuevo proceso y </div><div class="t m0 x1 h5 y1f ff4 fs2 fc0 sc0 ls0 ws0">lo conectar&#225; con el debugger, en vez de conectar con uno que ya<span class="_ _1"></span> est&#225; en ejecuci&#243;n. Una vez que conect&#243;, el </div><div class="t m0 x1 h5 y20 ff4 fs2 fc0 sc0 ls0 ws0">depurador puede especificar un modo de proceder con la desconexi&#243;n,<span class="_ _1"></span> pudiendo matar el proceso con </div><div class="t m0 x1 h5 y21 ff4 fs2 fc0 sc0 ls0 ws0">DebugSetProcessKillOnExit. O finalmente, llamar a DebugActiveProcessStop para una desconexi&#243;n s<span class="_ _1"></span>egura </div><div class="t m0 x1 h5 y22 ff4 fs2 fc0 sc0 ls0 ws0">que permitir&#237;a al proceso continuar su ejecuci&#243;n. Juntando todo<span class="_ _1"></span> estos se produce un c&#243;digo parecido al </div><div class="t m0 x1 h5 y23 ff4 fs2 fc0 sc0 ls0 ws0">siguiente:</div><div class="t m0 x1 h4 y24 ff2 fs1 fc2 sc0 ls0 ws0">&#58888;&#58887;&#58891;&#58882;&#58883;<span class="fc0">&#58885;</span>&#58905;&#58887;&#58887;&#58899;<span class="fc0">&#58885;"&#58884;&#58905;&#58889;&#58911;&#58911;&#58884;&#58893;<span class="fc3">99<span class="fc4">:&#58883;&#58892;&#58893;&#58883;<span class="fc5">&#58896;&#58897;</span></span></span></span></div><div class="t m0 x1 h4 y25 ff2 fs1 fc5 sc0 ls0 ws0">;</div><div class="t m0 x1 h4 y26 ff2 fs1 fc0 sc0 ls0 ws0">&#58885;&#58885;&#58885;&#58885;&#58890;&#58901;&#58905;&lt;&#58882;/&#58888;&#58910;&#58904;&#58884;&#58885;<span class="fc6">=</span>&#58885;&gt;--?&lt;@A<span class="fc5">&#58896;</span>"&#58884;&#58905;&#58889;&#58911;/&#58888;&#58910;&#58904;&#58884;2&#58893;&#58887;&#58888;&#58884;&#58882;&#58882;<span class="fc5">&#58896;</span>&#58890;&#58901;&#58886;&amp;2&#58893;&#58887;&#58888;&#58884;&#58882;&#58882;&lt;&#58886;<span class="_ _1"></span><span class="fc5">&#58897;&#58897;<span class="fc3">B</span></span></div><div class="t m0 x1 h4 y27 ff2 fs1 fc0 sc0 ls0 ws0">&#58885;&#58885;&#58885;&#58885;<span class="fc2">&#58894;#</span>&#58885;<span class="fc5">&#58896;</span>&#58890;&#58901;&#58905;&lt;&#58882;/&#58888;&#58910;&#58904;&#58884;<span class="fc5">&#58897;</span></div><div class="t m0 x1 h4 y28 ff2 fs1 fc0 sc0 ls0 ws0">&#58885;&#58885;&#58885;&#58885;<span class="fc5">;</span></div></div></div><div class="pi" data-data='{"ctm":[1.611850,0.000000,0.000000,1.611850,0.000000,0.000000]}'></div></div> </body> </html>
评论
    相关推荐