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

 WASM Phorum —› WASM.ASSEMBLER —› Помагите превести с СИ на АСМ

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


Дата: Апр 20, 2004 00:20:25

На СИ было так:

WORD GetRasEntryCount()
{
RASENTRYNAME RasEntry;
DWORD Count,RET;
DWORD sofRasEntry=sizeof(RASENTRYNAME);

ZeroMemory(&RasEntry,sizeof(RasEntry));
RasEntry.dwSize=sofRasEntry;
RET=RasEnumEntries(NULL,NULL,&RasEntry,&sofRasEntry,&Count);
if(RET==ERROR_BUFFER_TOO_SMALL || RET==0) return Count;
else return NULL;
}


Я делал так:

GetRasEntryCount proc
LOCAL RasEntry:RASENTRYNAME
LOCAL Count:DWORD
LOCAL sofRasEntry:DWORD

invoke memfill,addr RasEntry,sizeof RasEntry,0
mov sofRasEntry,sizeof RASENTRYNAME
mov RasEntry.dwSize,sizeof RASENTRYNAME
invoke RasEnumEntries,NULL,NULL,addr RasEntry,addr sofRasEntry,Count
.if(eax == ERROR_BUFFER_TOO_SMALL || eax == 0)
mov eax,Count
ret
.endif
xor eax,eax
ret
GetRasEntryCount endp

Код компилиться но не возвращает Count
А на СИ все пашет
В чем загвоздка...


Дата: Апр 20, 2004 00:31:48

Эхе... Трояна пишешь?.. ;)

invoke RasEnumEntries,NULL,NULL,addr RasEntry,addr sofRasEntry,addr Count <- ! -> &Count


Дата: Апр 20, 2004 00:35:30 · Поправил: PavPS

RET=RasEnumEntries(NULL,NULL,&RasEntry,&sofRasEntry,&Count);
invoke RasEnumEntries,NULL,NULL,addr RasEntry,addr sofRasEntry, ??Count
по моему... :)


Дата: Апр 20, 2004 00:40:00

нет нет там было addr просто пробывал потом по разномц и сюда всталял и не проверил


Дата: Апр 20, 2004 00:43:27 · Поправил: snatch

переменная ведь локальная... м-да.. :p

Т.е. если addr используешь, то будет так:

lea eax,[ebp+count]
push eax

если без него, то так:

push dword ptr [ebp+count]

Надо адрес переменной, а не значение.


Дата: Апр 20, 2004 00:48:06

snatch
переменная ведь локальная... м-да.. :p

и что????


Дата: Апр 20, 2004 00:57:55 · Поправил: Asterix

Или так ;-)
GetRasEntryCount proc
LOCAL RasEntry:RASENTRYNAME
LOCAL Count:DWORD
invoke RtlZeroMemory, ADDR RasEntry, SIZEOF RasEntry
mov RasEntry.dwSize, SIZEOF RASENTRYNAME
invoke RasEnumEntries, NULL,NULL, ADDR RasEntry, ADDR RasEntry.dwSize, ADDR Count
.if eax == ERROR_BUFFER_TOO_SMALL || eax == 0
   mov eax, Count
.else
   xor eax, eax
.endif
 ret
GetRasEntryCount endp


Дата: Апр 20, 2004 01:09:11

Все равно ноль возращает,а должно быть количество соеденений


Дата: Апр 20, 2004 01:17:47

snatch
lea eax,[ebp+count]
push eax

если без него, то так:

push dword ptr [ebp+count]


Это разные вещи ;-)))


Дата: Апр 20, 2004 05:42:26 · Поправил: q_q

Asterix
В твоем коде сначала инициализируется RasEntry.dwSize, а потом обнуляется вся область RasEntry.

AsbAlex
Чему равны значения sizeof(RASENTRYNAME) в C и ассемблере?


Дата: Апр 20, 2004 08:23:11

q_q
Точно, не доглядел. Поправил..


Дата: Апр 21, 2004 00:28:27

РЕбята проблему я решил заключалось втом что как пишет один товарищ в WINDOWS глюк с RASENTRYNAME
что-бы правильно определить ее размер надо или новую структуру определть так
RASENTRYNAME_ struct
dwSize dd ?
szEntryName db MAX_PATH dup(?)
RASENTRYNAME_ ends

или же делать так
mov RasEntry.dwSize, SIZEOF RASENTRYNAME+3


Дата: Апр 21, 2004 13:42:03

или же делать так
mov RasEntry.dwSize, SIZEOF RASENTRYNAME+3


а если внимательно почитать MSDN то там именно так и написано. Причем явно.


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