· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Позиционирование в файле

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Май 28, 2004 09:25:59

masm32 version 8.00
странно..., q_q, если не трудно, дай плиз свои include windows.inc, kernel32.inc, user32.inc


Дата: Май 28, 2004 10:53:21

Flasher
Шутишь? Они в архиве ~190K.

Masm брал с MASM32 Version 8.2 Download Sites, указанные тобой файлы есть в инсталляторе. Компилятор использую версии 6.15.8803 из какого-то сервиспака к vs] и линкер пропатченый от rich.


Дата: Май 28, 2004 13:39:49

тоже самое...
А не у кого больше нету каких-нить исходников на эту тему?


Дата: Май 28, 2004 14:16:16 · Поправил: Asterix

Flasher
Да, это тот исходник и ошибку он давать никик не может, вот сейчас у меня используется такой вариант, байты которые должны быть пропущены при поиске должны быть заменены нулями.
ParseBuffer PROTO :DWORD, :DWORD, :DWORD, :DWORD

.CODE

ParseBuffer proc uses ebx edi esi lpScanString:DWORD, ScanStringLength:DWORD, lpBuffer:DWORD, BufferLength:DWORD
         mov edi, lpScanString
         mov esi, lpBuffer
         mov ecx, ScanStringLength
         mov ebx, ecx
         mov edx, esi
         add edx, BufferLength
         sub edx, ScanStringLength
         inc edx
@loop:
         cmp esi, edx
         je @not_found
         test ecx, ecx
         jz @found
         mov al, BYTE PTR [edi]
         test al, al
         jz @00h_found
         cmp BYTE PTR [esi], al
         je @parse
         sub edi, ebx
         add edi, ecx
         sub esi, ebx
         add esi, ecx
         inc esi
         mov ecx, ebx
         jmp @loop
@parse:
         inc edi
         inc esi
         dec ecx
         jmp @loop
@00h_found:
         inc edi
         inc esi
         dec ecx
         jmp @loop
@not_found:
         xor eax, eax
         jmp @F
@found:
         mov eax, esi
         sub eax, ebx
         sub eax, lpBuffer
@@:
         ret
ParseBuffer endp


А вот так это нужно применять:
            invoke CreateFile, OFFSET sBuf, GENERIC_READ,\
                               FILE_SHARE_READ, 0, OPEN_EXISTING,\
                               FILE_ATTRIBUTE_NORMAL, 0
            cmp eax, INVALID_HANDLE_VALUE
            je @cant_open
            mov hFile, eax
            invoke CreateFileMapping, eax, NULL, PAGE_READONLY, 0, 0, NULL
            mov hMapFile, eax
            invoke MapViewOfFile, eax, FILE_MAP_READ, 0, 0, 0
            mov pMemory, eax
            invoke GetFileSize, hFile, NULL
            mov SizeOfFile, eax
            invoke ParseBuffer, OFFSET MS_Signature_1, 25, pMemory, eax
            test eax, eax
            jnz @found
            invoke ParseBuffer, OFFSET MS_Signature_2, 25, pMemory, SizeOfFile
            test eax, eax
            jnz @found
            invoke ParseBuffer, OFFSET MS_Signature_3, 25, pMemory, SizeOfFile
            test eax, eax
            jz @not_found
@found:
            mov edx, eax
            push ebx
            mov ebx, OFFSET szBuff
            add ebx, 8
            mov BYTE PTR [ebx], 0
            mov ecx, 4
@@:
            sub ebx, 2
            mov al, dl  ;
            aam_16
            hex2ascii
            xchg al, ah
            hex2ascii
            mov WORD PTR [ebx], ax
            shr edx, 8
            loop @B
            invoke SetDlgItemText, hDlg, IDC_EDIT2, ebx
            pop ebx
@close:
            invoke UnmapViewOfFile, pMemory
            invoke CloseHandle, hMapFile
            mov hMapFile, 0
            invoke CloseHandle, hFile


Дата: Май 30, 2004 17:34:51

Asterix, вот так?:
.486
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

ParseBuffer PROTO :DWORD, :DWORD, :DWORD, :DWORD

.data
AppName      db "xz",0
sBuf	     db "xz.txt",0
szBuff       db "tekst"

.data?
hFile   dd ?
hMapFile  dd ?

pMemory  dd ?
SizeOfFile  dd ?
MS_Signature_1  dd ?
MS_Signature_2  dd ?
MS_Signature_3  dd ?

.code
start:
@cant_open:
          invoke CreateFile, OFFSET sBuf, GENERIC_READ,FILE_SHARE_READ, 0, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0
            cmp eax, INVALID_HANDLE_VALUE
            je @cant_open
            mov hFile, eax
            invoke CreateFileMapping, eax, NULL, PAGE_READONLY, 0, 0, NULL
            mov hMapFile, eax
            invoke MapViewOfFile, eax, FILE_MAP_READ, 0, 0, 0
            mov pMemory, eax
            invoke GetFileSize, hFile, NULL
            mov SizeOfFile, eax
            invoke ParseBuffer,OFFSET MS_Signature_1, 25, pMemory, eax
            test eax, eax
            jnz @found
            invoke ParseBuffer,OFFSET MS_Signature_2, 25, pMemory, SizeOfFile
            test eax, eax
            jnz @found
            invoke ParseBuffer,OFFSET MS_Signature_3, 25, pMemory, SizeOfFile
            test eax, eax
            jz @not_found
@found:
            mov edx, eax
            push ebx
            mov ebx, OFFSET szBuff
            add ebx, 8
            mov BYTE PTR [ebx], 0
            mov ecx, 4
@@:
            sub ebx, 2
            mov al, dl  ;
            aam_16
            hex2ascii
            xchg al, ah
            hex2ascii
            mov WORD PTR [ebx], ax
            shr edx, 8
            loop @B
            invoke MessageBox,NULL,ebx,OFFSET AppName,MB_OK
            ;invoke SetDlgItemText,hWnd,IDC_HOSTON,
            pop ebx
@close:
            invoke UnmapViewOfFile, pMemory
            invoke CloseHandle, hMapFile
            mov hMapFile, 0
            invoke CloseHandle, hFile
@not_found:
invoke ExitProcess,eax
end start

ParseBuffer proc uses ebx edi esi lpScanString:DWORD, ScanStringLength:DWORD, lpBuffer:DWORD, BufferLength:DWORD
         mov edi, lpScanString
         mov esi, lpBuffer
         mov ecx, ScanStringLength
         mov ebx, ecx
         mov edx, esi
         add edx, BufferLength
         sub edx, ScanStringLength
         inc edx
@loop:
         cmp esi, edx
         je @not_found
         test ecx, ecx
         jz @found
         mov al, BYTE PTR [edi]
         test al, al
         jz @00h_found
         cmp BYTE PTR [esi], al
         je @parse
         sub edi, ebx
         add edi, ecx
         sub esi, ebx
         add esi, ecx
         inc esi
         mov ecx, ebx
         jmp @loop
@parse:
         inc edi
         inc esi
         dec ecx
         jmp @loop
@00h_found:
         inc edi
         inc esi
         dec ecx
         jmp @loop
@not_found:
         xor eax, eax
         jmp @F
@found:
         mov eax, esi
         sub eax, ebx
         sub eax, lpBuffer
@@:
         ret
ParseBuffer endp


Дата: Май 31, 2004 05:03:39

> Asterix, вот так?

Не совсем ;-)

MS_Signature_1 db 0E8h, 000h, 000h, 0FFh, 0FFh, 08Bh, 08Dh, 000h, 000h, 000h, 000h, 003h, 0C8h, 089h, 044h, 024h, 000h, 089h, 08Dh, 000h, 000h, 000h, 000h, 0FFh, 015h
и т.д., но можно задать строку типа
db "то_что_будем_искать" соответственно указав её длину там где у меня число 25

Это
mov edx, eax
            push ebx
            mov ebx, OFFSET szBuff
            add ebx, 8
            mov BYTE PTR [ebx], 0
            mov ecx, 4
@@:
            sub ebx, 2
            mov al, dl  ;
            aam_16
            hex2ascii
            xchg al, ah
            hex2ascii
            mov WORD PTR [ebx], ax
            shr edx, 8
            loop @B
            invoke SetDlgItemText, hDlg, IDC_EDIT2, ebx
            pop ebx

можно заменить на
.DATA
szBuff  db 10 dup (0)
format db "%08lX",0
..................
.CODE
start:
.................
push eax
push OFFSET format
push OFFSET szBuff
call wsprintf
add esp, 00Ch
xor ecx, ecx
invoke MessageBox, ecx, OFFSET szBuff, ecx, ecx


Если файл успешно отмапился в память то метку @close нужно вызывать всегда, независимо от того найдена ли искомая строка или нет, у меня не показано т.к. в моём исходнике эти jmp'ы ведут на разные мессаги и только потом на @close

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.052