Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
[masm32] !!!-WNetEnumCachedPasswords-!!! 23.05.01 10:04 Число просмотров: 791
Автор: Pank Статус: Незарегистрированный пользователь
|
> > lea edi,buf1 > > add edi,dword ptr [Pce.cbResource] > ... > > lea edi,dword ptr [Pce.abResource] > > add edi,dword ptr [Pce.cbResource] > > > lea edi,buf1 > > add edi,dword ptr [Pce.cbPassword] > > > cbResource и cbPassword - это WORD > Надо так: > > movzx edi, word ptr [Pce.cbResource] > add edi, offset buf1
Попробуем...
> И еще я не понял - ты перенес имя ресурса в buf2, > преобразовав его в OEM, > а потом buf2 сразу же обнулил... наверное, перед обнулением > был какой-то > код, который ты сюда не кинул ?
Ну да, это чтоб поменьше было-), а так я пока через SoftIce дебагрю
> Обнулять такие большие буферы побайтно - не жалко тебе > процессор гонять ? :) > Через rep stosd легче и быстрее, да и вообще их обнулять не > нужно :)
Это верно. Просто мне так привычней - пора отвыкать от вредных привычек-). Хотя все эти rep с цепочечными операциями работают медленнее, хотя код меньше
Спасибо
|
<programming>
|
[masm32] !!!-WNetEnumCachedPasswords-!!! 22.05.01 12:15
Автор: Pank Статус: Незарегистрированный пользователь
|
Кто знает, подскажите, pls, где тут у меня ошибка (только не в ДНК! -))
Привожу кусок кода (немного урезанный). Ошибка, скорее всего, в функции обратного вызова.
структура:
PASSWORD_CACHE_ENTRY STRUCT
cbEntry WORD ? ; размер структуры
cbResource WORD ? ; размер имени
cbPassword WORD ? ; размер пароля
iEntry BYTE ? ; вход
nType BYTE ? ; тип входа -?
abResource BYTE ? ; начало имени
PASSWORD_CACHE_ENTRY ENDS
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
PceCallBack PROTO :PASSWORD_CACHE_ENTRY,:DWORD
Lib db "mpr.dll",0
Proced db "WNetEnumCachedPasswords",0
Собственно вызов функции:
invoke LoadLibrary,ADDR Lib
invoke GetProcAddress,eax,ADDR Proced
.if eax!=0
push 0
push PceCallBack
push 0FFh
push 0
push 0
call eax
.endif
И сама функция:
PceCallBack Proc Pce:PASSWORD_CACHE_ENTRY,Param:DWORD
LOCAL buf1[255]:BYTE
LOCAL buf2[255]:BYTE
invoke MemCopy,ADDR buf1,Pce.abResource,Pce.cbResource
lea edi,buf1
add edi,dword ptr [Pce.cbResource]
mov byte ptr [edi],0
invoke CharToOem,ADDR buf1,ADDR buf2 ; в buf2 должно быть название
;-- обнуление ---
lea edi,buf1
lea esi,buf2
mov ecx,255
@@:
mov byte ptr [edi],0
mov byte ptr [esi],0
inc edi
inc esi
loop @B
;----------------
lea edi,dword ptr [Pce.abResource]
add edi,dword ptr [Pce.cbResource]
invoke MemCopy,ADDR buf1,edi,Pce.cbPassword
lea edi,buf1
add edi,dword ptr [Pce.cbPassword]
mov byte ptr [edi],0
invoke CharToOem,ADDR buf1,ADDR buf2 ; в buf2 должен быть пароль
mov eax,TRUE
ret
PceCallBack endp
|
|
[masm32] !!!-WNetEnumCachedPasswords-!!! 22.05.01 13:59
Автор: :-) <:-)> Статус: Elderman
|
> lea edi,buf1 > add edi,dword ptr [Pce.cbResource] ...
> lea edi,dword ptr [Pce.abResource] > add edi,dword ptr [Pce.cbResource]
> lea edi,buf1 > add edi,dword ptr [Pce.cbPassword]
cbResource и cbPassword - это WORD
Надо так:
movzx edi, word ptr [Pce.cbResource]
add edi, offset buf1
И еще я не понял - ты перенес имя ресурса в buf2, преобразовав его в OEM,
а потом buf2 сразу же обнулил... наверное, перед обнулением был какой-то
код, который ты сюда не кинул ?
Обнулять такие большие буферы побайтно - не жалко тебе процессор гонять ? :)
Через rep stosd легче и быстрее, да и вообще их обнулять не нужно :)
|
| |
[masm32] !!!-WNetEnumCachedPasswords-!!! 23.05.01 10:04
Автор: Pank Статус: Незарегистрированный пользователь
|
> > lea edi,buf1 > > add edi,dword ptr [Pce.cbResource] > ... > > lea edi,dword ptr [Pce.abResource] > > add edi,dword ptr [Pce.cbResource] > > > lea edi,buf1 > > add edi,dword ptr [Pce.cbPassword] > > > cbResource и cbPassword - это WORD > Надо так: > > movzx edi, word ptr [Pce.cbResource] > add edi, offset buf1
Попробуем...
> И еще я не понял - ты перенес имя ресурса в buf2, > преобразовав его в OEM, > а потом buf2 сразу же обнулил... наверное, перед обнулением > был какой-то > код, который ты сюда не кинул ?
Ну да, это чтоб поменьше было-), а так я пока через SoftIce дебагрю
> Обнулять такие большие буферы побайтно - не жалко тебе > процессор гонять ? :) > Через rep stosd легче и быстрее, да и вообще их обнулять не > нужно :)
Это верно. Просто мне так привычней - пора отвыкать от вредных привычек-). Хотя все эти rep с цепочечными операциями работают медленнее, хотя код меньше
Спасибо
|
|
|