# Becoming A Better Reverse Engineer

I have been looking on the net and all I see when it comes to reverse engineering are a bunch of silly crackme tutorials. I want to be better at taking code from assembly to c or c++. I am getting the feeling that I am going to have to have to pick this all in time and or make a bunch of small programs and break them apart.I would like to build on what might be already out there. I am already some what proficient in what I am doing just I want to be better.

For example:

mov     eax, DDrawPtr
push    8
push    1E0h
push    280h
mov     ecx, [eax]
push    eax
call    dword ptr [ecx+54h]


Hex-rays translates this as

v1 = (*(**DDrawPtr + 0x54))(*DDrawPtr, 640, 480, 8)


which is ok.... It should be .

HANDLE v1 = DDrawPtr -> SetDisplayMode(640,480,8);


or sometimes IDA makes mistakes and will say

int __cdecl sub_41B869()


Where as this code doesn't return anything and is supposed to be a void....

I found a neat question and answer here Stackoverflow question/answer. I am wanting to learn more like this because I am realizing that IDA makes mistakes. I want to know how to recognize function types and more importantly do this by hand, because I am seeing IDA make mistakes and I feel that I should learn to recognize better these mistakes and see how I can manually if need bring it back.

Here is a book that does this somewhat but it goes from C to assembly not the other way around. reverse engineering pdf

Any suggestions?