Autor Beitrag
Neidhard von Reuental
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 268

XP
BDS 2006 Prof
BeitragVerfasst: Fr 12.12.03 16:59 
:?:

hi ich habe hier einen beispielcode für einen trainer vor mir liegen aber blicke irgendwie nicht richtig durch.
kann mir mal jemand erklären was der code genau macht?

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
    .586p
GetBase    macro  Reg
    call  $+5
    pop  Reg
    sub  Reg,$-1
    endm

Code    segment  use32
    org  0

    dd  offset End_of_file
    dw  1    ; Version
    dd  End_of_header   ; Size of header
    dd  offset  Selections
    dd  offset  Selections_Text
    dd  offset  ID_List
    dd  offset  Entry
    dd  0 ; res1
    dd  0 ; res2
    db  0 ; Master Enable

End_of_header  equ  $




Entry:

    ;
    ; this code will be called after the game is loaded but before
    ; it is launched , it should be able to check for Pal/NTSC version
    ; and if multi xbe files is used in the game.
    ;

          mov     edi,010114h     ; xbe Time and Date  
          cmp     dword ptr [edi],03DBF9447h
          jne     Exit


    ;
    ; Get base of this start module location
    ;

;    GetBase  ebp    ; no need, ebp point to this start module location

    cld
  
    ;
    ; is credit trainer enabled
    ;
    
    cmp  [Sel_Credits+ebp],0
    je  Exit
    
    mov  al,0ebh
    mov  edi,0105fb1h  ; jmp

    stosb  

Exit:

    ret


ID_List    label   dword
    dd  04b4e0013h ; Frogger Beyond id
    dd  0


Selections  label   byte

Sel_Credits  db  0
Sel_Noreload  db  0


Selections_Text  label  word
    dd  offset  Text_Menu
    dd  offset  Text_Info

    dd  offset  text_credits
;    dd  offset  text_noload

    dd  0


Text_Menu  db  'Frogger Beyond +1',0
Text_Info  db  'Trainer By EvoX Team :-)',0
    db  0 ; End of info

text_credits  db  'Unlimited Lives',0
;text_noload  db  'No reload',0

End_of_file  equ  $

Code    ends



    end


das für mich wichtigste ist was ab "entry" geschieht. der code davor bleibt immer der gleiche.
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Fr 12.12.03 17:43 
Welche Sprache ist das?

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
ixtreme
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.12.03 17:49 
@chatfix: Assembler
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Fr 12.12.03 17:49 
wie schon im Titel steht ist das Assembler...
und falls du die Kommentare meinst: die sind Englisch :P :mrgreen:

oder meinst du was ganz andres??
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Fr 12.12.03 18:49 
hallo


ich probier es mal
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
           
mov     edi,010114h     // hier schreibt er den wert von edi an adresse 010114h  
cmp     dword ptr [edi],03DBF9447h // jetzt vergleicht er, ob die adresse auf die der inhalt von edi zeigt gleich 03dbf9947h ist ich vermute, [edi] bedeutet der tatsächliche inhalt
jne     Exit  // wenn es nicht gleich ist (jump not equal) springt er zum label exit
      cld // keine ahnung, clear irgendwas
cmp   [Sel_Credits+ebp],0 // hier vergleicht der code den inhalt von SEL_Credits + ebp mit 0
je   Exit // ist der inhalt gleich null, so springe zum exit
       
mov   al,0ebh  //schreibe den inhalt von al an adresse 0ebh
mov   edi,0105fb1h   ; jmp //schreibe den inhalt von edi an 0105fb1h

stosb    // keine ahnung, könnte sein store irgendwas

Exit:   // label exit; wie ein prozedur name ein sprungpunkt
      ret // return: das springt wieder in den code zurück, der zum label entry gesprungen ist


Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Fr 12.12.03 18:58 
aso, sah ohne die delphitags bzw generell so komisch aus...
ich wusste nicht das ASM die abk. für assambler ist, man lernt ja nie aus...

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
Neidhard von Reuental Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 268

XP
BDS 2006 Prof
BeitragVerfasst: Sa 13.12.03 10:03 
hat mir schon stück weitergeholfen
"stosb" ist irgend wie nen lückenfüller

mega thx :)
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 13.12.03 13:53 
Neidhard von Reuental hat folgendes geschrieben:
"stosb" ist irgend wie nen lückenfüller

Ich würde es eher als Store String Byte, wobei das String hier nicht als Zeichenkette zu verstehen ist, sondern als Array of Byte/Char.

stosb schreibt den in al stehenden Wert an die Speicheradresse ds:[edi] und erhöht danach edi


Zitat:
[edi] bedeutet der tatsächliche inhalt

[edi] liefert dir den Wert, der an der Speicheradresse edi liegt.
[edi] in Pascalschreibweise wäre: edi^


cld setzt dir Richtung für die stosX Befehle. Ist das direction-Flag gelöscht (cld = clear direction flag), wird edi durch stosX erhöht, sonst (std = set direction flag) dekrementiert. Man sollte nach einem Aufruf von std die Richtung wieder mit cld herstellen, da viel Code sich darauf verlässt.


Zitat:
cmp [Sel_Credits+ebp],0 // hier vergleicht der code den inhalt von SEL_Credits + ebp mit 0

Der Satz ist zweideutig. Hier wird der Inhalt der Speicheradresse, die durch Sel_Credits+EBP Adressiert wird mit 0 verglichen.

Zitat:
mov edi,010114h // hier schreibt er den wert von edi an adresse 010114h
mov al,0ebh //schreibe den inhalt von al an adresse 0ebh
mov edi,0105fb1h ; jmp //schreibe den inhalt von edi an 0105fb1h

Beides ist falsch. MOV kopiert den Wert rechts in das Register links.
Man merke: Unter MASM/TASM werden Speicherstellen immer mit [ ] angesprochen. Das [ ] entspricht also dem Dereferenzieren mit ^ unter Pascal.

_________________
Ist Zeit wirklich Geld?
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Sa 13.12.03 15:16 
AndyB hat folgendes geschrieben:

Beides ist falsch. MOV kopiert den Wert rechts in das Register links.


Ja ja, alter besserwisser *G* :wink: Ich habe nur mein beschränktes Assemblerwissen hervorgekramt. Beim MC68000 ist es allerdings so, wie ich geschrieben hab. Da wird der links nach rechts kopiert. Hab ich extra gerade nochmal nachgeschlagen. :wink:

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 13.12.03 17:09 
Beim NASM wird auch links nach rechts kopiert aber eben nicht beim Microsoft Macro Assembler (MASM) und Borland Turbo Assembler (TASM).

_________________
Ist Zeit wirklich Geld?
Neidhard von Reuental Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 268

XP
BDS 2006 Prof
BeitragVerfasst: Sa 13.12.03 19:21 
hab geschaft was ich machen wollte. danke für eure hilfe.
mein asm-wissen beruht nur auf bruchstücke meiner c64-zeit :roll: