1. 代码执行法
(用于被调试的代码量不大,且程序功能明确的情况)
一直按F8,在某个时刻会有消息框弹出:
被调用的函数地址为401000,按F7进入被调用的函数,该函数即为main()函数:
2. 字符检索法
右击----search for—all referenced text strings
新跳出一个窗口,列出了程序代码引用的字符串:
双击“Hello word!”字符串,转到main()函数中调用MessageBox W()函数的代码处:
在dump窗口中使用goto命令,进一步查看4092A0地址的字符串:
灰色部分即为Unicode码形式表示的“Hello world!”
3. API检索法(1):在调用代码中设置断点
右击—search for—All intermodular calls,查看调用了哪些API函数:
可以看到调用MessageBox W()的代码,该函数位于40100E地址处:
双击它,找到主函数:
4. API检索法(2):在API代码中设置断点
OllyDbg并不能为所有可执行文件都列出API函数调用列表。使用压缩器/保护器工具对可执行文件进行压缩或保护之后,文件结构就会改变,此时OllyDbg就无法列出API调用列表了(甚至连调试都会变得十分困难)。
这种情况下,DLL代码库被加载到进程内存后,我们可以直接向DLL代码库添加断点。A)是操作系统对用户应用程序提供的一系列函数,它们实现于C:Windowsisystems32文件夹中.dl文件(如keme132.dI1、USer32.dI、gdi32.d1l、advapi32.dI1、ws2_32.dI1等)内部。
在OllyDbg菜单栏中依次选择View-Memory菜单(快捷键Alt+M),打开内存映射窗口。
内存映射窗口中显示了一部分HelloWorld.exe进程内存。在图底部的方框出以看到,USER32库被加载到了内存。
右击,列出被加载的DLL文件中提供的所有API:
定位到MessageBoxW
点击MessageBoxW,显示其代码,按F2打上断点:
再按F9继续执行,执行到代码断点处停止: