· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› CopyMemory..

. 1 . 2 . >>

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


Дата: Ноя 18, 2003 22:58:38

Откуда импортируются такие API:

ZeroMemory
FillMemory
CopyMemory

А то в моей справке от Борланда в графе импорт стоит
подозрительный прочерк.


Дата: Ноя 18, 2003 23:00:02

ZeroMemory это редирект на RtlZeroMemory из kernel32.dll, а остальные - это функции из C runtime library.


Дата: Ноя 18, 2003 23:14:27

Asterix

Не используй их. Это тормознутые, конченые, примаханые на всю голову функции. Используй в худом случае movsd/movsb - основную часть гнать двойными словами, остальное догонять хвостиком. Выравнивать указатели.
Уже обсуждалось на форуме.


Дата: Ноя 18, 2003 23:19:00

А как их можно заюзать в masm'е?
Просто подключив msvcrt.lib или они как-то по хитрому вызываются?


Дата: Ноя 18, 2003 23:20:09 · Поправил: Asterix

Volodya

Ааааааааааа, я хотел сбацать дампер на их основе, узкоспециализированный. ;-)


Дата: Ноя 18, 2003 23:55:24

Volodya
Лучше через mmx регистры, это быстрее будет. Остальное можно байтами.

А функции действительно тормознутые, причём все. Я как то посмотрел под отладиком, как длина строки определяется(lstrlen), нормальный код уже три таких длины бы нашёл.


Дата: Ноя 19, 2003 00:11:09

Asterix

Войди в приват, дам тебе статейки почитать. Правильные.


Дата: Ноя 19, 2003 02:34:57 · Поправил: Asterix

volodya

Вобщем сделал как ты и предлагал через rep movsd,
так будет универсальнее ;-)
Письмо отослал..


Дата: Ноя 19, 2003 02:45:57

Asterix

Проверяй. Все на русском :)


Дата: Ноя 19, 2003 05:58:57

dragon
ZeroMemory это редирект на RtlZeroMemory из kernel32.dll, а остальные - это функции из C runtime library.
Не совсем верное утверждение. В Cи rtl их перенаправляют headr'ы.
// winnt.h (psdk oct-2002)
...
#if defined(_M_AMD64)

NTSYSAPI
VOID
NTAPI
RtlCopyMemory (
    VOID UNALIGNED *Destination,
    CONST VOID UNALIGNED *Source,
    SIZE_T Length
    );

NTSYSAPI
VOID
NTAPI
RtlMoveMemory (
    VOID UNALIGNED *Destination,
    CONST VOID UNALIGNED *Source,
    SIZE_T Length
    );

NTSYSAPI
VOID
NTAPI
RtlFillMemory (
    VOID UNALIGNED *Destination,
    SIZE_T Length,
    IN BYTE  Fill
    );

NTSYSAPI
VOID
NTAPI
RtlZeroMemory (
    VOID UNALIGNED *Destination,
    SIZE_T Length
    );

#else

#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))

#endif
...


// winbase.h (psdk oct-2002)
...
#define MoveMemory RtlMoveMemory
#define CopyMemory RtlCopyMemory
#define FillMemory RtlFillMemory
#define ZeroMemory RtlZeroMemory
...

Zero, Fill, Move тянутся из kernel32.dll (в w2k реально в ntdll.dll).
Что касается Copy, то практически это Move.


Дата: Ноя 19, 2003 16:58:06

Asterix
Я ЧЕГО ЗРЯ НА ФОРУМ ФУНКЦИИ ОТПРАВЛЯЛ????
Посмотри в A&O тему Копирование байт для извращенцев..
Там в конце.


Дата: Ноя 19, 2003 17:47:17

Edmond

А вот так всегда. Пользоваться командой "поиск" тут не умеют.


Дата: Ноя 19, 2003 18:59:38

Я как то посмотрел под отладиком, как длина строки определяется(lstrlen), нормальный код уже три таких длины бы нашёл.

Этот код был оптимизирован или нет?


Дата: Ноя 19, 2003 20:36:52

Edmond

А я и не смотрел ;-) Тема то как называлась "...для извращенцев",
я вроде нормальный :-)))


Дата: Ноя 20, 2003 07:05:48 · Поправил: Asterix

Мля, а вот с Армой такой дампер не катит, нужна CopyMemory :-(

. 1 . 2 . >>


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