Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Cách trỏ con trỏ vào một địa chỉ, rồi đọc ghi giá trị trên ô nhớ đó

  1. #1
    Ngày gia nhập
    02 2013
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    78

    Mặc định Cách trỏ con trỏ vào một địa chỉ, rồi đọc ghi giá trị trên ô nhớ đó

    Hi. All
    Em Sử dụng nền visual studio 2010. Em phân tích một chương trình bằng ollydbg để tìm địa chỉ offset của một số biến. em thử dùng con trỏ trong C để trỏ tới cái địa chỉ offset này thì trình dịch báo lỗi.
    VD khi em gán:
    c=0x00331;
    Rất mong mọi người hướng dẫn em cách truy cập vào các ô nhớ này và lấy dữ liệu của nó ra.
    thanks

  2. #2
    Ngày gia nhập
    08 2011
    Bài viết
    117

    Lâu lắm rồi không làm bên windows. những gì mình nói chỉ mang tính chất tham khảo thôi. windows không cho phép chương trình của bạn thay đổi trực tiếp giá trị ở những địa chỉ không phải sở hữu của chương trình bạn. tức là bạn chỉ được phép thay đổi giá trị tại các ô nhớ do chương trình bạn cấp phát. nếu bạn muốn đọc hoặc thay đổi giá trị của các địa chỉ thuộc sở hữu của chương trình khác bạn có thể sử dụng API do HĐH cung cấp sau :


  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi luanft Xem bài viết
    Hi. All
    Em Sử dụng nền visual studio 2010. Em phân tích một chương trình bằng ollydbg để tìm địa chỉ offset của một số biến. em thử dùng con trỏ trong C để trỏ tới cái địa chỉ offset này thì trình dịch báo lỗi.
    VD khi em gán:
    c=0x00331;
    Rất mong mọi người hướng dẫn em cách truy cập vào các ô nhớ này và lấy dữ liệu của nó ra.
    thanks
    C Code:
    1. int *p=(int*)0x00331

    chú ý 1 tí ở trên windows mà địa chỉ thấp thế này là đặt dấu ?? nhé



    mình biết bạn định hỏi về vấn đề gì và làm gì,
    bạn có thể tham khảo : 2 bài viết này chắc sẽ giúp được bạn nhiều đấy

    http://diendan.congdongcviet.com/showthread.php?t=35324


    http://diendan.congdongcviet.com/showthread.php?t=42977
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    02 2013
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    78

    Cảm ơn bạn nhé. Mình đang làm một cái ****** nhưng bị bế tắc chỗ này giờ thì mình hiểu rồi. Địa chỉ offset trên mình chỉ cho ví dụ thôi. Thật sự cảm ơn bạn.

    Bạn có thể hướng dẫn mình ko? một ví dụ mẫu cũng dc? tiếng việt nhé. mình mới học năm nhất thôi nên tiếng anh ko dc tốt
    Đã được chỉnh sửa lần cuối bởi langman : 25-02-2013 lúc 10:29 PM. Lý do: làm liền 2 bài viết liền nhau, lần sau ko để 2 bài liền nhau nhé

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi luanft Xem bài viết
    Cảm ơn bạn nhé. Mình đang làm một cái ****** nhưng bị bế tắc chỗ này giờ thì mình hiểu rồi. Địa chỉ offset trên mình chỉ cho ví dụ thôi. Thật sự cảm ơn bạn.

    Bạn có thể hướng dẫn mình ko? một ví dụ mẫu cũng dc? tiếng việt nhé. mình mới học năm nhất thôi nên tiếng anh ko dc tốt
    bạn đã đọc kĩ 2 cái link mình đưa ra chưa? nó có viết bằng tiếng nước ngoài đâu?
    bạn sẽ ko thể làm cái "sao sao sao" mà bạn nói nếu 2 bài đó bạn chưa nắm được
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    07 2010
    Bài viết
    5

    Mặc định Cách trỏ con trỏ vào một địa chỉ, rồi đọc ghi giá trị trên ô nhớ đó

    char* ptr - là con trỏ, trỏ vào offset dữ liệu của bạn.

    Có 2 các để lấy data từ con trỏ đó:

    cách thứ nhất
    int a; //là biến cần lấy dữ liệu
    a = *(int*)ptr;


    cách thứ 2:
    int a;
    memcpy(ptr, &a, sizeof(int));

  7. #7
    Ngày gia nhập
    05 2009
    Bài viết
    34

    Trích dẫn Nguyên bản được gửi bởi badboy04 Xem bài viết
    char* ptr - là con trỏ, trỏ vào offset dữ liệu của bạn.

    Có 2 các để lấy data từ con trỏ đó:

    cách thứ nhất
    int a; //là biến cần lấy dữ liệu
    a = *(int*)ptr;


    cách thứ 2:
    int a;
    memcpy(ptr, &a, sizeof(int));
    ptr của mình trỏ vào địa chỉ đầu tiên của offset thì sao hả bạn??? Bạn ép kiểu về int* rồi đưa ra giá trị cho mình hộ cái, bạn sai cơ bản về con trỏ. Giả sử ptr trỏ vào vùng nhớ chứa 100 ký tự tức là chiếm 100 byte dữ liệu, bạn 4 byte kiểu int thì thấm vào đâu mà bạn memcpy

  8. #8
    Ngày gia nhập
    07 2010
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi nocreate Xem bài viết
    ptr của mình trỏ vào địa chỉ đầu tiên của offset thì sao hả bạn??? Bạn ép kiểu về int* rồi đưa ra giá trị cho mình hộ cái, bạn sai cơ bản về con trỏ. Giả sử ptr trỏ vào vùng nhớ chứa 100 ký tự tức là chiếm 100 byte dữ liệu, bạn 4 byte kiểu int thì thấm vào đâu mà bạn memcpy
    Bạn nên đọc kỹ đoạn mình viết.
    char* ptr - là con trỏ, trỏ vào offset dữ liệu của bạn.
    Nếu chưa trỏ vào thì dịch chuyển nó về offset dữ liệu cần đọc. Nếu bạn chưa biêt thì nên học lại đi.

    Còn mình dùng int chỉ là ví dụ data cần đọc là int thôi.
    Bạn có thể dùng với data bất kỳ và với size bất kỳ.
    Chẳng nhẽ phải liệt kê hết các kiểu ra???
    Đọc ví dụ phải liên hệ và hiểu bản chất chứ.

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi badboy04 Xem bài viết
    Bạn nên đọc kỹ đoạn mình viết.
    char* ptr - là con trỏ, trỏ vào offset dữ liệu của bạn.
    Nếu chưa trỏ vào thì dịch chuyển nó về offset dữ liệu cần đọc. Nếu bạn chưa biêt thì nên học lại đi.

    Còn mình dùng int chỉ là ví dụ data cần đọc là int thôi.
    Bạn có thể dùng với data bất kỳ và với size bất kỳ.
    Chẳng nhẽ phải liệt kê hết các kiểu ra???
    Đọc ví dụ phải liên hệ và hiểu bản chất chứ.
    a thấy code của em ở trên ví dụ đúng rồi, nhưng để làm cái "sao sao sao" như bạn ấy muốn thì ....

    như bạn ấy muốn có 2 cách, ứng với level khác nhau:
    + 1 là theo cái tút tớ gửi ở đó, ko dùng cách đơn giản như dùng unary operator * hoặc memset như em đưa ra được
    + 1 cách là bạn ấy phải inject được 1 thằng dll vào trong cái tiến trình đang chạy, lức này mới dùng được cách như em chỉ

    vấn đề là cách thứ 2 khó hơn cách 1,
    hè hè hè
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

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

  1. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  2. Trả lời: 30
    Bài viết cuối: 15-02-2012, 07:03 PM
  3. Lập trình Socket trên C++ có thể giao tiếp chương trình Java trên Server được ko các
    Gửi bởi jacobkruse trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 18-11-2010, 11:10 PM
  4. Source code build trên Ubuntu có chạy được Trên Linux Kernel không ?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 0
    Bài viết cuối: 03-11-2010, 09:22 AM
  5. Lưu dữ liệu để trống trên một cell của datagirdview trên csdl Access như thế nào?
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-05-2009, 04:21 PM

Tags của đề tài này

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