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 3 trên tổng số 3 kết quả

Đề tài: Nghĩa của asm?

  1. #1
    Ngày gia nhập
    03 2012
    Bài viết
    31

    Mặc định Nghĩa của asm?

    Mấy bác ơi, em không học qua C và assembly nên em không hiểu nghĩa của cái __asm này, mấy bác cho em hỏi nghĩa của nó được không ạ, dịch qua ngôn ngữ khác như c++ hay c# hộ giùm em thì tốt quá ạ :P. Cảm ơn các bác.
    Code:
    struct SENDMSG_INJ_INFO{
        SENDMESSAGE fnSendMessageRemote;
        int ncbSzFnSendMessageRemote;           //Size of 'fnSendMessageRemote' in BYTEs
    
        HMODULE hUser32;
        SENDMESSAGE pfnSendMessage;             //SendMessage API pointer
    
        SENDMSG_INJ_INFO() :
            fnSendMessageRemote(NULL)
            , ncbSzFnSendMessageRemote(0)
        {
            hUser32 = ::LoadLibrary(L"user32");
            pfnSendMessage = hUser32 ? (SENDMESSAGE)GetProcAddress(hUser32, "SendMessageW") : NULL;
    
            int ncbSz = 0;
            SENDMESSAGE pfn = NULL;
    
            __asm
            {
                //Get sizes & offsets
                mov         eax, lbl_code_begin
                mov         dword ptr [pfn], eax
                mov         eax, lbl_code_after
                sub         eax, lbl_code_begin
                mov         dword ptr [ncbSz], eax
                jmp         lbl_code_after
    
    lbl_code_begin:
                //Thread proc that will be executed in remote process
                mov         eax,dword ptr [esp+4] 
                mov         edx,dword ptr [eax+0Ch] 
                lea         ecx,[eax+10h] 
                push        ecx  
                mov         ecx,dword ptr [eax+8] 
                push        edx  
                mov         edx,dword ptr [eax+4] 
                mov         eax,dword ptr [eax] 
                push        ecx  
                push        edx  
                call        eax  
    
                ret
    
    lbl_code_after:
            }
    
            ncbSzFnSendMessageRemote = ncbSz;
            fnSendMessageRemote = pfn;
        }
        ~SENDMSG_INJ_INFO()
        {
            if(hUser32)
            {
                ::FreeLibrary(hUser32);
                hUser32 = NULL;
            }
        }
    };
    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
    09 2016
    Bài viết
    1,009

    Tuỳ theo trình biên dịch, các TBD c/c++ có cú pháp cho asm block sẽ khác nhau, có thể tham khào
    a / http://diendan.congdongcviet.com/threads/t381342::hop-ngu-inline-assembler.cpp
    b / http://diendan.congdongcviet.com/threads/t381045::ham-sin-math-h-tinh-nhu-the-nao.cpp

    1 - c là tập con (sub-lang) của c++ nên không cần phải dịch c sang c++ làm chi
    2 - c# hiện nay không cho phép viết code bậc thấp (MsIL / ASM) trong source code (có vài công cụ làm được không bàn ở đây). Có thể chuyển code trên thành DLL, và trong c# gọi nó là OK

    Code với __asm block trên đã optimization, dịch ra c/c++ có thể thành TỐI U, dùng BB Code định dạng cho dễ đọc.
    ASM Code:
    1.         __asm{
    2.             //Get sizes & offsets
    3.             mov         eax, lbl_code_begin
    4.             mov         dword ptr [pfn], eax
    5.             mov         eax, lbl_code_after
    6.             sub         eax, lbl_code_begin
    7.             mov         dword ptr [ncbSz], eax
    8.             jmp         lbl_code_after
    9.  
    10. lbl_code_begin:
    11.             //Thread proc that will be executed in remote process
    12.             mov         eax,dword ptr [esp+4]
    13.             mov         edx,dword ptr [eax+0Ch]
    14.             lea         ecx,[eax+10h]
    15.             push        ecx  
    16.             mov         ecx,dword ptr [eax+8]
    17.             push        edx  
    18.             mov         edx,dword ptr [eax+4]
    19.             mov         eax,dword ptr [eax]
    20.             push        ecx  
    21.             push        edx  
    22.             call        eax  
    23.  
    24.             ret
    25.  
    26. lbl_code_after:
    27.         }

    Phọt mô xa 2016

  3. #3
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Không nhớ c standard có không, trong c++ asm là keyword
    http://en.cppreference.com/w/cpp/keyword

    Nó có sai khác trên các TBD khác nhau

    phọt mô xa 2016
    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ý.

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