导航:首页 > 源码编译 > 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编译器反汇编相关的资料

热点内容
安卓手机怎么用cad命令行 浏览:381
2200工程机接收命令瞬间消失 浏览:251
压缩机工艺管是多大的 浏览:312
安卓刷什么系统稳定 浏览:35
程序员写炫酷代码 浏览:930
大话存储pdf 浏览:524
中铭机器人怎么编程 浏览:812
把字母变为数字的加密法 浏览:523
噬血狂袭第三季哪个app能看 浏览:422
江苏螺杆压缩机 浏览:980
android底部弹出对话框 浏览:502
怎么查服务器同行fc号 浏览:1000
什么服务器云鸟最便宜 浏览:221
vs编译器反汇编 浏览:571
程序员直播做项目创业 浏览:403
linux下samba配置 浏览:797
程序员面试银行岗位会有编制吗 浏览:415
ex表怎么加密码保护 浏览:174
小孩上编程课用哪款好 浏览:559
如何制作服务器商店 浏览:736