pstruct.html

来自「perl教程」· HTML 代码 · 共 241 行 · 第 1/2 页

HTML
241
字号
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../displayToc.js"></script>
<script language="JavaScript" src="../tocParas.js"></script>
<script language="JavaScript" src="../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../scineplex.css">
<title>pstruct - Dump C structures as generated from C&lt;cc -g -S&gt; stabs</title>
<link rel="stylesheet" href="../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>

<body>

<script>writelinks('__top__',1);</script>
<h1><a>pstruct - Dump C structures as generated from C&lt;cc -g -S&gt; stabs</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<ul>

		<li><a href="#options">OPTIONS</a></li>
	</ul>

	<li><a href="#description">DESCRIPTION</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>c2ph, pstruct - Dump C structures as generated from <code>cc -g -S</code> stabs</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
    c2ph [-dpnP] [var=val] [files ...]</pre>
<p>
</p>
<h2><a name="options">OPTIONS</a></h2>
<pre>
    Options:</pre>
<pre>
    <span class="keyword">-w</span>  <span class="variable">wide</span><span class="operator">;</span> <span class="variable">short</span> <span class="keyword">for</span><span class="operator">:</span> <span class="variable">type_width</span><span class="operator">=</span><span class="number">45</span> <span class="variable">member_width</span><span class="operator">=</span><span class="number">35</span> <span class="variable">offset_width</span><span class="operator">=</span><span class="number">8</span>
    <span class="keyword">-x</span>  <span class="keyword">hex</span><span class="operator">;</span> <span class="variable">short</span> <span class="keyword">for</span><span class="operator">:</span>  <span class="variable">offset_fmt</span><span class="operator">=x</span> <span class="variable">offset_width</span><span class="operator">=</span><span class="number">08</span> <span class="variable">size_fmt</span><span class="operator">=x</span> <span class="variable">size_width</span><span class="operator">=</span><span class="number">04</span>
</pre>
<pre>
    -n  do not generate perl code  (default when invoked as pstruct)
    -p  generate perl code         (default when invoked as c2ph)
    -v  generate perl code, with C decls as comments</pre>
<pre>
    -i  do NOT recompute sizes for intrinsic datatypes
    -a  dump information on intrinsics also</pre>
<pre>
    -t  trace execution
    -d  spew reams of debugging output</pre>
<pre>
    -slist  give comma-separated list a structures to dump</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>The following is the old c2ph.doc documentation by Tom Christiansen
&lt;<a href="mailto:tchrist@perl.com">tchrist@perl.com</a>&gt;
Date: 25 Jul 91 08:10:21 GMT</p>
<p>Once upon a time, I wrote a program called pstruct.  It was a perl
program that tried to parse out C structures and display their member
offsets for you.  This was especially useful for people looking at
binary dumps or poking around the kernel.</p>
<p>Pstruct was not a pretty program.  Neither was it particularly robust.
The problem, you see, was that the C compiler was much better at parsing
C than I could ever hope to be.</p>
<p>So I got smart:  I decided to be lazy and let the C compiler parse the C,
which would spit out debugger stabs for me to read.  These were much
easier to parse.  It's still not a pretty program, but at least it's more
robust.</p>
<p>Pstruct takes any .c or .h files, or preferably .s ones, since that's
the format it is going to massage them into anyway, and spits out
listings like this:</p>
<pre>
 <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">{</span>
   <span class="keyword">int</span>                          <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_locker</span>                         <span class="number">000</span>      <span class="number">4</span>
   <span class="keyword">int</span>                          <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_mutex_index</span>                    <span class="number">004</span>      <span class="number">4</span>
   <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">*</span>                 <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_tp_virt</span>                        <span class="number">008</span>      <span class="number">4</span>
   <span class="variable">struct</span> <span class="variable">clist</span>                 <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span>                           <span class="number">00</span><span class="variable">c</span>     <span class="number">20</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_cc</span>                      <span class="number">00</span><span class="variable">c</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_cmax</span>                    <span class="number">010</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_cfx</span>                     <span class="number">014</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_clx</span>                     <span class="number">018</span>      <span class="number">4</span>
     <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">*</span>               <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_tp_cpu</span>                  <span class="number">01</span><span class="variable">c</span>      <span class="number">4</span>
     <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">*</span>               <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_tp_iop</span>                  <span class="number">020</span>      <span class="number">4</span>
     <span class="variable">unsigned</span> <span class="variable">char</span> <span class="operator">*</span>            <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_buf_cpu</span>                 <span class="number">024</span>      <span class="number">4</span>
     <span class="variable">unsigned</span> <span class="variable">char</span> <span class="operator">*</span>            <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_rawq</span><span class="operator">.</span><span class="variable">c_buf_iop</span>                 <span class="number">028</span>      <span class="number">4</span>
   <span class="variable">struct</span> <span class="variable">clist</span>                 <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span>                           <span class="number">02</span><span class="variable">c</span>     <span class="number">20</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_cc</span>                      <span class="number">02</span><span class="variable">c</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_cmax</span>                    <span class="number">030</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_cfx</span>                     <span class="number">034</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_clx</span>                     <span class="number">038</span>      <span class="number">4</span>
     <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">*</span>               <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_tp_cpu</span>                  <span class="number">03</span><span class="variable">c</span>      <span class="number">4</span>
     <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">*</span>               <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_tp_iop</span>                  <span class="number">040</span>      <span class="number">4</span>
     <span class="variable">unsigned</span> <span class="variable">char</span> <span class="operator">*</span>            <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_buf_cpu</span>                 <span class="number">044</span>      <span class="number">4</span>
     <span class="variable">unsigned</span> <span class="variable">char</span> <span class="operator">*</span>            <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_canq</span><span class="operator">.</span><span class="variable">c_buf_iop</span>                 <span class="number">048</span>      <span class="number">4</span>
   <span class="variable">struct</span> <span class="variable">clist</span>                 <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span>                           <span class="number">04</span><span class="variable">c</span>     <span class="number">20</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_cc</span>                      <span class="number">04</span><span class="variable">c</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_cmax</span>                    <span class="number">050</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_cfx</span>                     <span class="number">054</span>      <span class="number">4</span>
     <span class="keyword">int</span>                        <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_clx</span>                     <span class="number">058</span>      <span class="number">4</span>
     <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">*</span>               <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_tp_cpu</span>                  <span class="number">05</span><span class="variable">c</span>      <span class="number">4</span>
     <span class="variable">struct</span> <span class="variable">tty</span> <span class="operator">*</span>               <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_tp_iop</span>                  <span class="number">060</span>      <span class="number">4</span>
     <span class="variable">unsigned</span> <span class="variable">char</span> <span class="operator">*</span>            <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_buf_cpu</span>                 <span class="number">064</span>      <span class="number">4</span>
     <span class="variable">unsigned</span> <span class="variable">char</span> <span class="operator">*</span>            <span class="variable">tty</span><span class="operator">.</span><span class="variable">t_outq</span><span class="operator">.</span><span class="variable">c_buf_iop</span>                 <span class="number">068</span>      <span class="number">4</span>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?