Disasembler - Problem z odczytaniem kodu ;/....

Disasembler - Problem z odczytaniem kodu ;/....
0

[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]

hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:19 dni
0

Ale co chcesz dokładnie zrobić? Bo nie rozumiem


0

Na razię, chcę tyko zrozumieć ten kod.
Po prostu zrozumieć go.
Co się dzieje, dlaczego tak, itp... ;/.
Tutaj kod przedstawiony w innej formie :
[IMG]http://i56.tinypic.com/2i96omv.png[/IMG]

msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
0

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...

edytowany 1x, ostatnio: msm
0

A ktoś kto się zna, albo coś.
Możę jakieś dane kontaktowe?
GG, skype??
Bo zależy mi na tym, a łatwiej było by rozmawiać ;/...

Bartosz Wójcik
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:439
0

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/)

0

Proszę o jakiś kontakt.
GG, Skype, coś innego ;/...

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)