GoGPT Best VPN GoSearch

Biểu tượng yêu thích OnWorks

pstruct - Trực tuyến trên đám mây

Chạy pstruct trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh pstruct có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


c2ph, pstruct - Kết xuất cấu trúc C như được tạo từ các lần đâm "cc -g -S"

SYNOPSIS


c2ph [-dpnP] [var = val] [tệp ...]

LỰA CHỌN
Tùy chọn:

-w rộng; viết tắt của: type_width = 45 member_width = 35 offset_width = 8
-x hex; viết tắt của: offset_fmt = x offset_width = 08 size_fmt = x size_width = 04

-n không tạo mã perl (mặc định khi được gọi là pstruct)
-p tạo mã perl (mặc định khi được gọi là c2ph)
-v tạo mã perl, với C decls dưới dạng nhận xét

-i KHÔNG tính toán lại kích thước cho các kiểu dữ liệu nội tại
-một thông tin kết xuất về bản chất cũng

-t theo dõi thực hiện
-d spew reams của đầu ra gỡ lỗi

-slist cung cấp cho danh sách được phân tách bằng dấu phẩy một cấu trúc để kết xuất

MÔ TẢ


Sau đây là tài liệu c2ph.doc cũ của Tom Christiansen[email được bảo vệ]>
Ngày: 25 tháng 91, 08 10:21:XNUMX GMT

Ngày xửa ngày xưa, tôi đã viết một chương trình tên là pstruct. Đó là một chương trình perl đã cố gắng
phân tích cú pháp các cấu trúc C và hiển thị hiệu số thành viên của chúng cho bạn. Điều này đặc biệt
hữu ích cho những người đang xem xét các bãi chứa nhị phân hoặc xem xét hạt nhân.

Pstruct không phải là một chương trình đẹp. Nó cũng không phải là đặc biệt mạnh mẽ. Vấn đề, bạn
thấy không, trình biên dịch C đã phân tích cú pháp C tốt hơn nhiều so với những gì tôi có thể hy vọng.

Vì vậy, tôi đã trở nên thông minh: Tôi quyết định lười biếng và để trình biên dịch C phân tích cú pháp C, điều này sẽ nhổ
trình gỡ lỗi đâm ra để tôi đọc. Chúng dễ dàng hơn nhiều để phân tích cú pháp. Nó vẫn không phải là một
chương trình đẹp, nhưng ít nhất nó mạnh mẽ hơn.

Pstruct lấy bất kỳ tệp .c hoặc .h nào hoặc tốt hơn là .s, vì đó là định dạng
sẽ xoa bóp chúng bằng mọi cách và đưa ra các danh sách như thế này:

cấu trúc tty {
int tty.t_locker 000 4
int tty.t_mutex_index 004 4
cấu trúc tty * tty.t_tp_virt 008 4
danh sách cấu trúc tty.t_rawq 00c 20
int tty.t_rawq.c_cc 00c 4
int tty.t_rawq.c_cmax 010 4
int tty.t_rawq.c_cfx 014 4
int tty.t_rawq.c_clx 018 4
cấu trúc tty * tty.t_rawq.c_tp_cpu 01c 4
cấu trúc tty * tty.t_rawq.c_tp_iop 020 4
ký tự không dấu * tty.t_rawq.c_buf_cpu 024 4
ký tự không dấu * tty.t_rawq.c_buf_iop 028 4
danh sách cấu trúc tty.t_canq 02c 20
int tty.t_canq.c_cc 02c 4
int tty.t_canq.c_cmax 030 4
int tty.t_canq.c_cfx 034 4
int tty.t_canq.c_clx 038 4
cấu trúc tty * tty.t_canq.c_tp_cpu 03c 4
cấu trúc tty * tty.t_canq.c_tp_iop 040 4
ký tự không dấu * tty.t_canq.c_buf_cpu 044 4
ký tự không dấu * tty.t_canq.c_buf_iop 048 4
danh sách cấu trúc 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
cấu trúc tty * tty.t_outq.c_tp_cpu 05c 4
cấu trúc tty * tty.t_outq.c_tp_iop 060 4
ký tự không dấu * tty.t_outq.c_buf_cpu 064 4
ký tự không dấu * 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
chuỗi cấu trúc * tty.t_rsel 07c 4

và vv

Trên thực tế, điều này được tạo ra bởi một tập hợp các tùy chọn cụ thể. Bạn có thể kiểm soát
định dạng của từng cột, cho dù bạn thích rộng hay béo, thập lục phân hay thập phân, các số XNUMX đứng đầu
hay bất cứ cái gì.

Tất cả những gì bạn cần để có thể sử dụng đây là một trình biên dịch C chứ không phải tạo ra các cú đâm kiểu BSD / GCC.
-g tùy chọn trên trình biên dịch BSD bản địa và GCC sẽ nhận được điều này cho bạn.

Để tìm hiểu thêm, chỉ cần nhập một tùy chọn không có thật, như - \?và một thông báo sử dụng lâu sẽ là
cung cấp. Có một số khả năng hợp lý.

Nếu bạn chỉ là một lập trình viên C, thì đây là phần cuối của thông điệp dành cho bạn. Bạn có thể bỏ
ngay bây giờ, và nếu bạn quan tâm, hãy lưu nguồn và chạy nó khi bạn cảm thấy thích. Hoặc
không phải.

Nhưng nếu bạn là một lập trình viên perl, thì đối với bạn, tôi có một thứ tuyệt vời hơn nhiều
chỉ là một máy in offset cấu trúc.

Bạn thấy đấy, nếu bạn gọi pstruct bằng cách viết tắt khác của nó, c2ph, bạn có một trình tạo mã
dịch mã C thành mã perl! Vâng, ít nhất là khai báo cấu trúc và liên minh,
nhưng đó là khá một chút.

Trước thời điểm này, bất kỳ ai lập trình perl muốn tương tác với các chương trình C,
giống như hạt nhân, buộc phải đoán bố cục của cấu trúc C và sau đó là hardwire
những điều này vào chương trình của mình. Tất nhiên, khi bạn đưa chương trình được làm thủ công tuyệt vời của mình đến
hệ thống trong đó cấu trúc sgtty được bố trí khác, chương trình của bạn đã bị hỏng. Mà là một
xấu hổ.

Chúng tôi đã có trình dịch h2ph của Larry, điều này đã giúp, nhưng điều đó chỉ hoạt động trên các ký hiệu cpp, không
thực C, mà cũng rất cần thiết. Những gì tôi cung cấp cho bạn là một cách tượng trưng để đạt được
tất cả các cấu trúc C. Tôi đã hiểu chúng về các gói và chức năng. Xem xét
chương trình sau:

#! / usr / local / bin / perl

yêu cầu 'syscall.ph';
yêu cầu 'sys / time.ph';
yêu cầu 'sys / resource.ph';

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

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

@ru = unpack ($ 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 "bạn đã sử dụng% 8.3fs +% 8.3fu giây. \ n", $ utime, $ stime;

Như bạn thấy, tên của gói là tên của cấu trúc. Các trường thông thường chỉ là
tên riêng của họ. Ngoài ra, các chức năng truy cập sau được cung cấp để tạo sự thuận tiện cho bạn:

struct Điều này không có đối số và chỉ là số lượng cấp một
các yếu tố trong cấu trúc. Bạn sẽ sử dụng cái này để lập chỉ mục
thành các mảng cấu trúc, có lẽ như thế này

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

sizeof Trả về các byte trong cấu trúc hoặc thành viên nếu
bạn chuyển nó một đối số, chẳng hạn như

& rusage'sizeof (& rusage'ru_utime)

typedef Đây là định nghĩa định dạng perl để chuyển đến gói và
giải nén. Nếu bạn yêu cầu typedef không có gì, bạn sẽ nhận được
toàn bộ cấu trúc, nếu không bạn nhận được cấu trúc của thành viên
bạn yêu cầu. Lớp đệm được chăm sóc, cũng như điều kỳ diệu đối với
đảm bảo rằng liên minh được giải nén thành tất cả các bí danh của nó.
Tuy nhiên, các trường bit vẫn chưa được hỗ trợ.

offsetof Hàm này là phần bù byte vào mảng
thành viên. Bạn có thể muốn sử dụng nó để lập chỉ mục trực tiếp
vào cấu trúc đóng gói với vec () nếu bạn quá lười biếng
để giải nén nó.

typeof Đừng nhầm với hàm truy cập typedef, cái này
một trả về kiểu C của trường đó. Điều này sẽ cho phép
bạn in ra một bản in đẹp có cấu trúc đẹp của một số
cấu trúc mà không thắt chặt bất cứ điều gì về nó trước.
Không có args cho cái này là một noop. Một ngày nào đó tôi sẽ đăng như vậy
một thứ để loại bỏ cấu trúc u của bạn cho bạn.

Cách tôi thấy điều này đang được sử dụng về cơ bản là như thế này:

% h2ph /usr/lib/perl/tmp.ph
% c2ph some_include_file.h >> /usr/lib/perl/tmp.ph
% Tải về

Nó hơi khó với c2ph vì bạn phải làm đúng. Tôi không thể biết
điều này cho hệ thống của bạn, nhưng nó thường không quá khó.

Mã không đẹp như tôi đã đề cập - tôi chưa bao giờ nghĩ rằng nó sẽ là một chương trình 1000 dòng
khi tôi bắt đầu, hoặc tôi có thể chưa bắt đầu. :-) Nhưng tôi sẽ bớt ung dung hơn trong cách
các phần của chương trình giao tiếp với nhau, v.v. Nó cũng có thể hữu ích nếu
Tôi không cần phải phân tích trang điểm của những vết đâm khi bay, và sau đó tính đến vi mô
sự khác biệt giữa trình biên dịch của tôi và gcc.

Dù sao, nó đây. Nên chạy trên perl v4 trở lên. Có thể ít hơn.

--tom

Sử dụng pstruct trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

Lệnh Linux

Ad




×
quảng cáo
❤️Mua sắm, đặt phòng hoặc mua tại đây — không mất phí, giúp duy trì các dịch vụ miễn phí.