2012-04-28 38 views
5

Cho phép nói rằng địa chỉ bộ nhớ 0A7F03E4 lưu trữ một giá trị 124. Làm thế nào để thay đổi nó để 300 bằng cách sử dụng python? Có mô-đun nào được cung cấp cho loại tác vụ này không?Làm thế nào để thay đổi giá trị được lưu trữ trong địa chỉ bộ nhớ?

+1

Bạn có thể cần phải xử lý bảo vệ bộ nhớ. Nếu đây là mã hoặc chỉ đọc dữ liệu thì bạn sẽ không thể ghi vào địa chỉ đó. –

+0

Bạn đang nói về địa chỉ bộ nhớ ảo hoặc địa chỉ bộ nhớ vật lý? –

Trả lời

8
>>> import ctypes 
>>> memfield = (ctypes.c_char).from_address(0x0A7F03E4) 

Bây giờ bạn có thể đọc memfield, gán cho nó, làm bất cứ điều gì bạn muốn. Miễn là bạn có quyền truy cập vào vị trí bộ nhớ đó, tất nhiên.

bạn cũng có thể có được một memarray với

>>> memarray = (ctypes.c_char*memoryfieldlen).from_address(0x0A7F03E4) 

mang đến cho bạn một danh sách các memfields.

Cập nhật: Tôi chỉ đọc rằng bạn muốn truy lục số nguyên. trong trường hợp này, sử dụng ctypes.c_int, tất nhiên. Nói chung: sử dụng CType phù hợp;)

+0

Điều này sẽ không cung cấp cho bạn địa chỉ bộ nhớ ảo của quá trình python thay vì địa chỉ vật lý? Sau này có lẽ sẽ không thể tùy thuộc vào hệ điều hành và đặc quyền của quy trình. –

+0

khi bạn muốn truy cập một trường không có dữ liệu hoặc trường bên ngoài bộ nhớ có thể truy cập, bạn sẽ nhận được một segfault, tất nhiên. – ch3ka

1

Bạn đã thử mô-đun ctypes tích hợp chưa? Nó cung cấp một chức năng ghi nhớ sẽ cung cấp cho bạn những gì bạn cần.

1

Trên UNIX, bạn có thể thử open() thiết bị /dev/mem để truy cập bộ nhớ vật lý, và sau đó sử dụng phương pháp seek() của đối tượng file đặt con trỏ tập tin đến vị trí đúng. Sau đó, sử dụng phương thức write() để thay đổi giá trị. Đừng quên mã hóa số dưới dạng chuỗi thô! Tuy nhiên, chỉ có root người dùng mới có quyền truy cập vào thiết bị này.

Các vấn đề liên quan