[Programming] Cho em hỏi về tìm kiếm file trong asm32 |
03/09/2008 01:19:27 (+0700) | #1 | 149442 |
bboy0303
Member
|
0 |
|
|
Joined: 06/06/2007 11:06:41
Messages: 46
Offline
|
|
Em đang bắt đầu học asm32, em có đoạn code sau để tìm kiếm file trong thư mục nhưng ko hiểu sao khi chạy lại có lỗi này:
Đoạn code của em:
Code:
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib kernel32.lib
include \masm32\include\user32.inc
includelib user32.lib
.code
search_handle dd 0
lpFileName db "*.*",0
lpFindFileData STRUCT
dwFileAttributes DWORD ?
ftCreationTime FILETIME <>
ftLastAccessTime FILETIME <>
ftLastWriteTime FILETIME <>
nFileSizeHigh DWORD ?
nFileSizeLow DWORD ?
dwReserved0 DWORD ?
dwReserved1 DWORD ?
cFileName BYTE MAX_PATH dup(?)
cAlternate BYTE 14 dup(?)
lpFindFileData ENDS
start:
mov eax,lpFindFileData
push eax
lea eax,lpFileName
push eax
call FindFirstFileA
cmp eax,-1
je error
mov search_handle,eax
findnext:
mov eax,lpFindFileData
push eax
lea eax,search_handle
push eax
call FindNextFileA
cmp eax,0
je error
loop findnext
error:
invoke ExitProcess, NULL
end start
Các anh có thể xem hộ em là lý do vì sao lại ko chạy đc ko ạ? |
|
|
|
|
[Question] Re: Cho em hỏi về tìm kiếm file trong asm32 |
03/09/2008 07:11:54 (+0700) | #2 | 149468 |
|
Tal
Member
|
0 |
|
|
Joined: 15/09/2007 16:50:17
Messages: 67
Offline
|
|
lpFindFileData là 1 cấu trúc. Bạn chỉ có thể dùng được biến thôi. Ở trên bạn mới khai báo cấu trúc.
Hàm FindFirstFile có 2 đối là 2 con trỏ, vì vậy phải nạp địa chỉ của 2 đối lên. |
|
|
|
|
[Question] Re: Cho em hỏi về tìm kiếm file trong asm32 |
03/09/2008 11:28:14 (+0700) | #3 | 149495 |
bboy0303
Member
|
0 |
|
|
Joined: 06/06/2007 11:06:41
Messages: 46
Offline
|
|
Hic, anh có thể viết lại cho em đoạn khai báo đc ko ạ, lần trước em hỏi thì anh mfeng nói khai báo như vậy, em ko tìm thấy ở đâu nói về khai báo cả.
Còn đoạn nạp địa chỉ thì em thay
Code:
mov eax,lpFindFileData
push eax
bằng
Code:
lea eax,lpFindFileData
push eax
thì lại ko compile đc, bị báo lỗi.
|
|
|
|
|
[Question] Re: Cho em hỏi về tìm kiếm file trong asm32 |
03/09/2008 14:10:58 (+0700) | #4 | 149514 |
bboy0303
Member
|
0 |
|
|
Joined: 06/06/2007 11:06:41
Messages: 46
Offline
|
|
Em đã giải quyết xong đoạn code trên rồi, tuy nhiên vẫn còn 1 vấn đề, nếu em đưa khai báo
Code:
search_handle dd 0
lpFileName db "*.*",0
lpFindFileData WIN32_FIND_DATA <>
vào code, ko sử dụng data section thì chương trình khi chạy sẽ gặp lỗi (khi debug sẽ thấy lỗi ở ngay hàm findfirstfile).
Đoạn code để chạy đc là phải đưa các biến vào section data:
Code:
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib kernel32.lib
include \masm32\include\user32.inc
includelib user32.lib
.data
search_handle dd 0
lpFileName db "*.*",0
lpFindFileData WIN32_FIND_DATA <>
.code
start:
invoke FindFirstFile,addr lpFileName,addr lpFindFileData
cmp eax,-1
je error
mov search_handle,eax
findnext:
invoke FindNextFile,search_handle,addr lpFindFileData
cmp eax,0
je error
loop findnext
error:
invoke ExitProcess, NULL
end start
Các anh có thể cho em biết lý do vì sao lại lỗi và em muốn đưa cả biến và code vào cùng 1 section thì phải làm thế nào ko ạ? |
|
|
|
|
[Question] Re: Cho em hỏi về tìm kiếm file trong asm32 |
04/09/2008 07:18:27 (+0700) | #5 | 149597 |
TQN
Elite Member
|
0 |
|
|
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
|
|
Ừ, thì phải đưa vào .data section, vì .data section default là write able, còn code section thì readonly, execute able.
Hàm FindFirstxxx gì đó cần và phải ghi ngược data trả về vào findFileData struct variable, và vì variable này nằm trong code section, read only, nên sẽ gây ra Access Violation Exception.
Cách khắc phục là đưa variable trên vào .data section, hoặc dùng 1 PE Editor để modify attribute của code section thành writable, hay đưa thêm option /SECTION:.text,EWR cho command line của link.exe |
|
|
[Question] Re: Cho em hỏi về tìm kiếm file trong asm32 |
04/09/2008 10:46:24 (+0700) | #6 | 149611 |
bboy0303
Member
|
0 |
|
|
Joined: 06/06/2007 11:06:41
Messages: 46
Offline
|
|
Em quên mất điều đấy đấy , cám ơn anh nhé!!! |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|