<html lang="en">
<head>
<title>Architectures In Python - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Python-API.html#Python-API" title="Python API">
<link rel="prev" href="Lazy-Strings-In-Python.html#Lazy-Strings-In-Python" title="Lazy Strings In Python">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.

(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
</head>
<body>
<div class="node">
<a name="Architectures-In-Python"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="Lazy-Strings-In-Python.html#Lazy-Strings-In-Python">Lazy Strings In Python</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Python-API.html#Python-API">Python API</a>
<hr>
</div>

<h5 class="subsubsection">23.2.2.33 Python representation of architectures</h5>

<p><a name="index-Python-architectures-2434"></a>
<span class="sc">gdb</span> uses architecture specific parameters and artifacts in a
number of its various computations.  An architecture is represented
by an instance of the <code>gdb.Architecture</code> class.

   <p>A <code>gdb.Architecture</code> class has the following methods:

<div class="defun">
&mdash; Function: <b>Architecture.name</b> ()<var><a name="index-Architecture_002ename-2435"></a></var><br>
<blockquote><p>Return the name (string value) of the architecture. 
</p></blockquote></div>

<div class="defun">
&mdash; Function: <b>Architecture.disassemble</b> (<var>start_pc </var><span class="roman">[</span><var>, end_pc </var><span class="roman">[</span><var>, count</var><span class="roman">]]</span>)<var><a name="index-Architecture_002edisassemble-2436"></a></var><br>
<blockquote><p>Return a list of disassembled instructions starting from the memory
address <var>start_pc</var>.  The optional arguments <var>end_pc</var> and
<var>count</var> determine the number of instructions in the returned list. 
If both the optional arguments <var>end_pc</var> and <var>count</var> are
specified, then a list of at most <var>count</var> disassembled instructions
whose start address falls in the closed memory address interval from
<var>start_pc</var> to <var>end_pc</var> are returned.  If <var>end_pc</var> is not
specified, but <var>count</var> is specified, then <var>count</var> number of
instructions starting from the address <var>start_pc</var> are returned.  If
<var>count</var> is not specified but <var>end_pc</var> is specified, then all
instructions whose start address falls in the closed memory address
interval from <var>start_pc</var> to <var>end_pc</var> are returned.  If neither
<var>end_pc</var> nor <var>count</var> are specified, then a single instruction at
<var>start_pc</var> is returned.  For all of these cases, each element of the
returned list is a Python <code>dict</code> with the following string keys:

          <dl>
<dt><code>addr</code><dd>The value corresponding to this key is a Python long integer capturing
the memory address of the instruction.

          <br><dt><code>asm</code><dd>The value corresponding to this key is a string value which represents
the instruction with assembly language mnemonics.  The assembly
language flavor used is the same as that specified by the current CLI
variable <code>disassembly-flavor</code>.  See <a href="Machine-Code.html#Machine-Code">Machine Code</a>.

          <br><dt><code>length</code><dd>The value corresponding to this key is the length (integer value) of the
instruction in bytes.

        </dl>
        </p></blockquote></div>

   </body></html>

