导航:首页 > 源码编译 > vs编译器反汇编

vs编译器反汇编

发布时间:2024-11-26 17:19:16

‘壹’ vs反汇编函数入口处指令

这个很简单ebp-0c0h是给出一段深度为0c0h堆栈,留给你的函数存变量。
因为第一条指令前还有一条指令mov ebp esp所以从ebp到esp是一个深度为0c0h的堆栈,可以想想下esp想当于地面
现在你朝地下挖了个深度为0c0h的洞,ebp现在就是洞底。
然后,rep stos是重复指令,重复次数是 30h 次,表示每次都向那个洞里放0cccccccch,
0ccccccch是4个字节,放30次,刚好等于第一句指定的堆栈的深度(16进制 30h*4=0c0h,有不理解打开windows
计算器算下)
所以余下三句的意思就是你把那个洞里全放成了0cccc cccch
为什么要放0ccccccch?
0cccccccch是个机器指令,是个中断指令。因为堆栈是存变量的,不可能被执行,所以一旦万一发生错误使堆栈被执行,那也只能执行个中断
被断了下来。
《天书夜读从汇编到windows内核编程》第一章有详细说明,有什么不理解你再去参考下吧

‘贰’ C#如何防止被别人反编译

C# 编写的代码通过VS编译器生成 dll 或 exe ,很容易被一些反编译工具查看到源码或对源码进行修改。
为防止代码被反编译或被篡改,我们可以进行一定的防范措施。但不能杜绝,因为DotNet编写代码运行必须编译成IL 中间语言,IL是很规则,同时也很好反编译。

反编译防范措施:

‘叁’ 高级编程语言也要编译成汇编语言,不同的cpu汇编语言不一样,那会编译成那种汇编语言呢

高级语言一般最终不是编译成汇编语言而是机器语言,而像C#这类语言编译后为公共语言,不是机器码,运行时公共语言代码由NET框架负责进一步即时翻译即时执行为机器指令。只有C++这类语言编译后为CPU可以直接执行的机器码。


附图是VS2019中C++语言的一段调试时的反汇编窗口,其中白字是C++源代码,下面是对应的汇编码,汇编行左列为内存地址,中间是对应的机器指令和数据(内存中的实际值),右侧是对应的汇编码。

比如,定义整数变量a并赋值1的语句,被编译器编译成C7 45 F8 01 00 00 00 这样几个字节,其中C7为汇编码中的MOV指令,可以操作16位寄存器和内存以及立即数,45 F8 是当前命名空间中变量地址,即变量a的地址(F845),而01 00 00 00 为32位宽度的数值1(内存排列顺序是前低后高)。也就是说机器语言的指令格式为:指令代码,地址,数据,当然根据不同指令,有时候地址和数据是不需要的。而右侧 MOV dword ptr[a],1 是指令助记符,也就是汇编指令,而用汇编指令编写的程序也是需要编译成机器指令的。


指令C7对应的汇编码及含义

阅读全文

与vs编译器反汇编相关的资料

热点内容
转转app是否秒绑是什么意思 浏览:676
刚毕业的程序员如何做职业规划 浏览:359
哪一款c语言编译器比较好 浏览:532
南宁程序员现状 浏览:862
新论pdf 浏览:587
bat大厂程序员十大标准 浏览:594
工程人程序员医生图片 浏览:501
车上显示服务器未激活是什么意思 浏览:629
海归程序员回国求职 浏览:13
单片机哪个工作区可以切换4个区 浏览:479
2019彩六改服务器地址 浏览:421
程序员女有什么特点 浏览:522
程序员的行情如何 浏览:313
程序员老宅视频 浏览:559
安卓手机如何使用蓝牙键鼠 浏览:240
u盘安装redhatlinux 浏览:61
电脑u盘加密要不要空间 浏览:436
程序员对普通人发信息 浏览:141
php向下取整函数 浏览:504
信源编译码实验分析 浏览:485