API Hooking을 통해 Application 이하의 차원에서 프로그램을 자유 자재로 다룰 수 있다는 것을 배웠다.
몇몇 게임(카트라이더, 워록, 대항해시대 등등)의 프로그래머들이 Application 층만을 다룰줄 아는 무식한 프로그래머라는 것을 알았다. (특히, 워록의 프로그래머는 프로그래머라기 보다 코더에 가깝고 배운 것만 쓸 줄 아는 무식한 바보이다. 그 프로그래머는 개발자로서의 수명이 매우 짧을 것이다. 3년도 못가 짤리거나 혹은 워록이라는 게임이 사라질걸?) - (이 게임들은 코드를 숨기지 못하게 하는 방법도 모르는 모양이다. 이런식으로 게임들을 건들여 패치를 만들 수 있다. KartRider는 요즘에와서 debug를 불가능하게 해두고 실행 파일을 packing 한 모양이다. 뭐 그래도 많은 코드들을 따라가지 않고 ntdll.ZwTerminateProcess에 BreakPoint를 걸어 앞 함수를 건들이면 그만이지만.)
System Programming을 통해 Application층 프로그래밍의 본질을 깨닫기 시작했으며, 가장 중요한 것이 Assembly란 것을 다시 한번 깨달았다.
Assembly를 자유자재로 다루지 못하는 프로그래머는 그 수명이 매우 짧다. 아니라고? 100에 80~90%는 그럴걸? 나머지 10~20%의 프로그래머도 디버그 능력은 현저히 떨어질 것이다. 디버그 능력이 좋다고 해도 Assembly를 자유자재로 다루는 프로그래머를 결코 능가 할 수 없지.
프로그래머라면 Code의 본질을 알아야한다. 그것을 이루는 것이 Assembly이다. 이것을 수행하지 않은 프로그래머는 프로그래머가 아니라 Coder이다. Assembly로 특정 함수를 따라다니며 실제로 익히는 방법은 MSDN에서 나와있는 것을 그대로 베끼는 것보다 현명할지 모른다. 프로그래밍은 배우는것이 아니라 직접 Code를 짜보는 것이다. MSDN을 보는 것과 debug로 따라 가보는 것은 그 차이가 크다.
프로그래밍을 처음 접하는 사람으로서는 Assembly어는 무리가 있을지도 모르나, 약간의 지식을 갖춘 사람은 Assembly어를 꼭 배워야한다. Assembly어는 결코 사라질 수 없는 언어이다. 이것은 매우 중요하며, 이 때문에 대학에서도 정규 과정속에 포함되어 사라지지 않는 것이다.