Tải bản đầy đủ (.doc) (8 trang)

Playing XM Music from Masm's exe

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (170.37 KB, 8 trang )

Benina’s TutASM # 3: Playing XM Music From Masm’s EXE – Ver 1.0
Author: Benina
Benina’s TutASM # 3
PLAYING XM MUSIC FROM MASM’S EXE
Author: Benina
Phần này tôi sẽ hướng dẫn các bạn cách add data XM music vào resource của file EXE và chơi
nhạc khi chương trình Runing.
Tool : RadASM+MASM32
Dowload source here: />Lý thuyết:
Trước hết các bạn phải có 2 file thư viện : mfmplayer.inc và mfmplayer.lib chứa code để chơi
nhạc. File thư viện mfmplayer.lib chứa một hàm được định nghĩa trong mfmplayer.inc :
mfmPlay PROTO :DWORD
Hàm này có tên là mfmPlay, lấy một tham số DWORD là con trỏ đến dữ liệu music trong memory.
Hàm này yêu cầu một dword đầu tiên được trỏ đến bởi tham số hàm, nó chính là là kích thức (size)
của data music.
Nếu tham số là con trỏ đến dữ liệu music thì nó bắt đầu chơi nhạc. Nếu tham số là 0 , thì music sẽ
stop. Thư viện này chỉ đơn giản vậy thôi.
Nhưng trước hết, để ta sử dụng lâu dài hàm thư viện này khi lập trình , ta hảy copy file
mfmplayer.inc vào thư mục C:\masm32\include chứa chương trình MASM32 và file
mfmplayer.lib vào thư mục C:\masm32\lib. Sau khi làm xong, chúng ta có thể sử dụng dịch vụ của
nó được rồi đó.
Tôi xin tóm tắt các bước để chơi music như sau:
1. Lấy handle của resource music, sử dụng hàm FindResource
2. Load resource trong memory, sử dụng hàm LoadResource
3. Nhưng như đã nói về hàm mfmPlay, nó cần một Dword nằm trong memory đầu tiên (first
Dword) chứa size của resource. Để giải quyết vấn đề này, chúng ta sẽ định ra một vùng nhớ
mới (dùng hàm GlobalAlloc) và write size của resource đến first Dword của vùng nhớ mới
vừa định. Do có thêm 1 dword để lưu size, nên vùng nhớ mới lớn hơn resource music 1
dword. Kế đến chúng ta copy resource từng byte từng byte một vào memory chúng ta mới
định ra trước đó.
4. Cuối cùng, chúng ta play music với hàm mfmPlay.


5. Khi chương trình kết thúc, chúng ta cho nhạc tắt theo bằng cách gọi hàm mfmPlay với
tham số là 0
Trang 1/8
Benina’s TutASM # 3: Playing XM Music From Masm’s EXE – Ver 1.0
Author: Benina
Thực hành:
Bây giờ chúng ta hảy bật RadASM và Project Keygen1.
(Chúng ta tiếp tục với Project trong TUT “Benina’s tutASM #2” của tui nhé.)
Để MASM biên dịch link với thư viện mfmplare.lib , chúng ta khai báo các dòng sau trong file
Keygen1.Inc:
include mfmplayer.inc
includelib mfmplayer.lib
Bước tiếp theo, ta copy một file .xm (tôi có kèm theo file keygen.xm trong source) vào trong thư
mục /res của project và add nó vào resource như sau:
Vào menu Project/Resource ta add thêm resource IDM_MUSIC như hình sau:
Trong file Keygen1.Inc phần section .const ta khai báo :
IDM_MUSIC equ 200
--------------------------------------------------------------------------
Và khai báo thêm các biến trong section .data ? (các biến này sử dụng như thế nào tui sẽ giải thích
sau):
Trang 2/8
Benina’s TutASM # 3: Playing XM Music From Masm’s EXE – Ver 1.0
Author: Benina
;-----------------------
hResource DD ?
hDataOld DD ?
SizeRes DD ?
pData DD ?
tham khảo thêm hình:
Kế đến trong file Keygen1.Asm ta đánh vào các lệnh sau trước hàm DialogBoxParam:

;----------------------------------------
;Loading the music
INVOKE FindResource,hInstance,IDM_MUSIC,RT_RCDATA
mov hResource,eax
INVOKE LoadResource,hInstance,hResource
mov hDataOld,eax
INVOKE SizeofResource,hInstance,hResource
mov SizeRes,eax
INVOKE LockResource,hDataOld
mov esi,eax
mov eax,SizeRes
add eax,SIZEOF SizeRes
INVOKE GlobalAlloc,GPTR,eax
mov pData,eax
mov ecx,SizeRes
mov dword ptr[eax],ecx
mov edi,pData
add edi,SIZEOF SizeRes
Trang 3/8
Benina’s TutASM # 3: Playing XM Music From Masm’s EXE – Ver 1.0
Author: Benina
rep movsb
;-----------------------------------
Xem hình kèm theo
Cuối cùng trong phần xử lý thông điệp khởi tạo trị đầu của Dialog ta cho nó chơi nhạc bằng hàm:
INVOKE mfmPlay,pData
Hình minh họa
Trang 4/8
Benina’s TutASM # 3: Playing XM Music From Masm’s EXE – Ver 1.0
Author: Benina

Chúng ta cũng đừng quên khi chương trình thóat exit (thông điệp WM_CLOSE được send) ta cho
tắt nhạc bằng hàm:
INVOKE mfmPlay,0
Hình minh họa
Bây giờ bạn hit nút “GO” xem sao. OK chứ?
Phân tích:
Tôi sẽ giải thích ở đây phần code thêm vào trong section .code của file Keygen1.Asm.
Nhu ta thấy trong đọan code “Loading the music” , trước tiên là gọi hàm:
INVOKE FindResource,hInstance,IDM_MUSIC,RT_RCDATA
mov hResource,eax
Hàm FindResource xác định địa chỉ resource với lọai và tên trong module được chỉ định.
Nó cần 3 tham số. Tham số đầu tiên là handle của module, tham số thứ hai là tên resource và cuối
cùng là lọai Resource. Ở đây là RT_RCDATA.
Trong MSDN LIBRARY:
Trang 5/8

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×