User Tag List

+ Trả lời chủ đề
Hiện kết quả từ 1 tới 4 của 4

Chủ đề: Nhúng ASM vào VB

  1. #1
    spinx
    Guest

    Mặc định

    Khi chọn một ngôn ngữ lập trình cho mình nhiều bạn thích sử dụng C vì C là một ngôn ngữ khá mạnh, tốc độ cao và lập trình C thì cũng "oai" Quan điểm của tôi tương đối thực dụng hơn, lập trình nhằm đạt được kết quả một cách nhanh nhất nên ngôn ngữ sử dụng ko quan trọng lắm. Ngôn ngữ chủ đạo nên sử dụng một ngôn ngữ càng đơn giản và thuận tiện càng tốt (tôi chọn VB) tuy nhiên nên biết thêm các ngôn ngữ khác để kết hợp bổ sung cho nhau vì ngôn ngữ nào cũng có ưu nhược điểm riêng. Khi kết hợp các ngôn ngữ for win với nhau thì khá dễ dàng vì có rất nhiều cách (sử dụng thư viện dll, viết ActiveX dưới dạng COM hoặc DCOM...) nhưng kết hợp ASM với VB thì chắc ít người để ý hơn. Không biết có bao giờ các bạn cần ko nhưng tôi đã thử và cũng có một vài ứng dụng cho kết quả ko ngờ đấy.
    Thực ra cũng có ko ít cách đâu, vậy tôi xin trình bày một cách để hoangminh, chip hay bác nào thích tham khảo nhé. Đây là cách nhúng một đoạn mã máy vào VB. B) Cách này cũng hơi "bá đạo" và khó debug (nên cẩn thận một chút) nhưng cũng hiệu quả. Ví dụ này sẽ kêu trên speaker sound theo tần số param1.
    1. Viết đoạn ASM và dịch ra mã máy (tôi thường dùng TASM vì mã máy dịch ra khá điển hình, dễ dùng)
    2. Copy đoạn mã vào VB
    3. Sử dụng hàm CallASM
    Cách này ko lấy tham biến về được, để lấy tham biến trả về thì phức tạp hơn ngoài khuôn khổ bài viết nếu bạn nào tò mò thì email cho tôi vậy nhé!

    Hope it help.

    Const MCCode = "5589E553565766B8B60066E743B8DC341200BA000000008B5 D08F7F389C36631C0660FB6" & _
    "C366E7426631C0660FB6C766E74266E5616631C96689C1660 D030066E76131C00FB7C15F5E5B89EC5DC21000"

    sub CallASM(Param1 as Long)
    ReDim MachineCode(Len(MCCode) \ 2 - 1)

    For i = 0 To (Len(HexCode1) \ 2 - 1)
    MachineCode(i) = CByte("&H" & Mid(MCCode, i * 2 + 1, 2))
    Next i

    ptrMC = VarPtr(MachineCode(0))
    lngRet = CallWindowProc(ptrMC, Param1, 0&, 0&, 0&)
    end sub

  2. #2
    BlackDragonVN
    Guest
    Hay đấy bác, sắp tới có lẽ bọn em sẽ học hỏi ở bác nhiều điều

  3. #3
    hoangminh
    Guest
    Quan điểm của tôi tương đối thực dụng hơn, lập trình nhằm đạt được kết quả một cách nhanh nhất nên ngôn ngữ sử dụng ko quan trọng lắm. Ngôn ngữ chủ đạo nên sử dụng một ngôn ngữ càng đơn giản và thuận tiện càng tốt (tôi chọn VB) tuy nhiên nên biết thêm các ngôn ngữ khác để kết hợp bổ sung cho nhau vì ngôn ngữ nào cũng có ưu nhược điểm riêng
    :silly)
    Hê hê đúng ý tôi rùi, tui cũng khoái VB ở cái khoản đơn giản thuận tiện trong việc viết giao diện.
    Tôi đang thử VC nhưng mà thấy , vất vả muốn chết :new_rotcol)

  4. #4
    chip
    Guest

    Mặc định

    Công nhận cách làm của bác spinx rất hay , tôi cũng không ngờ . Tuy nhiên phải nói đây là nhúng mã máy vào VB (không tự nhiên như nhúng mã asm) . Cách thực hiện có vẻ giống như là gọi dll trong C (nạp dll (LoadLibrary) , lấy địa chỉ của hàm (GetProcAddress) và gọi) .

+ Trả lời chủ đề

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Từ khóa (Tag) của chủ đề này

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


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube