https://blogs.msdn.microsoft.com/ntdebugging/2008/11/13/debug-fundamentals-exercise-1-reverse-engineer-a-function/
코드, 레지스터, 스택 값을 보고 아래 질문에 답해보세요.
1. DoTheWork 함수가 리턴될 때, 함수의 리턴값은?`
2. 보너스 문제: DoTheWork가 수행하는 함수의 연산자는?
힌트
1. 어셈블리어에서 괄호[] 는 괄호 안의 값을 메모리 주소로 취급하고, 해당 주소에 있는 값을 엑세스 한다는 의미임.
2. 32비트 integer 리턴값은 eax에 들어감.
// Code
0:000> uf eip
demo2!DoTheWork:
0040101c 55 push ebp
0040101d 8bec mov ebp,esp
0040101f 8b4d08 mov ecx,dword ptr [ebp+8]
00401022 8bc1 mov eax,ecx
00401024 49 dec ecx
00401025 0fafc1 imul eax,ecx
00401028 83f902 cmp ecx,2
0040102b 7ff7 jg demo2!DoTheWork+0x8 (00401024)
0040102d 5d pop ebp
0040102e c3 ret
// Current register state
0:000> r
eax=00000007 ebx=7ffd9000 ecx=ffffffff edx=00000007 esi=00001771 edi=00000000
eip=0040101c esp=0012fe9c ebp=0012feac iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
demo2!DoTheWork:
0040101c 55 push ebp
// Current stack values for this thread
0:000> dps esp
0012fe9c 00406717 demo2!main+0x27
0012fea0 00000007
0012fea4 82059a87
0012fea8 00000007
0012feac 0012ff88
0012feb0 004012b2 demo2!mainCRTStartup+0x170
0012feb4 00000002
0012feb8 00980e48
0012febc 00980e80
0012fec0 00000094
0012fec4 00000006
0012fec8 00000000
0012fecc 00001771
0012fed0 00000002
0012fed4 76726553
0012fed8 20656369
0012fedc 6b636150
0012fee0 00003120
0012fee4 00000000
0012fee8 00000000
0012feec 00000000
0012fef0 00000000
0012fef4 00000000
0012fef8 00000000
0012fefc 00000000
0012ff00 00000000
0012ff04 00000000
0012ff08 00000000
0012ff0c 00000000
0012ff10 00000000
0012ff14 00000000
0012ff18 00000000
아 캐피탈리즘 보고 있는데 리버싱할때마다 개노가다라는 생각 밖에 안듬. ㅠ.ㅠ
스택이랑 레지스터 값을 볼땐 eip를 꼭 확인해야 햇갈리지 않습니당... 특히 함수 콜 과정에서 esp, ebp 값이 변하기 때문에 함수 인자를 잘못 읽을 수도 있음.
겜제작 본격적인걸 회피하고 주변의 부수적인 이외의 것들로만 시간보내면 나중에 후회하게 될지도모름. 건설적이라고 생각되는일도 나중에 생각해보면 도피였더라. 그냥 내 경험이 그래서 지껄여봤어.
ㅇㅈ합니다 ㅜㅜ - dc App
게임 만들고 싶은데 만들기 싫은 심정이라고 해야되나 ... 뭐 뚝딱뚝딱 만드는 사람들 보면 신기함
누구나 겪는 현상입니다.. 저도 진짜 하기 싫어 죽겠어요..