首页 > 其他 > 详细

第二章:分析Hello World程序

时间:2020-06-14 21:56:06      阅读:49      评论:0      收藏:0      [点我收藏+]

入口点:可执行文件饿代码入口点,是应用程序最先执行的代码的起点,依赖于CPU.

通常,在执行程序之前会进行一系列的执行环境初始化

再进入Entry Point之后,还有C++的一系列自行添加的启动函数.

技术分享图片

 

 在401000处,里面有调用MessageBox的函数:

技术分享图片

 

 在执行这个函数之前没有任何的征兆,因此最好借着已知的程序多调试几次,熟悉语言的特性,以后在调试其它的语言时就熟练许多.

以下提供了四种代码查询法:

1.代码执行法

使用F8,在执行后观察堆栈,寄存器,以及程序的变化.

2.字符串检索法

直接选择搜索所有字符串

3.API检索法,在调用代码中设置断点(模块间调用)

在所有模块调用中找到相应的函数,下断点.但在复杂一点的程序中,常常会有很多个相同的不同地址的函数调用.

4.在API代码里面设置断点(查询函数符号)

找到先在内存布局中找到相应的dll文件,然后再在模块内搜索名称name.或者直接在x64dbg导航栏中找到符号栏,即可寻找.在dll库中找导出函数即可.

此方法有一个问题,若添加了run-time packer或保护器,则文件结构发生改变,无法找到.

为了应对这种情况,可以选择在DLL代码库被加载到进程内存后,直接向DLL代码库添加断点,待DLL库导入后,再使用上述步骤,此方法下的断点会执行到函数里面一步,即不会刚好停在函数处.

修改字符串的两种方法:

1.直接修改字符串缓冲区: 若要存入的数据更长,则容易损坏后面的数据.

2.寻找到一个新的区域,在其它内存区域内新输入字符串,然后修改函数调用时参数的地址.这当中涉及到地址转换以及内存区域的寻找.后面会学到.

第二章:分析Hello World程序

原文:https://www.cnblogs.com/Rev-omi/p/13126956.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!