InglésFrancésCursos de

icono de página de OnWorks

pstruct - Online en la nube

Ejecute pstruct en el proveedor de alojamiento gratuito de OnWorks sobre Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS

Este es el comando pstruct que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.

PROGRAMA:

NOMBRE


c2ph, pstruct - Estructuras de volcado de C generadas a partir de las puñaladas "cc -g -S"

SINOPSIS


c2ph [-dpnP] [var = val] [archivos ...]

OPCIONES
Opciones:

-w de ancho; abreviatura de: type_width = 45 member_width = 35 offset_width = 8
-x hex; abreviatura de: offset_fmt = x offset_width = 08 size_fmt = x size_width = 04

-n no genera código perl (predeterminado cuando se invoca como pstruct)
-p genera código perl (predeterminado cuando se invoca como c2ph)
-v genera código perl, con C decl como comentarios

-no recalculo tamaños para tipos de datos intrínsecos
-un volcado de información sobre intrínsecos también

-t rastrea la ejecución
-d arroja montones de resultados de depuración

-slist da a la lista separada por comas una estructura para volcar

DESCRIPCIÓN


La siguiente es la antigua documentación c2ph.doc de Tom Christiansen[email protected]>
Fecha: 25 de julio de 91 08:10:21 GMT

Érase una vez, escribí un programa llamado pstruct. Era un programa de Perl que intentaba
analizar las estructuras de C y mostrar sus compensaciones de miembros. Esto fue especialmente
útil para personas que buscan volcados binarios o hurgan en el kernel.

Pstruct no fue un programa bonito. Tampoco fue particularmente robusto. El problema tu
ver, fue que el compilador de C era mucho mejor analizando C de lo que yo podría esperar ser.

Así que me volví inteligente: decidí ser perezoso y dejar que el compilador de C analizara el C, que escupiría
el depurador apuñala para que lo lea. Estos fueron mucho más fáciles de analizar. Todavía no es un
bonito programa, pero al menos es más robusto.

Pstruct toma cualquier archivo .co .h, o preferiblemente .s, ya que ese es el formato que tiene.
va a masajearlos de todos modos, y escupe listados como este:

estructura tty {
int tty.t_locker 000 4
int tty.t_mutex_index 004 4
estructura tty * tty.t_tp_virt 008 4
estructura clist tty.t_rawq 00c 20
inttty.t_rawq.c_cc 00c 4
int tty.t_rawq.c_cmax 010 4
inttty.t_rawq.c_cfx 014 4
inttty.t_rawq.c_clx 018 4
estructura tty * tty.t_rawq.c_tp_cpu 01c 4
estructura tty * tty.t_rawq.c_tp_iop 020 4
carácter sin firmar * tty.t_rawq.c_buf_cpu 024 4
carácter sin firmar * tty.t_rawq.c_buf_iop 028 4
estructura clist tty.t_canq 02c 20
int tty.t_canq.c_cc 02c 4
int tty.t_canq.c_cmax 030 4
inttty.t_canq.c_cfx 034 4
int tty.t_canq.c_clx 038 4
estructura tty * tty.t_canq.c_tp_cpu 03c 4
estructura tty * tty.t_canq.c_tp_iop 040 4
carácter sin firmar * tty.t_canq.c_buf_cpu 044 4
carácter sin firmar * tty.t_canq.c_buf_iop 048 4
estructura clist tty.t_outq 04c 20
int tty.t_outq.c_cc 04c 4
int tty.t_outq.c_cmax 050 4
int tty.t_outq.c_cfx 054 4
int tty.t_outq.c_clx 058 4
estructura tty * tty.t_outq.c_tp_cpu 05c 4
estructura tty * tty.t_outq.c_tp_iop 060 4
carácter sin firmar * tty.t_outq.c_buf_cpu 064 4
carácter sin firmar * tty.t_outq.c_buf_iop 068 4
(* int) () tty.t_oproc_cpu 06c 4
(* int) () tty.t_oproc_iop 070 4
(* int) () tty.t_stopproc_cpu 074 4
(* int) () tty.t_stopproc_iop 078 4
estructura hilo * tty.t_rsel 07c 4

etc.

En realidad, esto fue generado por un conjunto particular de opciones. Puedes controlar el
formato de cada columna, ya sea que prefiera ancho o grueso, hexadecimal o decimal, ceros iniciales
o lo que sea.

Todo lo que necesita para poder usar esto es un compilador de C que genera puñaladas al estilo BSD / GCC.
Los -g en los compiladores BSD nativos y GCC debería obtener esto para usted.

Para obtener más información, escriba una opción falsa, como - \?, y aparecerá un mensaje de uso prolongado.
previsto. Hay muchas posibilidades.

Si solo es un programador en C, este es el final del mensaje para usted. Puedes salir
ahora mismo, y si lo desea, guarde la fuente y ejecútela cuando lo desee. O
no.

Pero si eres un programador de Perl, entonces tengo algo mucho más maravilloso que
sólo una impresora offset de estructura.

Verá, si llama a pstruct por su otra incibernación, c2ph, tiene un generador de código
que traduce el código C en código Perl. Bueno, estructura y declaraciones sindicales al menos,
pero eso es bastante.

Antes de este punto, cualquiera que programara en perl y quisiera interactuar con programas en C,
como el kernel, se vio obligado a adivinar los diseños de las estructuras C, y luego cablear
estos en su programa. Por supuesto, cuando llevó su programa maravillosamente elaborado a un
sistema donde la estructura sgtty estaba dispuesta de manera diferente, su programa se rompió. El cual es un
vergüenza.

Hemos tenido el traductor h2ph de Larry, que ayudó, pero que solo funciona con símbolos cpp, no
real C, que también era muy necesaria. Lo que te ofrezco es una forma simbólica de llegar a
todas las estructuras C. Los he expresado en términos de paquetes y funciones. Considera el
siguiente programa:

#! / usr / local / bin / perl

require 'syscall.ph';
require 'sys / time.ph';
require 'sys / resource.ph';

$ ru = "\ 0" x & rusage'sizeof ();

syscall (& SYS_getrusage, & RUSAGE_SELF, $ ru) && die "getrusage: $!";

@ru = desempaquetar ($ t = & rusage'typedef (), $ ru);

$ utime = $ ru [& rusage'ru_utime + & timeval'tv_sec]
+ ($ ru [& rusage'ru_utime + & timeval'tv_usec]) / 1e6;

$ stime = $ ru [& rusage'ru_stime + & timeval'tv_sec]
+ ($ ru [& rusage'ru_stime + & timeval'tv_usec]) / 1e6;

printf "ha utilizado% 8.3fs +% 8.3fu segundos. \ n", $ utime, $ stime;

Como ve, el nombre del paquete es el nombre de la estructura. Los campos regulares son solo
sus propios nombres. Además, se proporcionan las siguientes funciones de acceso para su conveniencia:

estructura Esto no toma argumentos, y es simplemente el número de primer nivel
elementos de la estructura. Usarías esto para indexar
en matrices de estructuras, tal vez así

$ usec = $ u [& user'u_utimer
+ (& ITIMER_VIRTUAL * & itimerval'struct)
+ & itimerval'it_value
+ & timeval'tv_usec
];

sizeof Devuelve los bytes en la estructura, o el miembro si
le pasa un argumento, como

& rusage'sizeof (& rusage'ru_utime)

typedef Esta es la definición de formato perl para pasar a empaquetar y
deshacer. Si pides el typedef de una nada, obtienes
toda la estructura, de lo contrario obtienes la del miembro
usted pide. El acolchado está cuidado, al igual que la magia de
Garantizar que un sindicato se descomprime en todos sus alias.
Sin embargo, los campos de bits aún no son compatibles.

offsetof Esta función es el byte offset en la matriz de ese
miembro. Es posible que desee utilizar esto para indexar directamente
en la estructura empaquetada con vec () si eres demasiado vago
para desembalarlo.

typeof No debe confundirse con la función de acceso typedef, este
uno devuelve el tipo C de ese campo. Esto permitiría
que imprima una bonita impresión estructurada de algunos
estructura sin anudar nada al respecto de antemano.
No hay argumentos para este es un error. Algún día publicaré tal
algo para deshacerse de su estructura U por usted.

La forma en que veo que se usa esto es básicamente esto:

% h2ph /usr/lib/perl/tmp.ph
% c2ph some_include_file.h >> /usr/lib/perl/tmp.ph
% Instalar en pc

Es un poco engañoso con c2ph porque tienes que conseguir las inclusiones correctas. No puedo saber
esto para su sistema, pero no suele ser demasiado difícil.

El código no es bonito como mencioné; nunca pensé que sería un programa de 1000 líneas
cuando comencé, o puede que no haya comenzado. :-) Pero hubiera sido menos arrogante en cómo
las partes del programa se comunicaron entre sí, etc. También podría haber ayudado si
No tuve que adivinar la composición de las puñaladas sobre la marcha y luego tener en cuenta el micro
diferencias entre mi compilador y gcc.

De todos modos, aquí está. Debe ejecutarse en perl v4 o superior. Tal vez menos.

--Tomás

Use pstruct en línea usando los servicios de onworks.net


Servidores y estaciones de trabajo gratuitos

Descargar aplicaciones de Windows y Linux

  • 1
    Gerente PAC
    Gerente PAC
    PAC es un reemplazo de Perl/GTK para
    SecureCRT/Putty/etc (Linux
    ssh/telnet/... gui)... Proporciona una GUI
    para configurar conexiones: usuarios,
    contraseñas, ESPERA regular...
    Descargar Administrador de PAC
  • 2
    geoservidor
    geoservidor
    GeoServer es un software de código abierto
    servidor escrito en Java que permite a los usuarios
    para compartir y editar datos geoespaciales.
    Diseñado para la interoperabilidad,
    publica da ...
    Descargar GeoServer
  • 3
    Luciérnaga III
    Luciérnaga III
    Una financiación personal gratuita y de código abierto.
    gerente. Firefly III cuenta con un
    sistema de contabilidad por partida doble. Usted puede
    ingrese y organice rápidamente su
    transacciones i ...
    Descargar Luciérnaga III
  • 4
    Extensiones de Apache OpenOffice
    Extensiones de Apache OpenOffice
    El catálogo oficial de Apache
    Extensiones de OpenOffice. Encontrarás
    extensiones que van desde diccionarios hasta
    herramientas para importar archivos PDF y conectarse
    con ext ...
    Descargar extensiones de Apache OpenOffice
  • 5
    Mantis BT
    Mantis BT
    Mantis es una aplicación web fácilmente implementable
    rastreador de errores basado para ayudar con el error del producto
    seguimiento. Requiere PHP, MySQL y un
    Servidor web. Echa un vistazo a nuestra demostración y alojamiento
    ofreciendo ...
    Descargar MantisBT
  • 6
    LAN Messenger
    LAN Messenger
    LAN Messenger es una aplicación de chat p2p
    para comunicación intranet y no
    requieren un servidor. Una variedad de útiles
    Se admiten características que incluyen
    notificar ...
    Descargar LAN Messenger
  • Más "

Comandos de Linux

  • 1
    cumplir
    cumplir
    abidw - serializa el ABI de un ELF
    archivo abidw lee una biblioteca compartida en ELF
    formato y emite una representación XML
    de su ABI a la salida estándar. El
    emitido...
    Ejecutar abidw
  • 2
    capaz
    capaz
    abilint - validar un ABI de abigail
    representación capaz analiza el nativo
    Representación XML de una ABI tal como se emite
    por abidw. Una vez que ha analizado el XML
    represe ...
    Ejecutar capaz
  • 3
    coresendmsg
    coresendmsg
    coresendmsg: envía un mensaje de API CORE
    al demonio del núcleo-daemon...
    Ejecutar coresendmsg
  • 4
    servidor_core
    servidor_core
    core_server: el servidor principal para
    SpamBayes. DESCRIPCIÓN: Actualmente atiende
    la interfaz web solamente. enchufando
    oyentes para varios protocolos es TBD.
    Esto ...
    Ejecutar core_server
  • 5
    flash
    flash
    fwflash - programa para flashear archivos de imágenes
    a un dispositivo NXT conectado...
    Ejecutar flash
  • 6
    fwts-recoger
    fwts-recoger
    fwts-collect - recopila registros para fwts
    informe de errores. ...
    Ejecutar fwts-collect
  • Más "

Ad