[center]Yo,
bardzo potrzebuję nauczyć się czytać i zmieniać wartości w miarę nie skomplikowanego kodu.
Bardzo jest mi to potrzebne.
Jednak do końca nie umiem czytać kodu.
I nie wiem potem jak zmienić wartość czegoś, coś zmienić albo zrobić "Dif".
Dam wam przykładowy kod.
[code]
.text:0818BA30 public _ZN5quest15horse_get_levelEP9lua_State
.text:0818BA30 _ZN5quest15horse_get_levelEP9lua_State:
.text:0818BA30 push ebp
.text:0818BA31 mov ebp, esp
.text:0818BA33 push ebx
.text:0818BA34 sub esp, 24h
.text:0818BA37 mov ebx, [ebp+8]
.text:0818BA3A mov eax, dword ptr ds:__stack_chk_guard@@FBSD_1_0
.text:0818BA3F mov [ebp-8], eax
.text:0818BA42 xor eax, eax
.text:0818BA44 mov eax, ds:_ZN9singletonIN5quest13CQuestManagerEE12ms_singletonE
.text:0818BA49 test eax, eax
.text:0818BA4B jz short loc_818BA85
.text:0818BA4D
.text:0818BA4D loc_818BA4D: ; CODE XREF: .text:0818BAA9j
.text:0818BA4D mov eax, ds:_ZN9singletonIN5quest13CQuestManagerEE12ms_singletonE
.text:0818BA52 mov eax, [eax+0DCh]
.text:0818BA58 movzx eax, byte ptr [eax+74h]
.text:0818BA5C push eax
.text:0818BA5D fild word ptr [esp]
.text:0818BA60 add esp, 4
.text:0818BA63 fstp qword ptr [esp+4]
.text:0818BA67 mov [esp], ebx
.text:0818BA6A call lua_pushnumber
.text:0818BA6F mov eax, 1
.text:0818BA74 mov edx, [ebp-8]
.text:0818BA77 xor edx, dword ptr ds:__stack_chk_guard@@FBSD_1_0
.text:0818BA7D jnz short loc_818BAAB
.text:0818BA7F add esp, 24h
.text:0818BA82 pop ebx
.text:0818BA83 pop ebp
.text:0818BA84 retn
.text:0818BA85 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
.text:0818BA85
.text:0818BA85 loc_818BA85: ; CODE XREF: .text:0818BA4Bj
.text:0818BA85 mov dword ptr [esp+0Ch], 831E7A4h
.text:0818BA8D mov dword ptr [esp+8], 1Ah
.text:0818BA95 mov dword ptr [esp+4], offset a____CommonSing ; "../../common/singleton.h"
.text:0818BA9D mov dword ptr [esp], offset _ZZN9singletonIN5quest13CQuestManagerEE8instanceEvE8__func___36 ; "instance"
.text:0818BAA4 call ___assert
.text:0818BAA9 jmp short loc_818BA4D
.text:0818BAAB ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
[/code]
Proszę, pomóż ktoś :)...[/center]

- Rejestracja:prawie 16 lat
- Ostatnio:4 miesiące
Odpowiedź brzmi - nic tutaj się (ciekawego) nie dzieje.
Sporo tutaj, jak w każdym programie, nic nie robiących (same z siebie) rzeczy które kompilator wrzuca automatycznie (np. ramka stosu).
Pobranie wartości singletona, check for null (to wersja debug?), niepotrzebny narzut kompilatora (nadmiarowy MOV singletona, chyba że czegoś nie widzę), pobranie jakiejś struktury z tego singletona i jeszcze jakiegoś pola z tej struktury, wrzucenie jej na (sądząc po nazwie) do wykorzystania przez LUA, kolejnu check, koniec.
Tak naprawdę nie analizujesz kodu linijka po linijce. W tej chwili i tak bardzo dokładnie się w niego zagłębiłem. Jedyne tak naprawdę co tutaj jest ważne to call lua_pushnumber
- patrzysz ewentualnie co wrzuca i tyle. Zastanawiając się czemu mov dword ptr [esp+8], 1Ah
a nie mov dword ptr [esp+8], 1Bh
nigdzie nie zajdziesz... W sumie przez większość czasu wystarczy patrzeć na calle, dopiero gdy dojdziesz do miejsca którego szukasz analizujesz algorytm i robisz to co chcesz docelowo. Inaczej ugrzęźniesz w setkach tysięcy linijek nic nieznaczącego kodu...

- Rejestracja:ponad 14 lat
- Ostatnio:ponad 4 lata
- Postów:439
Zrozumieć kod - trochę praktyki, najlepiej napisz sam jakis program w C++ (hello world) i debuguj w OllyDbg / IDA, i porównuj sobie jak kod z HLL jest przemielony na asm-a i jak to wszystko działa
Zmienić kod - hexedytor z disasmem HIEW (www.hiew.ru)
Zdiffować - plugin do IDA Patchdiff2 (http://code.google.com/p/patchdiff2/) lub Zynamic's BinDiff (http://www.zynamics.com/)