![]() |
eXeL@B —› Вопросы новичков —› Delphi & asm |
Посл.ответ | Сообщение |
|
Создано: 16 января 2009 18:44 · Личное сообщение · #1 Кто кодит на Delphi, плз, покажите мне мои ошибки. Заранее спс Var S : String; Buffer: array[0..10] of Char; szName : String; HW : HWND; Serial : Integer; begin HW := GetDlgItem (Form1.Handle, Edit1.Handle); GetDlgItemText (Form1.Handle, HW, Buffer, 30); Asm push offset Buffer XOR EDX,EDX XOR EBX,EBX XOR ESI,ESI @1 : MOV DL,BYTE PTR DS:[Buffer+EBX]; //тут ошибка (не поправил) ADD ESI,EDX; INC EBX DEC EAX JNZ @1 IMUL EAX,ESI,7F39Fh ADD EAX,20h SAR EAX,1h MOV Serial, EAX Ret end; Edit2.Text := IntToStr (Serial); End; ![]() |
|
Создано: 16 января 2009 19:11 · Поправил: borov · Личное сообщение · #2 |
|
Создано: 16 января 2009 19:18 · Поправил: Khim · Личное сообщение · #3 3я статья aleks22, про генерацию и рипанье кода, опробываю тот же вариант, только в дельфи, вот полностью код процедуры, но только нада поработать над ним, ошибки поискать function wsprintf( lpOut: LPSTR; lpFmt: LPCTSTR; p: Pointer ): Integer; stdcall; external 'user32.dll' name 'wsprintfA'; procedure TForm1.Button1Click(Sender: TObject); Var S : String; Buffer: array[0..10] of Char; szName : String; HW : HWND; Serial : Integer; szMessage: PChar; begin HW := GetDlgItem (Form1.Handle, Edit1.Handle); GetDlgItemText (Form1.Handle, HW, Buffer, 30); Asm push offset Buffer XOR EDX,EDX XOR EBX,EBX XOR ESI,ESI @1 : MOV DL,BYTE PTR DS:[Buffer+EBX]; ADD ESI,EDX; INC EBX DEC EAX JNZ @1 IMUL EAX,ESI,7F39Fh ADD EAX,20h SAR EAX,1h MOV Serial, EAX Ret end; GetMem (szMessage, 256 ); wsprintf( szMessage, '%02i', Pointer(Serial)); MessageBox( 0, szMessage, эСообщение', MB_OK ); End; ____________- Жизнь.ехе \? ![]() |
|
Создано: 16 января 2009 19:37 · Личное сообщение · #4 |
|
Создано: 16 января 2009 19:44 · Личное сообщение · #5 |
|
Создано: 16 января 2009 19:46 · Поправил: borov · Личное сообщение · #6 да, я кажется был прав procedure TForm1.Button1Click(Sender: TObject); Var szName : String; i, Serial : Integer; function sar(i: integer): integer; asm sar eax,1h end; begin Serial := 0; szName := Edit1.Text; for i := 0 to length(szName) - 1 do Serial := Serial + ord(szName[i + 1]); Serial := Serial * $7f39f + $20; Serial := sar(Serial); Edit2.Text := IntToStr(Serial); end; вместо того чтобы учится рипать лучше учился разберать ----- Лучше быть одиноким, но свободным © $me ![]() |
|
Создано: 16 января 2009 19:51 · Личное сообщение · #7 |
|
Создано: 16 января 2009 20:12 · Поправил: coderess · Личное сообщение · #8 http://exelab.ru/art/?action=view&id=97 http://exelab.ru/art/?action=view&id=92 ----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes ![]() |
|
Создано: 16 января 2009 21:09 · Личное сообщение · #9 |
|
Создано: 16 января 2009 23:07 · Поправил: Isaev · Личное сообщение · #10 |
![]() |
eXeL@B —› Вопросы новичков —› Delphi & asm |