
mnalex Подсобите с Delphi ... Люди, подскажите, как в Делфях при написании
mnalex Подсобите с Delphi ... Люди, подскажите, как в Делфях при написании
ассемблерной вставки, сделать так, чтобы по определённому адресу слаживать
определенные кода символов (чтобы это все слаживалось последовательно в строку)
(это все должно проходить в цикле сформированном самим Делфи), а потом как эту
строку вытащить с этого адреса и передать в основной код, ну и там дальше уже
сним я разберусь ;)
-= ALEX =- :: дя не сложно впринципе, правда я толком не понял, что ты хотишь :)
mnalex :: Я хочу в цикле реализованном на Делфях (через For ... Begin Asm End;
End;) сделать в нутри asm end создание строки, и потом эту строку передать как
String в основную часть, вот и вопросы:
1 как формаровать строку в Асме;
2 как потом передать ее в Делфи?
Формирование строки должно строиться по принцепу - 1 проход цикла - 1 буква (ну
или 2, 3, и т.д. но в разных местах процедуры). Так же формирование строки может
происходить в подциклах реализованных на je (или на других командах перехода).
Надеюсь так вопрос будет звучать понятно.
MozgC [TSRh] :: Это если ты хочешь сделать кейген на дельфи. Простейший пример
без проверок и прочего:
procedure TForm1.Button1Click(Sender: TObject);
var
login, password:string;
begin
password:=Edit2.Text; //Чтобы password указывал
// на данные в секции данных. Если написать password:=’xxx’
// то будет указывать на данные в секции кода
// и попытка записи вызовет исключение
login:=Edit1.Text;
asm
mov esi, password // esi указывает на адрес
//по которому будет вписываться пароль
mov edi, login //edi = address of login string
mov ecx, [edi-4] // ecx = длина логина
@again:
mov al, byte ptr [edi] // al = символ из логина
inc al
mov byte ptr [esi], al // al после инкремента
// записываем следующим символом в будущий пароль
inc esi
inc edi
loop @again // Цикл заново?
mov byte ptr [esi],0 // Завершаем строку нулем
end;
Edit2.Text:=password // Выводим на экран
end;
mnalex :: Биг биг Вери сенкс :))
Примного благодарен!!!
-= ALEX =- :: эх опередил меня Мозг...
mnalex :: -= ALEX =-
:)) ничо еще успеешь :)) Но усеравно сенкс :)
Gloomy :: ›› :)) ничо еще успеешь :)) Но усеравно сенкс :)
А теперь давайте будем этот код оптимизировать! Сначала сведем количество байт
до минимума, а потом будем считать биты, установленные в 1 :) Мой вариант
(MASM32):
mov esi,OFFSET password
mov edi,OFFSET buff
@next:
lodsb
inc al
stosb
dec al
jnz @next
Итого: 18 байт. Кто меньше?
mnalex :: Gloomy
А причем здесь размер??? Я вообщето не проразмер говорил, а про Делфи :( ...
Оптимизация - это отдельный разговор!!!!!!
MozgC [TSRh] :: Gloomy
Еще конец строки надо нулем забивать.
Gloomy :: mnalex
Размер - это чисто для спортивного интереса, для маньяков АСМа :) Для Дельфей
можно обойтись и вовсе без АСМа ;)
procedure TForm1.Button1Click(Sender: TObject);
var
i: Byte;
login, password: String;
begin
login:= Edit1.Text;
SetLength(password, Length(login));
for i:= 1 to Length(login) do
password:= Chr(Ord(login)+1);
Edit2.Text:= password;
end;
Gloomy :: MozgC [TSRh]
Удлиним мой пример на пару байт и забивать ноль вручную не понадобится ;)
mov esi,OFFSET password
mov edi,OFFSET buff
@@: lodsb
test al,al
jz @F
inc al
stosb
jmp @B
@@:
Итого: 20 байт
З.Ы. Жутковатый у тебя аватар :)
MozgC [TSRh] :: Gloomy пишет:
цитата:
Для Дельфей можно обойтись и вовсе без АСМа ;)
Ему нужен асм т.к. он другое пишет. Мой пример тут нипричем.
mnalex :: Gloomy
Я бы посмотрел как ты на чистых делфях сделашь Rol , ah-al и другие низкие
операции :) . А Мозг просто пример привел, который к моей задаче никакого
отношения неимеет...!
Gloomy :: mnalex пишет:
цитата:
как ты на чистых делфях сделашь Rol , ah-al и другие низкие операции :)
У меня там в самом начале дисклаймер написан - Мой вариант (MASM32):
mnalex пишет:
цитата:
пример привел, который к моей задаче никакого отношения неимеет...!
Так ты просто хотел узнать как вставку на АСМе сделать? :)
MozgC [TSRh] :: Он хотел узнать как связать вставку на асме с дельфийским типом
string
mnalex :: Gloomy
Батенька, вы гоните, я вам про одно - а вы мне совершенно продругое,
внимательнее нужно читать!

|