|
Code Injection Problem
Der Original Code im Assembler ist "mov esi, [ecx+esi*8+4]"(read) und müsste auf die Adresse der Aktuell aktivierten Waffe zeigen. Der Wert esi hat für jede Waffe einen festgelegten Wert während ecx eine Adresse(verändert sich bei waffenwechsel nicht) beinhaltet. Mir geht es darum den Wert während die Schleife durchläuft wieder um 1 zu erhöhen wobei ich ein kleines Problem mit dem Syntax habe. Wie ändere ich den Code so um das er den Wert an der Adresse (esi, [ecx+esi*8+4]) um 1(oder mehr) erhöht?
Der Interpreter in T-Search gibt bei folgendem Code Fehler zurück:
add esi, [ecx+esi*8+4], 0x01 ;too many operands
add esi, [ecx+esi*8+4] [0x01] ;keine Fehlermeldung und auch nicht der gewünschte Effekt
Vermutlich liegt der Fehler im add, nur weis ich nicht wie ich den Code sonst schreiben soll da ich mich mit der Syntax nicht so auskenne. Es muss nicht unbedingt die Lösung sein, ein Tip mit dem ich das Problem selber lösen kann würde genügen.
EDIT: ich hab mal testweise "mov esi, [ecx+esi*8+4]" in "mov [ecx+esi*8+4], esi" umgeändert
Die Munition wurde zwar nichtmehr verbraucht aber dafür sind auch jede menge andere merkwürdigkeiten passiert.
2. EDIT: "http://www.itm.uni-luebeck.de/teaching/ws0607/info3/uebung/Info3-WS0607-Assembler-3.pdf?lang=de" hilft weiter, die Lösung fehlt noch
3. EDIT: "http://www.itm.uni-luebeck.de/teaching/ws0607/info3/uebung/Info3-WS0607-Assembler-1.pdf?lang=de"
"http://www.itm.uni-luebeck.de/teaching/ws0607/info3/uebung/Info3-WS0607-Assembler-2.pdf?lang=de"
"http://www.itm.uni-luebeck.de/teaching/ws0607/info3/uebung/Info3-WS0607-Assembler-3.pdf?lang=de"
"http://www.itm.uni-luebeck.de/teaching/ws0607/info3/uebung/Info3-WS0607-Assembler-4.pdf?lang=de"
Assembler-Syntax sehr gut erklärt.
4. EDIT: Hier die Subroutine fals jmd etwas damit anfangen kann.
.text:004BD7CC mov eax, [esp+1Ch+var_8]
.text:004BD7D0 test eax, eax
.text:004BD7D2 jz loc_4BD8D6
.text:004BD7D8 mov ecx, [ebx+18h]
.text:004BD7DB mov edx, [esp+1Ch+arg_0]
.text:004BD7DF mov esi, [ecx+esi*8+4] ;der Wert vom T-Searchdebugger(read)
.text:004BD7E3 mov ecx, [edx+0Ch]
.text:004BD7E6 lea eax, [edx+0Ch]
.text:004BD7E9 lea edx, [esp+1Ch+var_8]
.text:004BD7ED push esi
.text:004BD7EE push edx
.text:004BD7EF push eax
.text:004BD7F0 mov [esp+28h+var_C], esi
.text:004BD7F4 call dword ptr [ecx+10h]
.text:004BD7F7 mov eax, [esp+1Ch+arg_8]
.text:004BD7FB mov [esp+1Ch+arg_0], 0
.text:004BD803 push eax
.text:004BD804 call sub_52D370
.text:004BD809 mov ebp, [ebx+4]
.text:004BD80C xor edx, edx
.text:004BD80E mov ecx, eax
.text:004BD810 xor esi, esi
.text:004BD812 div ebp
.text:004BD814 cmp ebp, esi
.text:004BD816 mov [esp+1Ch+var_4], ecx
.text:004BD81A mov [esp+1Ch+arg_C], esi
.text:004BD81E mov edi, edx
.text:004BD820 jle short loc_4BD879
|