23.03.2013 Views

Quick introduction to reverse engineering for beginners

Quick introduction to reverse engineering for beginners

Quick introduction to reverse engineering for beginners

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

*obj=a;<br />

*(obj+1)=b;<br />

};<br />

... and that’s completely predictable.<br />

Now dump() function:<br />

public _ZN1c4dumpEv<br />

_ZN1c4dumpEv proc near<br />

var_18 = dword ptr -18h<br />

var_14 = dword ptr -14h<br />

var_10 = dword ptr -10h<br />

arg_0 = dword ptr 8<br />

push ebp<br />

mov ebp, esp<br />

sub esp, 18h<br />

mov eax, [ebp+arg_0]<br />

mov edx, [eax+4]<br />

mov eax, [ebp+arg_0]<br />

mov eax, [eax]<br />

mov [esp+18h+var_10], edx<br />

mov [esp+18h+var_14], eax<br />

mov [esp+18h+var_18], offset aDD ; "%d; %d\n"<br />

call _printf<br />

leave<br />

retn<br />

_ZN1c4dumpEv endp<br />

This function in its internal representation has sole argument, used as pointer <strong>to</strong> the object (this).<br />

Thus, if <strong>to</strong> base our judgment on these simple examples, the difference between MSVC and GCC is style<br />

of function names encoding (name mangling) and passing pointer <strong>to</strong> object (via ECX register or via first<br />

argument).<br />

84

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!