Có thể chạy một bản lớn hơn 4GB .exe không?


10

Tôi đã tạo một kho lưu trữ SFX> 4GB (lưu trữ tự giải nén) trong 7-Zip, mà không có cảnh báo. Khi người nhận cố gắng giải nén nó, anh ta đã nhận được dải băng lỗi này:

nhập mô tả hình ảnh ở đây

Tôi tìm thấy nó bởi vì .exenó lớn hơn 4GB. Sau khi cài đặt 7-Zip, anh ta có thể trích xuất kho lưu trữ, nhưng tôi tự hỏi tại sao Windows không thể chạy một tệp thực thi như vậy? Và có thể thông qua một số ghi đè?


2
Bạn thường không thể không sử dụng hệ thống 32 bit
Ramhound

1
Để mở rộng những gì Ramhound đã nói, có thể bộ giải nén 7-Zip tự lưu trữ trong RAM, đối với các hệ thống 32 bit, có kích thước truy cập tối đa là 4 GB. Nó cũng sẽ giải thích tại sao 7-Zip có thể giải nén, vì kho lưu trữ không cần phải được lưu trữ đầy đủ trong bộ nhớ (mặc dù điều đó phụ thuộc vào việc kho lưu trữ có ở dạng rắn hay có các cài đặt nén khác không).
Doktoro Reichard

Vâng, tôi nghĩ đó là vấn đề lúc đầu, nhưng anh ấy đang sử dụng Win64 với 16GB RAM. Tôi cũng đang sử dụng nó với 8GB.
Louis Waweru

Câu trả lời:


10

Windows sẽ không hỗ trợ các tệp thực thi có kích thước lớn hơn 4GB theo luồng này:

http://sourceforge.net/p/sevenzip/discussion/45798/thread/337fc13e/

Bình luận viên "Igor Pavlov" là người sáng tạo và duy trì 7-Zip. Trong khi bình luận đó có phần hơi cộc lốc, có những chủ đề khác trên các diễn đàn sourceforge lặp lại cùng một lời khuyên. Tôi không tin rằng việc chạy tệp thực thi trên HĐH 64 bit sẽ tạo ra bất kỳ sự khác biệt nào vì đây có thể là một giới hạn về kích thước của tệp thực thi windows, tức là giới hạn của chính định dạng Windows PE .

Bài viết này về Viết chương trình 64 bit cho thấy:

"Hình ảnh" thực thi (mã / dữ liệu được tải trong bộ nhớ) của tệp Win64 bị giới hạn kích thước ở mức 2GB. Điều này là do bộ xử lý AMD64 / EM64T sử dụng địa chỉ tương đối cho hầu hết các hướng dẫn và địa chỉ tương đối được giữ trong một từ. Một từ chỉ có khả năng giữ giá trị tương đối là ± 2GB.

Có lẽ Igor đã nghĩ ra cách sử dụng ± 2GB để đạt được 4GB.


1
Một từ được ký có phạm vi 2.147.483.647. Một từ không dấu có phạm vi 4.294.967.295 và con số đó là nguồn gốc của hầu hết các hạn chế trong Windows và trong các hệ thống 32 bit bên ngoài nó.
Hashim

@Hashim là hoàn toàn chính xác, giới hạn là 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes. Tôi đã có thể xác minh nó trên Windows 10 64 bit bằng cách tạo tài liệu lưu trữ tự giải nén bằng WinRAR dưới dạng tệp .EXE. Một tệp thực thi với kích thước 4GiBsẽ không khởi chạy, nhưng 4GiB - 1Bhoạt động tốt.
Robin Hartmann

0

Việc tự giải nén có thể thực thi lớn hơn 4GB là điều cực kỳ khó khăn, vì có giới hạn 4gb đối với các tệp thực thi của Windows như * .exe, * đậm, v.v. đối với PE32 và phiên bản 64 bit PE32 + (áp dụng cho 32-bit và 64 phiên bản -bit).

Thứ hai, tệp thực thi được tải hoàn toàn vào RAM trước khi thực thi và ngay cả khi bạn không bị giới hạn bởi Windows (nhưng bạn), bạn có thể dễ dàng bị giới hạn bởi phần cứng, đó là lượng RAM vật lý trong trường hợp như vậy


Theo tôi biết, có nhiều cách để bảo Windows chỉ tải một phần cụ thể của tệp exe, chứ không phải toàn bộ tệp có tài nguyên. Tôi nghĩ rằng nhiều chương trình DOS lớn cũng sử dụng thủ thuật này vì giới hạn trong 16-bit x86 là quá nhỏ
phuclv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.