2009-07-20 47 views
28

Tôi nhớ đã thấy trong quá khứ một chương trình sẽ lấy bất kỳ tệp nào và tạo một mảng C biểu diễn tệp đó làm đầu ra; nó sẽ ngăn chặn việc phân phối một tệp riêng biệt trong một số trường hợp. Chương trình Unix/Linux nào thực hiện điều đó?Chương trình nào tạo ra một mảng C cho bất kỳ tệp nào?

+1

Đó sao một vài điểm ảnh trên đó đã được thực hiện cho câu hỏi này – xyz

Trả lời

63
+3

Cảm ơn bạn Internet! – 0x6adb015

+9

Con trai tôi cảm thấy ngu ngốc vì đã viết cho riêng mình ... –

+0

Đã chỉnh sửa để vừa với ít hơn 15 ký tự: p – sigjuice

4
hexdump -v -e '16/1 "0x%x," "\n"' 

sẽ tạo ra một C như mảng từ stdin, nhưng không có tuyên bố, không có dấu ngoặc hoặc định dạng tốt.

3

Tôi biết đây là câu hỏi Unix/Linux, nhưng bất kỳ ai xem điều này muốn thực hiện tương tự trong Windows đều có thể sử dụng Bin2H.

+0

xxd cũng có sẵn cho các cửa sổ. – DrAl

10

Đối với các tệp lớn, chuyển đổi thành văn bản và sau đó làm cho trình biên dịch phân tích cú pháp tất cả lại là không hiệu quả và không cần thiết. Sử dụng objcopy thay vì:

objcopy -I binary -O elf32-i386 stuff stuff.o 

(. Điều chỉnh cấu trúc đầu ra như cần thiết cho nền tảng không phải x86) Sau đó, khi bạn liên kết nó vào chương trình của bạn, bạn có thể truy cập vào nó như vậy:

extern char _binary_stuff_start[], _binary_stuff_end[]; 
#define SIZE_OF_STUFF (_binary_stuff_end - _binary_stuff_start) 

... 

foo(_binary_stuff_start[i]); 
Các vấn đề liên quan