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?