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;
            }
        }
    };

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

    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,028

    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

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