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

 WASM Phorum —› WASM.WIN32 —› FASM and CodePage

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


Дата: Авг 7, 2004 08:17:37 · Поправил: aravar

Всем Здравствуйте.Никак не могу найти решения для перекодировщика. Проблема в DLL. Написал пример как у Зубкова но работает он криво. Подскажите где ошибка?
;DLLRUS.DLL
format PE GUI 4.0 DLL
entry DllEntryPoint
include '%fasminc%\win32a.inc'
section '.data' data readable writeable
coitable db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h , 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h , 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 38h, 00h, 00h, 00h, 00h , 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 28h, 00h, 00h, 00h, 00h , 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 7Eh, 60h, 61h, 76h, 64h, 65h, 74h, 63h , 75h, 68h, 69h, 6Ah, 6Bh, 6Ch, 6Dh, 6Eh
db 6Fh, 7Fh, 70h, 71h, 72h, 73h, 66h, 62h , 7Ch, 7Bh, 67h, 78h, 7Dh, 79h, 77h, 7Ah
db 5Eh, 40h, 41h, 56h, 44h, 45h, 54h, 43h , 55h, 48h, 49h, 4Ah, 4Bh, 4Ch, 4Dh, 4Eh
db 4Fh, 5Fh, 50h, 51h, 52h, 53h, 46h, 42h , 5Ch, 5Bh, 47h, 58h, 5Dh, 59h, 57h, 5Ah
section '.code' code readable executable
proc DllEntryPoint, hinstDLL,fdwReason,lpvReserved
mov eax,TRUE
return
endp
proc koi2wins
enter
push ebx esi edi
mov esi,eax
mov edi,eax
mov ebx, coitable
decoding:
lodsd
test al,80h
je done
sub al,80h
xlatb
add al,80h
done:
stosd
test al,al
jne decoding
pop edi esi ebx
return
endp
section '.edata' export data readable
export 'DLLRUS.DLL',\
koi2wins ,'koi2wins'
section '.reloc' fixups data discardable

;а это программа вызывающая его
format PE GUI 4.0
entry start
include '%fasminc%\win32a.inc'
section '.data' data readable writeable
title_string1 db 'koi2win demo: string in KOI8',0
title_string2 db 'koi2win demo: string in cp1251',0
koi_string db 'уФТПЛБ ОБ лпй-8',0
section '.code' code readable executable
start:
invoke MessageBox,0,koi_string,title_string1,MB_OK
mov eax, koi_string
push eax
invoke koi2wins
invoke MessageBox,0,koi_string,title_string2,MB_OK
invoke ExitProcess,0
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
user,'USER32.DLL',\
dllrus,'DLLRUS.DLL'
import kernel,\
ExitProcess,'ExitProcess'
import user,\
MessageBox,'MessageBoxA'
import dllrus,\
koi2wins ,'koi2wins'


Дата: Авг 7, 2004 09:32:50 · Поправил: aravar

откомпилированый пример


Дата: Авг 7, 2004 11:49:10

aravar
Почему у тебя в последней строке таблицы du?


Дата: Авг 7, 2004 12:36:50 · Поправил: aravar

Это ошибка - остаток от эксперементов но суть не вней,сейчас исправлю.
откомпилированый пример
995374297__DLL_FASM_EXAMPLES.rar


Дата: Авг 7, 2004 13:57:11

aravar

lodsd и stosd работают с DWORD, а не с BYTE
В этом и проблема.


Дата: Авг 7, 2004 16:05:30

Вот пример на MASM. Там BYTE и все работает.

_200060105__ZUBKOV.rar


Дата: Авг 7, 2004 16:07:37

Да я просто к тому, что нужно поменять lodsd на lodsb


Дата: Авг 7, 2004 16:33:12 · Поправил: aravar

Спасибо за помощь.Я сам только что читая справку по FASM понял это,надо было заместо lodsd поставить
lods byte [esi].

Мораль надо быть внимательней


Дата: Авг 7, 2004 16:41:47

FASM понимает 2 варианта записи таких инструкций:

lodsb = lods byte[esi]
lodsw = lods word[esi]
lodsd = lods dword[esi]


> „Я сам только что читая справку понял это “

Вот это-то и хорошо ;-)