kleinen code umcoden ASM

delpher

Redshirt
Mitglied seit
15.08.2006
Beiträge
1
Renomée
0
Hallo

ich habe da mal ne frage weis auch nicht ob das möglich ist habe bisher immer nur Delphi programmiert und habe hier einen Code Schnipsel den ich Umprogrammieren will das heisst der Code soll seine funktion behalten nur halt anders.
Da ich leider in ASM die wenigste Peilung habe wollte ich mal fragen ob hier vielleichgt jemand weiss wie ich das am besten machen kann hier der Code:

mov ecx,1CD
mov eax,(adress1)
xor byte [eax],0C
inc eax
dec ecx
jnz (adress1)
push (adress2)
retn

was könnte ich daran wohl ändern das die funktion bleibt aber der code anders ist?
Bin für jeden Tip dankbar...
 
mov ecx,1CD
mov eax,(adress1)
xor byte [eax],0C
inc eax
dec ecx
jnz (adress1)
push (adress2)
retn

was könnte ich daran wohl ändern das die funktion bleibt aber der code anders ist?
Wie anders?
Ist das Inline Assembler?
Wo ist adress1?
Woher kommt der Schnipsel?
Soll das eine vollständige Funktion sein?
Woher kommt der Aufruf bzw. was erwartet der Caller?
Willst Du uns blos verarschen?
 
Ich vermute mal, er möchte das ganze in Delphi-Code umschreiben bzw. umgeschrieben haben, da er ja schreibt, dass er bisher nur Delphi programmiert hat.

Da müsste dann jmd. helfen, der in Assembler und Delphi fit ist (ich bin es nicht ;), ich kann nicht wirklich Assembler).

MfG Dalai
 
Ich kann weder diesen Assembler noch Delphi, imho würde der Code in "C" etwa so wie unten aussehen. Korrekt ist der Code aber noch nicht, da die Marke adress1 im Assembler nicht erscheint. Entweder ich interpretiere etwas falsch oder es wird ein Codebereich modifiziert und dann dorthin gesprungen, also eine ziemlich schmutzige Angelegenheit.

char *adress1 = ...
char *adress2 = ...
...
for (i = 0; i < 0x1cd; i++) {
adress1 ^= 0xc;
}
return adress2;
 
Mit der Schleife könnte etwa hinkommen.
Aber der Code springt zu adress1.
Vielleicht ist mov eax,(adress1) vertippt und soll mov eax,(adress2) heissen.
Dann wird aus
Code:
                mov ecx,1CD
                mov eax,(adress2)
adress1:
               xor byte [eax],0C
               inc eax
               dec ecx
               jnz (adress1)
               push (adress2)
               retn

in etwa

unsigned int i;
unsigned char *adress2 = ...
...
for (i = 0; i < 0x1cd; i++) {
adress2[i] ^= 0xc;
}
return adress2;
Sodass in C adress1 nicht mehr relevant ist.
Weil sonst hätten wir es womöglich mit sich selbst modifizierendem Code zu tun. ;D
 
Zuletzt bearbeitet:
Zurück
Oben Unten