|
|
| Посл.отвђт | Сообщен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 |
|
|
Дата: Авг 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] > Я сам только что читая справку понял это Вот это-то и хорошо ;-) |