嵌入式系统
函数如果仅是定义了,而没有被其它函数调用,这种情况下,优化系统不会将此函数编译进最终可执行结果。所以更不会占用内存。
2PC系统
通常情况下函数如果仅是定义了,但未被调用,系统会进行编译,能够检查并发现函数中的问题,但是否编译进最终的可执行文件受编译系统的控制,如果未被编译到系统中则不会占用内存。即便编译到了系统中,由于PC系统在运行时,并不会将所有的程序都加载至内存,因此,还会受到 *** 作系统本身的限制。
3BS系统
服务器端的程序通常情况下会占用内存,因为系统不清楚是否会被调用,尤其是在WebService这样的系统上。
客户端的程序,无论是否被调用,在传输、加载等情况下,肯定会被代码管理系统预编译,因此,也是需要占用内存的。
main函数是可以被调用的,并且不仅可以被自身调用,而且还能被其他函数调用。但是这样做非常不安全!因此不推荐这么做。如果希望代码循环进行,请使用安全的循环语句。
尝试调用main函数
main函数是在程序开始执行时,被系统唯一调用,且被系统调用仅一次的函数,当程序开始执行时,系统便不再关心也无法区别mian函数是否正在被其它函数调用。
首先,我来介绍一下发布出去的DLL所面临的风险:
一、直接引用
二、反编译
三、反射
如果DLL一点措施都不做的话,上面任意一种都可以达到破解目的的。
然后,通常网上能搜到如下的保护方式,但真心的来说,用处不大,当然对小白破解者增加了难度。
一、混淆类的工具(如Dotfuscator,但是可以通过ILSpy、Reflector等反编译哦,直接COPY代码也能运行)
二、加密类的工具(如MaxToCode,网上有相应的破解教程)
三、加壳类的工具(如Sixxpack,网上有相应的破解教程)
四、强签名(签名只是防止项目中的某一个DLL被篡改了,不能防止反编译或反射的哦)
说了那么多,难道没有相对靠谱的方式了吗?
最后,我们进入正题
上面那些工具的目的归结出来大约完成两个目的,一是不能看,二是不能调,当然,我们也是实现这两个目的,只是手段不同。
一、不能看:NET DLL可以包含托管堆代码(可以被反编译的)与非托管堆代码(不能被反编译,要反编译也是更高层次的了,不在讨范围内),我们将核心逻辑代码置于非托堆代码中,由托管堆代码提供接口供外部调用,调用时将非托管代码通过NET动态编译特性编译后返回执行结果。这样就保证了不能看。
二、不能调:我们在非托管代码中加入验证调用者来源功能,判断调用者的HASH值是不是与在非托管代码中约定的HASH值(发布时需要提前生成相关引用者的HASH值存于非托管代码,最后生成非托管代码的DLL放于安装包中)一致,如一致则通过执行返回结果,不一致则返回空。这样就解决了非合法来源不能调的问题。
更多参考:>
timer初始化与系统初始化你需要知道他们之间的关系,如果timer初始化对系统初始化存在依赖关系,那么timer初始化必须在系统初始化之后,或者添加到initSys()函数体执行末尾处也是可以的。
以上就是关于嵌入式中函数不会被调用会编译到固件吗全部的内容,包括:嵌入式中函数不会被调用会编译到固件吗、[C/C++] 为什么大家会说main函数不能被其他函数调用呢、软件采用.net C#开发,不想让人轻松破解核心逻辑及授权验证代码,DLL也不想被人随意调用,有什么办法吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)