Современные решения

для защиты Windows приложений

и восстановления исходного кода
Автор: xen. Дата публикации: 10.08.2004

Пишем напрямую в видеопамять



; полностью завершенная COM-программа codeseg segment assume cs:codeseg, ds:codeseg, es:codeseg org 100h Code: jmp Start x dw 50 ;координата x выводимого текста y dw 20 ;координата y выводимого текста Text db 'string to be printed',0 ;не забываем 0 Start: mov AX,80 ;вычисляем адрес mul y add AX,x shl AX,1 ;адрес в AX=160*y+2*x mov DI,AX mov SI,offset Text push ES ;сохраняем ES mov AX,0B800h ;сегмент экранной памяти в текстовом режиме mov ES,AX Print: lodsb ;загружаем AL из DS:[SI] or AL,AL ;конец строки? jz Ready ;да, AL=0 mov ES:[DI],AL ;символ для отображения add DI,2 ;пропускаем байт атрибутов jmp Print Ready: pop ES ;восстанавливаем ES ;--------------------------------------- int 20H codeseg ends end Code


Комментарии

Добавил: GPcH Дата: 12.10.2004

Вот тут один мой знакомый нашел баг в статье.
И написал приме, лишенный недостатков, который к тому же рисует на экране фигуры Лиссажу

uses crt;
const pi:real=3.1415926536;
var
t:real;
x,y,x1,UmX,UmY,Faza:integer;
procedure PutPixel (x,y:integer;Color:byte);
var
i:integer;
DecI,Temp:real;
Bit:byte;
begin
if y mod 2 = 1 then
begin
inc(y);
DecI:=(80*(y/2)+(x/4))+8112;
Temp:=frac(DecI)*8;
Bit:=6-trunc(Temp);
i:=trunc(DecI);
dec(y);
end;
if y mod 2 = 0 then
begin
inc(y);
DecI:=80*((y/2)-0.5)+(x/4);
Temp:=frac(DecI)*8;
Bit:=6-trunc(Temp);
i:=trunc(DecI);
dec(y);
end;
asm
mov ax, 0b800h
mov es, ax
mov di, i
mov al, byte ptr(es:di)
mov cl, Bit
ror al, cl
mov ah, Color
and al, 11111100b
add al, ah
rol al, cl
mov byte ptr(es:di), al
end;
end;
begin
UmX:=80;
UmY:=80;
asm
mov ax,4
int 10h
end;
repeat
repeat
{delay(5);}
y:=trunc(UmY*sin((2*pi*1500*t)*pi/180))+100;
x:=trunc(UmX*sin((2*pi*1000*t+Faza)*pi/180))+160;
x1:=trunc(UmX*sin((2*pi*1000*t+(Faza-1))*pi/180))+160;
PutPixel (x1,y,0);
PutPixel (x,y,1);
t:=t+0.0008;
until(t](145*0.0008));
t:=0;
inc(Faza);
if Faza=360 then Faza:=0;
until(keypressed);
end.

Добавил: GPcH Дата: 12.10.2004

Вышенаписанный пример на паскале и мной не проверялся... если у кого не будет работать - пишите тут


Добавление комментария


Ваше имя (на форуме):

Ваш пароль (на форуме):

Комментарии могут добавлять только пользователи,
зарегистрированные на форуме данного сайта. Если Вы не
зарегистрированы, то сначала зарегистрируйтесь тут

Комментарий: