Loading... # week1 ## VC使用 下载visual studio 2022 https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false 安装教程:[ Visual Studio 2022最新版安装教程(数千字图文详解),一步步教会你如何安装并运行VS2022(+背景图设置)_流苏的博客-CSDN博客_vs安装教程](https://blog.csdn.net/qq_51646682/article/details/122332082) 大概就是他这个过程,中间注意文件尽量别放在C盘 新建项目 ![image-20220221232732863.png](http://xherlock.top/usr/uploads/2022/02/1174137557.png) 选择c++下的控制台应用 ![image-20220221232809952.png](http://xherlock.top/usr/uploads/2022/02/4054200788.png) 写好代码后使用上方的本地Windows调试器 ![image-20220221232926129.png](http://xherlock.top/usr/uploads/2022/02/2228760384.png) 断点后可以调试,打开多种窗口如内存、反汇编、寄存器等如下 ![image-20220221233023630.png](http://xherlock.top/usr/uploads/2022/02/3766424112.png) ![image-20220221233136698.png](http://xherlock.top/usr/uploads/2022/02/626183963.png) 我们可以对反汇编中的代码进行分析,搞清底层的代码实现思路 下面我尝试学习下反汇编里的代码解释 c代码如下 ~~~c #include<stdio.h> int main() { int a = 16; printf("a = %d\n", a); return 0; } ~~~ 反汇编部分截取关键: * mov dword ptr [a],10h:将16进制形式的16赋给双字变量a * mov eax,dword ptr [a]:将a的值mov入eax通用寄存器中,eax表示32位寄存器,属于x86中的 * push eax:入栈 * push offset string "a = %d\n" (0737B30h):offset是属性操作符,表示应该把其后跟着的符号地址的值(不是内容)作为操作数,这里大概就是将我们c代码中的printf里的内容入栈 * call _printf (07310CDh):调用C语言中的printf函数输出内容 **借助反汇编中的数值查找内存中的字符串** ![image-20220221235331704.png](http://xherlock.top/usr/uploads/2022/02/1000451924.png) ## UltraEdit使用 一款很强大的编辑器,win、max、linux皆可,且关键是可以编辑exe文件 ![image-20220221235512580.png](http://xherlock.top/usr/uploads/2022/02/4160778935.png) 这里我们使用查找替换来直接更改exe文件的输出,一定记得要搜的字符串得加上查询ascii的条件 ![image-20220221235622720.png](http://xherlock.top/usr/uploads/2022/02/2470960395.png) ctrl+R替换 ![image-20220221235718908.png](http://xherlock.top/usr/uploads/2022/02/2899514312.png) 保存后cmd检查下,修改成功! ![image-20220221235747780.png](http://xherlock.top/usr/uploads/2022/02/3889174496.png) 最后修改:2022 年 02 月 27 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏