Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Làm thế nào để đọc giá trị tại một vùng nhớ

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    7

    Mặc định Làm thế nào để đọc giá trị tại một vùng nhớ

    Trong C++, nếu mình muốn đọc giá trị chứa tại một vùng nhớ nào đó trên RAM, chẳng hạn 1244556 (giả sử là ô nhớ này nằm trong bộ nhớ cấp cho chương trình) thì phải làm sao ạ? Không biết có cách nào dùng con trỏ đọc được không?
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    BYTE * pb = 1244556;
    cout <<*pb;

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    7

    Cám ơn bạn đã quan tâm nha. Nhưng mà không biết bạn có include gì thêm không? Vì kiểu byte đâu có là kiểu dữ liệu cơ bản của C++? Hơn nữa, nếu mình thay kiểu byte bằng kiểu khác như void, int thì compiler đều báo là ép kiểu không được?

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    nhận 1 ký tự từ vùng nhớ :
    Code:
    char peekb(unsigned seg,unsigned off)
    Gửi 1 số nguyên vào bộ nhớ
    Code:
    void poke (unsigned seg,unsigned off,int value)
    seg:off Là địa chỉ phân đoạn của vùng nhớ
    Mấy hàm này nằm trong DOS.h Bạn tự tìm hiểu thêm nhé vì mình không dùng cái này bao giờ nên cũng không tường tận lắm

  5. #5
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Đúng là chỉ cần con trỏ ta có thể truy xuất đến bất kỳ vị trí nào trong RAM . Nếu muốn truy xuất 1 cách chính xác bạn bắt buộc phải hiểu thế nào là con trỏ gần và xa , thế nào là mô hình bộ nhớ .

    Đầu tiên , xin nói là 1 điạ chỉ gồm 2 phần : đoạn ( segment ) và độ lệch ( offset ) . 1 địa chỉ viết chính xác có dạng : 0x????:0x???? ( seg:off theo hệ 16 ( 0x) )

    Con trỏ gần là con trỏ chỉ có thể di chuyển đâu đó trên 1 offset . Tức là nó chỉ có thể di chuyễn trên 1 đoạn , ko thể đi ra ngoài đoạn ấy .
    VD:
    Code:
    int *p; // khai báo 1 con trỏ gần kiểu int
    Con trỏ xa là con trỏ có thể di chuyển trên bất kỳ đoạn nào và độ lệch nào .
    VD:
    Code:
    int far *p; // khai báo 1 con trỏ xa kiểu int , thêm từ khoá far vào
    Mô bộ nhớ chia làm 6 phần : tiny , small , medium , compact , large , huge .

    Tiny : tất cả dữ liệu và mã gắn trên 1 segment . Tức là chỉ cần con trỏ gần là đủ truy xuất mô hình này .

    Small : Dữ liệu và mã ở các đoạn riêng biệt . Thường thì con trỏ gần là đủ xài , đôi khi cần bộ nhớ phân chia động xa thì ta dùng con trỏ xa .

    Medium và Compact: dữ liệu , găn xếp và bộ nhớ cấp phát động đều có đoạn riêng của chúng . Trong này thì con trỏ gần dùng cho mã và con trỏ xa cho dữ liệu .

    Large và Huge : Hai mô hình bộ nhớ "khổng lồ" . Nói chung con trỏ xa được dùng cho cả mã và dữ liệu .

    Con trỏ gần chắc bạn cũng đã thường xuyên khai báo trong các chương triìn của mình , điều đó là đủ . Một ví dụ khá đơn giản cho việc dùng con trỏ xa là khi ta muốn truy xuất đến đầu màn hình văn bản , ta biết địa chỉ của nó là 0xB800:0x0000 . Vậy bạn ghi như sau :

    Code:
    char far *rvb=(char*)MK_FP(B800,0);
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Các đề tài tương tự

  1. Lập trình C Con trỏ quản lý vùng nhớ như thế nào?
    Gửi bởi quochungse trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 14-04-2013, 10:27 AM
  2. Thắc mắc về độ lớn vùng nhớ heap
    Gửi bởi practice1 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 19-12-2011, 11:05 PM
  3. Thắc mắc vấn đề chia sẻ vùng nhớ giữa các ứng dụng .
    Gửi bởi Joker trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 15-11-2010, 02:10 PM
  4. Cách chuyển 100 bytes dữ liệu từ vùng nhớ 200h sang vùng 250h?
    Gửi bởi congminh1709 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 28-03-2010, 09:44 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn