Autor Beitrag
MagicRain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: Mo 13.07.09 19:10 
Ich habe ein problem mit 2 befehlen sie zu übersetzen...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Tabelle:
0055AF6C  85 C0 74 05 E8 63 82 EA FF 8B D3 80 E2 FE 8B C6  …Àtèc‚êÿ‹Ó€âþ‹Æ
0055AF7C  E8 73 97 ED FF 84 DB 74 07 8B C6 E8 18 85 EA FF  ès—íÿ„Ût‹Æè…êÿ
0055AF8C  8B C6 55B C3 840 00 55 8B EC 33 C0 55 68 B9  ‹Æ^[Ã@.U‹ì3ÀUh¹

LEA EDI,DWORD PTR DS:[Tabellen_Adresse]
MOV AL,BYTE PTR DS:[EDI+EAX] ; tabellenadresse + eax ? :S


Wie genau könnte ich das in Delphi umsetzen ist das überhaubt machbar ? und dann noch dies...

ausblenden Delphi-Quelltext
1:
ROL EDX,3					


wie soll das in delphi gehen ? also den befehl gibt es so leider nicht könnte nur shr finden aber das wohl was anderes...für hilfe bin ich sehr dankbar.....

MfG


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 13.07.2009 um 19:43
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 13.07.09 19:27 
das 1. ist ein zugriff auf ein lokales Array wobei eax die position angibt

ausblenden Delphi-Quelltext
1:
  woot := bla[nummer];					


2. geht so viel ich weiß nicht direkt in Delphi (rotale left)

ausblenden Delphi-Quelltext
1:
  wert := (wert shl 3or (wert shr 29);					



wobei du da auch direkt den assembler code benutzen kannst

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MagicRain Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: Mo 13.07.09 19:39 
Erstmal danke :)

1. müsste so doch richtig sein eigentlich hmm?

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//**********TABELLE****************
CONST tabelle: array [1..48] of byte = (
$C6, $C1, $E8, $03, $32, $46, $04, $32,
$47, $04, $0F, $85, $31, $B8, $02, $00,
$33, $C0, $40, $85, $C0, $0F, $84, $33,
$B8, $02, $00, $8A, $46, $05, $A8, $E0,
$0F, $85, $04, $08, $00, $00, $80, $BF,
$86, $05, $00, $00, $01, $0F, $85, $E7

MOV AL,BYTE PTR DS:[EDI+EAX]

das ist dann so Tabelle + varA ? also A := Tabelle+A; oder A := Ord(Tabelle[A)); oder lieg ich da falsch ?....

2.
Wie meinst du gleich in asm also mit inline geht es leider nicht das funktioniert irgendwie nie bei mir..
ausblenden Quelltext
1:
2:
3:
asm
rol eax, 3
end;

wie komm ich jetzt an den wert ran oder wie läuft das ? weil nun B := EAX <<< das geht ja nicht... das schon ne harte nuss wie man sieht...hoffe da kann mir noch jemand helfen um ein für alle mal das zu checken :)

also wert := (wert shl 3) or (wert shr 29); läuft auch irgendwie nicht...

zb 10 rol 3 = 13 .. bei dem code bekomme ich iein kram raus wie 902982 oder so oO komisch..

Moderiert von user profile iconNarses: Code-Tags ergänzt.


Zuletzt bearbeitet von MagicRain am Mo 13.07.09 19:45, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 13.07.09 19:44 
user profile iconMagicRain hat folgendes geschrieben Zum zitierten Posting springen:
wie komm ich jetzt an den wert ran oder wie läuft das ? weil nun B := EAX <<< das geht ja nicht...
Wenn du direkt eine Assemblerroutine komplett in Assembler schreibst, dann kannst du auf die Parameter und Rückgabewerte so zugreifen:
Die Parameter stehen der Reihe nach in EAX, EDX, ECX, weitere auf dem Stack.
Der Rückgabewert gehört in EAX. Ausnahme sind Strings und Interfaces. Dort wird das Ziel für den Rückgabewert als weiterer Parameter mitgegeben.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 13.07.09 19:46 
1. einfach:

var
wert: byte;
ausblenden Delphi-Quelltext
1:
  wert := tabelle[nummer];					


wobei nummer = eax, al = wert

2. Ein Rol kann durch shiften nachgebaut werden (siehe meinen vorherigen post)

du kannst ganz einfach assembler und delphi mischen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  blub := $12345678;
  asm
    mov eax, dword ptr[blub]
    rol eax
    mov dword ptr[blub], eax
  end;
  writeln(eax);


das gilt übrigens auch für das mit der tabelle

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  asm
    push edi
    push eax
    mov eax, 2
    mov edi, offset tabelle
    mov al, byte ptr[edi+eax]

    // al hat einen wert von $E8

    pop eax
    pop edi
  end;

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MagicRain Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: Mo 13.07.09 20:02 
Ah schonmal gut cool....

ausblenden Delphi-Quelltext
1:
wert := tabelle[nummer];					


Wie das genau gehen soll das tut es nicht so genau

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//**********TABELLE****************
CONST tabelle: array [1..48of byte = (
$C6$C1$E8$03$32$46$04$32,
$47$04$0F$85$31$B8$02$00,
$33$C0$40$85$C0$0F$84$33,
$B8$02$00$8A$46$05$A8$E0,
$0F$85$04$08$00$00$80$BF,
$86$05$00$00$01$0F$85$E7

MOV AL,BYTE PTR DS:[EDI+EAX]  also...

--------------------------------------
;LODS BYTE PTR DS:[ESI] ====>>> A := Ord(String[i]);
nehmen wir ann wir geben ein String = S == 53 = hex
nun macht er das

MOV AL,BYTE PTR DS:[EDI+EAX] ...... Tabelle + 53 = neuer wert bzw eine adresse...

also soll ich einfach A := Tabelle + A; das geht so leider nicht wohl nicht so einfach schade....resultat in hex ausgeben soll ein offset ergeben.....
..............................................................................................

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  blub := $12345678;
  asm
    mov eax, dword ptr[blub]
    rol eax
    mov dword ptr[blub], eax
  end;
  writeln(eax);

var 
blub,eax : Integer;
//und dann Edit2.text := EAX; IntToHex(EAX, 0); da kommt auch wieder iein kram raus hrr :(


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
function RotateByteLeft(AByte, Positions: Byte): Byte; register;
asm
mov cl, dl
rol al, cl
end;


Dieser code ob der geht ? bloß wie ruf ich sowas auf ?? RotateByteLeft( A, 3) haut iwie nicht hin...man ist das ne schwere sache ich sitzt da schon 2 tage dran das gibts nicht :autsch: :autsch: :autsch: :autsch:
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 13.07.09 21:05 
Sorry hab nicht verstanden was du willst.

Im Grunde ist MOV AL,BYTE PTR DS:[EDI+EAX] nichts anderes als ein Zugriff auf einen Wert in der Tabelle. In EAX steht der Index, in EDI die Adresse der Tabelle. In Delphi kannst du das direkt mit Zugriff über den Index machen.

Wenn der Index ausm String kommt wird ne schleife drumrum sein in etwa so:

ausblenden Delphi-Quelltext
1:
2:
for i := 1 to Length(s) di
al := tabelle[Ord(s[i])];


Rol eher so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function RotateByteLeft(AByte: Byte; Positions: Byte): Byte;
asm
  MOV CL, Positions
  ROL AByte, CL
  MOV Result, AByte
end;

function RotateByteLeft2(AByte: Byte; Positions: Byte): Byte;
asm
  MOV CL, DL
  ROL AL, CL
end;


procedure RotateByteLeft3(var AByte: Byte; Positions: Byte);
asm
  MOV CL, Positions
  ROL [AByte], CL
end;

1. ist zwar die am besten lesbare aber leider auch bisl langsamer

btw.: Was hast du vor? Gestern war wohl in der DP ein Thread offen der wohl gelöscht wurde...

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit