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

Đề tài: Gọi/Call 1 hàm nằm trên memory ???

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

    Question Gọi/Call 1 hàm nằm trên memory ???

    - Đoạn code viết = C++ được load vào vùng nhớ: 0x10400.
    - Đoạn code viết = ASM được load vào vùng nhớ 0x11000.

    - Ví dụ trong đoạn chương trình C++ của mình là:
    Code:
    typedef void (*loadPro)();
    void main()
    {
            loadPro test = (loadPro)0x11000;
            test();
            while(1);
    };
    - Còn đoạn code ASM:
    Code:
    [BITS 32]
    main:
    	pushad
    	mov	BYTE[0xB8000],'A'
    	mov	BYTE[0xB8002],'B'
    	mov	BYTE[0xB8004],'C'
    	mov	BYTE[0xB8006],'D'
    	mov	BYTE[0xB8008],'E'
    	popad
            ret
    - Sau khi mình gọi hàm test() xong thì trên màn hình có xuất hiện ABCDE nhưng VMWARE báo : "stack overflow, this will cause CPU reset on real computer...".
    => như vậy có nghĩa là đã gọi được nhưng hình như không return được ? vậy có cách nào để gọi 1 hàm ngoài đang nằm trên mem ko ạ?

    // Bởi vì em đang tập viết OS riêng nên đang cần dùng cái này để làm driver, sau khi detect ra hardware sẽ load driver lên RAM sau đó call nó để làm việc. Và Driver thì viết = ASM.

    Thân,
    Cảm ơn nhiều ạ.
    Đã được chỉnh sửa lần cuối bởi khanhduy301 : 03-02-2009 lúc 05:19 AM.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình nghĩ lỗi từ đoạn code asm đó. Trong mô hình bộ nhớ của dos, bộ nhớ được phân đoạn bằng 4 thanh ghi cs,ds,es,ss. Đoạn code hợp ngữ trên đã truy xuất con trỏ xa tại địa chỉ B800:xxxx nên chắc chắn sẽ làm đổi giá trị của 1 trong 4 thanh ghi trên. Do đó khi quay về, hàm main sẽ bị rối loạn và chạy sai. Theo mình bạn nên lưu lại 4 thanh ghi này và phục hồi nó khi kết thúc hàm.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

    - Hi hi, rất sorry các bạn , trong đoạn code C, có 1 header mình sửa chữa lỡ xóa dấu // trước 1 hàm lỗi mình đang tạm disable nên khi chạy nó lỗi. Đoạn ASM chạy good .

    //Mình đang chạy trong chế độ 32bit mode .

    Thân,
    Cảm ơn rất nhiều.

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

  1. Xử lý đọc memory dựa trên base address?
    Gửi bởi Thanh_thuy trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 18-04-2012, 03:14 PM
  2. Trả lời: 0
    Bài viết cuối: 01-03-2012, 10:41 PM
  3. WriteProcessMemory ReadProcessMemory Đọc Ghi Memory Trên Process Khác
    Gửi bởi langman trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 6
    Bài viết cuối: 09-08-2010, 11:09 PM
  4. Về Memory leaks trong MFC/C++ trên Windows
    Gửi bởi MartSoft trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 06-02-2010, 11:23 PM
  5. Memory Device Driver trong lập trình C trên Linux
    Gửi bởi Xcross87 trong diễn đàn Thắc mắc chung
    Trả lời: 3
    Bài viết cuối: 26-12-2007, 12:42 PM

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