Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 10 của 10
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    lấy adress thread msgbox không hiện

    khi em ịnect vao process nó không hiện messagebox vậy ạ
    chỉ em với[IMG]images/smilies/17.gif[/IMG]

    Mã:
    DWORD WINAPI GetThreadStartAddress(HANDLE hThread)
    {
        NTSTATUS ntStatus;
        HANDLE hDupHandle;
        DWORD dwStartAddress;
        pNtQIT NtQueryInformationThread = (pNtQIT)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQueryInformationThread");
        if(NtQueryInformationThread == NULL) return 0;
        HANDLE hCurrentProcess = GetCurrentProcess();
        if(!DuplicateHandle(hCurrentProcess, hThread, hCurrentProcess, &hDupHandle, THREAD_QUERY_INFORMATION, FALSE, 0))
        {
            SetLastError(ERROR_ACCESS_DENIED);
            return 0;
        }
        ntStatus = NtQueryInformationThread(hDupHandle, ThreadQuerySetWin32StartAddress, &dwStartAddress, sizeof(DWORD), NULL);
        CloseHandle(hDupHandle);
        if(ntStatus != STATUS_SUCCESS) 
        {
            return 0;
        }
        return dwStartAddress;
    }
    
    int main()
    {
        CHAR cMessage[9];
        wsprintf(cMessage, "%p", GetThreadStartAddress(GetCurrentThread()));
        MessageBox(HWND_DESKTOP, cMessage, "Start Address", MB_ICONINFORMATION | MB_OK);
        return 0;
    }

  2. #2
    anh trai anh có dùng yahoo không vậy anh

    - - - Nội dung đã được cập nhật ngày 15-12-2015 lúc 07:45 PM - - -

    không thì cho em xin facebook cũng dc ạ thank anh nhiều
    ]

    - - - Nội dung đã được cập nhật ngày 15-12-2015 lúc 07:46 PM - - -

    anh có face book không anh cho em xin với ^^

    - - - Nội dung đã được cập nhật ngày 15-12-2015 lúc 07:46 PM - - -

    anh có facebook cho em xin ket ban voi anh oi ^^

    - - - Nội dung đã được cập nhật ngày 15-12-2015 lúc 07:47 PM - - -

    Trích dẫn Gửi bởi MHoang
    Thay HWND_DESKTOP bằng NULL
    anh co facebook cho em xin với ạ em đang học vc++ nhưng mà không có ai chỉ anh ạ

    - - - Nội dung đã được cập nhật ngày 15-12-2015 lúc 08:14 PM - - -

    em thay băng NULL nó vẫn không hiện anh ạ
    MessageBox(NULL, cMessage, "Start Address", MB_ICONINFORMATION | MB_OK);

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nếu nó không hiện bạn đưa tất cả mã lên đây kể cả các biến toàn cục các #include và cho biết dùng IDE nào và khởi động dự án ra sao, anh em sẽ giúp!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thay HWND_DESKTOP bằng NULL

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    đây anh trai

    Mã:
    #include <windows.h>
    typedef LONG    NTSTATUS;
    typedef NTSTATUS (WINAPI *pNtQIT)(HANDLE, LONG, PVOID, ULONG, PULONG);
    #define STATUS_SUCCESS    ((NTSTATUS)0x00000000L)
    #define ThreadQuerySetWin32StartAddress 9
    
    DWORD WINAPI GetThreadStartAddress(HANDLE hThread)
    {
        NTSTATUS ntStatus;
        HANDLE hDupHandle;
        DWORD dwStartAddress;
        pNtQIT NtQueryInformationThread = (pNtQIT)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQueryInformationThread");
        if(NtQueryInformationThread == NULL) return 0;
        HANDLE hCurrentProcess = GetCurrentProcess();
        if(!DuplicateHandle(hCurrentProcess, hThread, hCurrentProcess, &hDupHandle, THREAD_QUERY_INFORMATION, FALSE, 0))
        {
            SetLastError(ERROR_ACCESS_DENIED);
            return 0;
        }
        ntStatus = NtQueryInformationThread(hDupHandle, ThreadQuerySetWin32StartAddress, &dwStartAddress, sizeof(DWORD), NULL);
        CloseHandle(hDupHandle);
        if(ntStatus != STATUS_SUCCESS) 
        {
            return 0;
        }
        return dwStartAddress;
    }
    
    int main()
    {
        CHAR cMessage[9];
        wsprintf(cMessage, "%p", GetThreadStartAddress(GetCurrentThread()));
        MessageBox(HWND_DESKTOP, cMessage, "Start Address", MB_ICONINFORMATION | MB_OK);
        return 0;
    }

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    và cho biết dùng IDE nào và khởi động dự án ra sao, anh em sẽ giúp!

    Mình đã thử cả 2 đều được : HWND_DESKTOP và NULL đều chạy tốt, hiện thông báo bình thường. Vấn đề có lẽ nằm ở các IDE khác không tương thích Windows. Muốn rõ ràng hơn thì làm như ý mình nhắc lại ở trên.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi MHoang
    và cho biết dùng IDE nào và khởi động dự án ra sao, anh em sẽ giúp!

    Mình đã thử cả 2 đều được : HWND_DESKTOP và NULL đều chạy tốt, hiện thông báo bình thường. Vấn đề có lẽ nằm ở các IDE khác không tương thích Windows. Muốn rõ ràng hơn thì làm như ý mình nhắc lại ở trên.
    em dung vc++ 6.0 anh ạ build ra dll ịnect chẳng hiện gì cả

    - - - Nội dung đã được cập nhật ngày 16-12-2015 lúc 08:45 PM - - -

    anh cho em xin facebook dc không ạ ^^

  8. #8
    em hỏi câu cuối thôi anh thế giờ messagebox hien ra rồi làm thế nào để lấy sdress thread của 1 exe khác hả anh khi tìm ra rồi thì dùng hàm suspend thread trong code vậy anh câu cuối cùng em hỏi
    chỉ em với

    em build gặp 2 lỗi LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
    Debug/dddd.exe : fatal error LNK1120: 1 unresolved externals

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đúng là lỗi ở mình do chủ quan quá vì không còn dùng VC++6.0

    Có 2 cách như sau :

    Cách 1 : Dùng tập tin *.c
    _ Vì kiểu dự án win32 trong VC++6.0 mặc định tạo ra *.cpp nên phát sinh lỗi unresolved external symbol _WinMain@16 .
    Mở Notepad rồi Copy cái mã trên vào rồi lưu ra thành tập tin với đuôi Any.c

    1. Khởi động VC++6.0
    2. File -> New -> Projects -> Win32 Application. Chọn tên dự án, nơi lưu trữ. OK, Finish, OK.
    3. Di chuyển hay copy Any.c vào thư mục dự án vừa tạo.
    4. Project -> Add to Project -> Files...
    5. Chọn Any.c rồi OK.
    6. Biên dịch và chạy.

    Cách 2 : Dùng tập tin *.cpp
    _ Làm hoàn toàn như #8 nhưng thay hàm main của bạn bằng WinMain.

    Mã:
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nShow){    CHAR cMessage[9];    wsprintf(cMessage, "%p", GetThreadStartAddress(GetCurrentThread()));    MessageBox(HWND_DESKTOP, cMessage, "Start Address", MB_ICONINFORMATION | MB_OK);    return 0;}

  10. #10
    Không ngoài dự đoán của mình, đây là mã để xây dựng exe chứ không phải dll.

    1. Khởi động VC++6.0
    2. File -> New -> Projects -> Win32 Application. Chọn tên dự án, nơi lưu trữ. OK, Finish, OK.
    3. File -> New -> Files -> C++ Source File. Chọn tên tập tin. OK.
    4. Copy mã ở trên vào cửa sổ soạn thảo đang hiển thị.
    5. Biên dịch và chạy.

    Thế thôi, chào nhé.

    P/S : Phét của mình đang bị mấy em gái chiếm lĩnh hết rồi nên không bàn chuyện lập trình trên đó được.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •