《逆向工程核心原理》-- 调试HelloWorld.exe程序

首先用OllyDbg调试工具打开在VS中写好的HelloWorld.exe程序。



打开之后,弹出了提示框,提示入口点在代码外。调试器的停止地点和书上描述不一样,第一条并不是CALL,而是

MOV DWORD PTR SS:[ESP+8],EBX

第二条指令为

JMP ntdll.778705B9

离当前指令的7787FFA8还是距离挺远。
跳至778705B9处:


跳转后首先将EBP压栈,再将ESP传给EBP,此时的ESP为00BEF868:


经过两个没什么用的CALL之后



发现此处PUSH了 ntdll.77907D40,暂时不知道PUSH的什么东西,然后进入779705E1处的CALL


终于到了书上所描述402524处的指令段,此处并没有调用MessageBox()API,不是所要寻找的main()函数,继续向下



在进入000A110E后,在下面的指令中发现了MessageBoxW,初步猜测此处为main()函数内部



之后在进行跟踪几步之后

重新进行一次调试,F8进行指令跳转,发现CALL 000A1AD0处执行了MessageBox(),初步判定000A1AD0处为main()函数


在name in all modules 中查找MessageBoxW
发现在如下地址:


在此处设置断点,然后F9继续执行,执行到此处后,栈信息显示如下


得到00D516EE处调用的MessageBoxW,查找此处发现了要找的信息:


在此处设置断点提示在代码有效空间外,ALT+M调出memory。得到如下信息


00D51000至00D56000之间的信息被压缩过。难怪调试的时候那么奇怪

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 首先寄存器使用惯例:eip :指令地址寄存器,保存程序计数器的值,当前执行的指令的下一条指令的地址值,16位中为i...
    扎Zn了老Fe阅读 2,094评论 0 0
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 8,072评论 0 27
  • Exercise 3 方法:打开终端运行make qemu-gdb,再打开另一个终端运行make gdb,通过b ...
    找不到工作阅读 10,287评论 0 6
  • 秋叶老师的课听完了,意犹未尽。 以前当老师的时候,因为要输出给学生,要写论文、教材、出书,还要完成课题,所以读书、...
    有知有未阅读 240评论 3 2
  • 我始终相信感情是经得起时间推敲的。 写下这句话时,我刚看完小九写给我的一段话,刚经历过毒药们看我文章的欢喜。 小九...
    沈七年阅读 1,124评论 8 16

友情链接更多精彩内容