智能反编译器
‘壹’ 用反编译软件显示出了vb5.0或vb6.0编写的exe软件的代码,我怎么破解请问你用的什么反编译软件破解的
没有这种软件...
‘贰’ 谁可以把单片机HEX文件反编译成源代码需要钱么另议[email protected]
你下载一个51智能反编译器就可以吧HEX文件反编译成汇编语言了
那个软件对部分PIC的型号可以的
‘叁’ 现代C/C++编译器有多智能
最近在搞C/C++代码的性能优化,发现很多时候自以为的优化其实编译器早就优化过了,得结合反汇编才能看出到底要做什么样的优化。
请熟悉编译器的同学结合操作系统和硬件谈一谈现代c/c++编译器到底有多智能吧。哪些书本上的优化方法其实早就过时了?
以及程序员做什么会让编译器能更好的自动优化代码?
举个栗子:
1,循环展开,大部分编译器设置flag后会自动展开;
2,顺序SIMD优化,大部分编译器设置flag后也会自动优化成SIMD指令;
3,减少中间变量,大部分编译器会自动优化掉中间变量;
etc.
查看代码对应的汇编:
Compiler Explorer
【以下解答】
举个之前看过的例子:
int calc_hash(signed char *s){ static const int N = 100003; int ret = 1; while (*s) { ret = ret * 131 + *s; ++ s; } ret %= N; if (ret < 0) ret += N; //注意这句 return ret;}
【以下解答】
举个简单例子,一到一百求和
#include int sum() { int ret= 0; int i; for(i = 1; i <= 100; i++) ret+=i; return ret;}int main() { printf("%d\n", sum()); return 0;}
【以下解答】
话题太大,码字花时间…
先放传送门好了。
请看Google的C++编译器组老大Chandler Carruth的演讲。这个演讲是从编译器研发工程师的角度出发,以Clang/LLVM编译C++为例,向一般C++程序员介绍理解编译器优化的思维模型。它讲解了C++编译器会做的一些常见优化,而不会深入到LLVM具体是如何实现这些优化的,所以即使不懂编译原理的C++程序员看这个演讲也不会有压力。
Understanding Compiler Optimization - Chandler Carruth - Opening Keynote Meeting C++ 2015
演示稿:https://meetingcpp.com/tl_files/mcpp/2015/talks/meetingcxx_2015-understanding_compiler_optimization_themed_.pdf
录像:https://www.youtube.com/watch?v=FnGCDLhaxKU(打不开请自备工具…)
Agner Fog写的优化手册也永远是值得参考的文档。其中的C++优化手册:
Optimizing software in C++ - An optimization guide for Windows, Linux and Mac platforms - Agner Fog
要稍微深入一点的话,GCC和LLVM的文档其实都对各自的内部实现有不错的介绍。
GCC:GNU Compiler Collection (GCC) Internals
LLVM:LLVM’s Analysis and Transform Passes
========================================
反模式(anti-patterns)
1. 为了“优化”而减少源码中局部变量的个数
这可能是最没用的手工“优化”了。特别是遇到在高级语言中“不用临时变量来交换两个变量”这种场景的时候。
看另一个问题有感:有什么像a=a+b;b=a-b;a=a-b;这样的算法或者知识? - 编程
2. 为了“优化”而把应该传值的参数改为传引用
(待续…)
【以下解答】
推荐读一读这里的几个文档:
Software optimization resources. C++ and assembly. Windows, Linux, BSD, Mac OS X
其中第一篇:http://www.agner.org/optimize/optimizing_cpp.pdf
讲解了C++不同领域的优化思路和问题,还有编译器做了哪些优化,以及如何代码配合编译器优化。还有优化多线程、使用向量指令等的介绍,推荐看看。
感觉比较符合你的部分需求。
【以下解答】
一份比较老的slides:
http://www.fefe.de/source-code-optimization.pdf
【以下解答】
利用C++11的range-based for loop语法可以实现类似python里的range生成器,也就是实现一个range对象,使得
for(auto i : range(start, stop, step))
【以下解答】
我觉得都不用现代。。。。寄存器分配和指令调度最智能了
【以下解答】
每次编译poco库的时候我都觉得很为难GCC
【以下解答】
有些智能并不能保证代码变换前后语义是等价的
【以下解答】
诶诶,我错了各位,GCC是可以借助 SSE 的 xmm 寄存器进行优化的,经 @RednaxelaFX 才知道应该添加 -march=native 选项。我以前不了解 -march 选项,去研究下再来补充为什么加和不加区别这么大。
十分抱歉黑错了。。。以后再找别的点来黑。
误导大家了,实在抱歉。(??ˇ?ˇ??)
/*********以下是并不正确的原答案*********/
我是来黑 GCC的。
最近在搞编译器相关的活,编译OpenSSL的时候有一段这样的代码:
BN_ULONG a0,a1,a2,a3; // EmmetZC 注:BN_ULONG 其实就是 unsigned longa0=B[0]; a1=B[1]; a2=B[2]; a3=B[3];A[0]=a0; A[1]=a1; A[2]=a2; A[3]=a3;
【以下解答】
提示:找不到对象
【以下解答】
忍不住抖个机灵。
私以为正常写代码情况下编译器就能优化,才叫智能编译器。要程序员绞尽脑汁去考虑怎么写代码能让编译器更好优化,甚至降低了可读性,那就没有起到透明屏蔽的作用。
智能编译器应该是程序猿要较劲脑汁才能让编译器不优化。
理论上是这样的。折叠我吧。
【以下解答】
编译器智能到每次我都觉得自己很智障。
【以下解答】
虽然题主内容里是想问编译器代码性能优化方面的内容,但题目里既然说到编译器的的智能,我就偏一下方向来说吧。
有什么更能展示编译器的强大和智能?
自然是c++的模版元编程
template meta programming
简单解释的话就是写代码的代码,写的还是c++,但能让编译器在编译期间生成正常的c++代码。
没接触过的话,是不是听上去感觉就是宏替换的加强版?感觉不到它的强大呢?
只是简单用的话,效果上这样理解也没什么
但是一旦深入下去,尤其翻看大神写的东西,这明明看着就是c++的代码,但TM怎么完全看不懂他在干什么?后来才知道这其实完全是另外一个世界,可是明明是另外一个世界的东西但它又可以用来做很多正常c++能做的事....
什么?你说它好像不能做这个,不能做那个,好像做不了太多东西,错了,大错特错。就像你和高手考试都考了100分的故事一样,虽然分数一样,但你是努力努力再努力才得了满分,而高手只是因为卷面分只有100分.....在元编程面前,只有想不到,没有做不到。
再回头看看其他答案,编译器顺手帮你求个和,丢弃下无用代码,就已经被惊呼强大了,那模板元编程这种几乎能在编译期直接帮你“生成”包含复杂逻辑的c++代码,甚至还能间接“执行”一些复杂逻辑,这样的编译器是不是算怪兽级的强大?
一个编译器同时支持编译语法相似但结果不同却又关联的两种依赖语言,这个编译器有多强大多智能?
写的人思维都要转换几次,编译器转着圈嵌着套翻着番儿地编译代码的代码也肯定是无比蛋疼的,你说它有多强大多智能?
一个代码创造另外一个代码,自己能按照相似的规则生成自己,是不是听上去已经有人工智能的发展趋势了?
上帝说,要有光,于是有了光。
老子曰,一生二,二生三,三生万物。
信c++,得永生!
===
FBI WARNING:模板元编程虽然很强大,但也有不少缺点,尤其对于大型项目,为了你以及身边同事的身心健康,请务必适度且谨慎的使用。勿乱入坑,回头是岸。
【以下解答】
c++11的auto自动类型推断算么....
【以下解答】
智能到开不同级别的优化,程序行为会不同 2333
【以下解答】
这个取决于你的水平
‘肆’ 51单片机的智能反汇编软件怎么用
反汇编的代码再怎么好看,看起来也让人头痛,不如理解程序的设计原理,重新写程序,这样的花的时间要比看反汇编的代码少的多。
‘伍’ 求把这个c语言转换成汇编语言
;用如下程序,替换楼主的C程序,效果相同:
ORG 0000H
SJMP START
ORG 000BH
DJNZ R2, T0_EXIT
MOV R2, #35
XRL P0, A
DJNZ R3, T0_EXIT
MOV R3, #10
DJNZ R4, T0_EXIT
MOV R4, #30
RL A
JNB ACC.4, T0_EXIT
MOV A, #1
T0_EXIT:
RETI
START:
MOV TMOD, #02H
MOV TH0, #56
MOV TL0, #56
SETB TR0
MOV IE, #82H
MOV A, #1
MOV R2, #35
MOV R3, #10
MOV R4, #30
SJMP $
END
;C 程序中,令 P0.0~P0.3 逐位闪烁
;每一位,每隔 7ms,亮灭转换一次,有些快哈,肉眼看不清楚
;每个位,闪烁 300 遍后,即 2100ms 后,换下一位
;上面的汇编程序,同样实现了 C 程序的功能
‘陆’ 怎么样反汇编出源代码
看你反汇编什么样的文件,对于通用的windows执行文件来说,一般是使用专用的工具,比如soft ice,
ollydbg 等,但是这样得到的也只是汇编代码。对于java Class来说,通过JAD等可以直接得到Java代码。
‘柒’ WIN7下极品飞车12弹错误
hemida是一个强劲的保护系统, 专为了那些想保护自己的程式 Themida
不被先进的反向工程和黑客软件破解的软件开发者而开发的。开发者不需要更改任何的原代码,和不需要程式编制的经验使用WinLicense。 Themida使用SecureEngine®的保护技术。它能够以最高的优先等级运行,这些保护技巧是从来都没在电脑防御技术领域出现过,使它最大程度地保护任何程式 。
编辑本段WThemida保护功能特点
多层的加密措施来保护程式的代码和资料。 黑客工具的监测。 以最高优先等级来启动代码,从来都没在电脑防御技术领域出现过。 扰乱 程式 的运行代码,资料和 APIs ,使软件破解者无法对 程式 还原成原代码 对于反汇编器和反编译器的保护 SDK为SecureEngine®和受保护的程式提供一个双向的沟通。 阻止从内存转送到磁盘上的高级技术。 完全自定义的保护选项和讯息。 比较Themida和其他软件保护层
编辑本段弱点
Themida最主要的目的是遮盖所有的现行的软件保护技巧上的漏洞。大多数的软件保护软件自称是对抗软件破解的完美的解决方案,可是事实确非如此。以下的列表列出了Themida如何遮盖两个软件保护层最主要的弱点。
过时的保护技术
一般上,软件保护层使用的是一些能用最新的黑客工具破解的过时保护技术。即使最新的软件保护层也只是旧的软件保护层的拷贝而已,只不过加入对抗软件破解的一些新却不强的技巧。Themida使用一种非常高级和新的技术,来检测任何可能的软件破解,确定每个 程式都被特别保护,以避免一般的破解攻击。
在操作系统下的运作受到限制
现行的软件保护层只可以在一般模态下运行。换句话说,这些保护层无法使用那些只可以在内核模态下运行的高级保护技巧。Themida的部分代码将在 内核模态下运行,以使用对抗软件破解的最高级技术。因此,它是独特的保护层。
编辑本段作为注册管理器的Themidae
Themida提供最广泛的选项和特点来创建目标 程式的试用版或完全版。软件开发者可以通过一套完整的 SDK 与Themida沟通,检查他们试用版或完全版程序现在的状态。Themida也提供自动处理所有可能的状况的能力,例如:当一个程序过期后,注册就失效等等,为软件开发者省下了加入更多代码的时间。
Themida的一些最重要的注册保护措施特点
可以创建用来延长试用版本的有效期的特别码。 一个用来储藏试用 状态的 强劲的引擎,以避免任何软件破解者尝试重置有效期。 可以为个别开发者的需要创建不同的注册码。 针对特定国家的试用锁定和注册码。 机器锁定,使程式只运行在特定的电脑上。 自定的试用计算器来控制你试用版本的有效资源。 为试用版本和完全版本制定独立的密码。 可以使用外部 Themida DLL 来创建你自己的自动化系统。 超过 50 种不同函数的完整 SDK 。 为试用版和完全版提供 .NET SDK 支援。 使用数据库来安全地储存你所有的软件,客户和注册资料。 使用嵌入 式 产生器来为程序创建注册码,试用期延续码以及密码。 自定义所有的试用 / 注册讯息,也控制是否要展示特定的试用 / 注册讯息。
比较Themida和其他注册管理器
许多的注册管理器看来很容易为一个程式加入试用和注册支援。可是,当开发者需要另外的注册功能或另外的保护功能来保护他们的试用资料,他们却会对他们所使用的注册管理器感到厌烦。在很多的情形下,就算是一个对破解工具没有任何使用经验的初学程式编制员也可以轻易地重置程式的试用期。Themida就是特别为了遮盖这种漏洞而开发的。 以下,我们列出了现行的注册管理器存在的主要弱点以及Themida如何解决这些弱点。 • 死板的软件注册方式 : 大多数的注册管理器为程式提供了有限的注册方式。因此,软件开发者被迫修改他们的程式以迁就他们所使用的注册管理器,而不是注册管理器来迁就特定的程式。 WinLicense却提供多种注册程式的方法,可以容易地加入到任何的软件上去,软件开发者也不会因此而受到限制。 • 控制试用/注册状态的有限SDK: 大多数的注册管理器提供一套可以和这注册管理器沟通的有限 SDK 函数。然而,由于受到这有限的函数功能,开发者往往在编制注册方式进他们的程式时受到限制。Themida的 SDK 出口超过 50 个函数,让开发者完全的掌控他们程式的试用 / 注册状况。而且,这当中许多的函数更会在掌控程式的试用 / 注册状况方面提供开发者更多的点子。 • 容易重置的试用期限: 很多的注册管理器看来非常的吸引,也像是个在为程式创建试用期限很好的方案。可是,当开发者开始使用这些管理器,而且也慢慢发现要使用黑客工具重置这些受保护程式的试用期限是何等容易的时候,问题就产生了。Themida却提供一个强劲的方案,它使用的是一个称为 Trial Storing Manager® 的复杂引擎来储存试用期限。这引擎使软件破解者要想重置受保护的程式的试用期限时面临非常大的困难。 • 在机器锁定注册的弱点: 很多的注册管理器提供可以锁定特定机器的注册码。它们是通过特定的视窗注册表项目或普遍的视窗 API 来获得一些硬件的资料,从而获得机器的独特 ID 。这方式的机器锁定注册却存在着一个极大的危险。这是因为人们可以私自更改机器 ID 来使用一个本来已经锁定在另一台机器的注册软件。Themida了解这个危险,所以它直接使用 SecureEngine® Kernel Mode 技术来获取机器的 ID 。软件破解者无法真正地更改他们机器 ID ,所以也就无法启动Themida锁定在其他机器的注册软件。
结论
如果你是身在软件开发的行业里,或许只是普通的共享软件编制员,或是个工程经理,你都需要保护你的软件。当你在大约计算每年自己的软件被破解或被非法使用的损失相差多大时,有一点要正视的是,经济上的损失终究还是经济上的损失,而且更是你在经济上的损失。所有的软件开发者都必须积极地采取措施来保护他们自己的软件不受到非法的使用;请让Themida为你代劳吧。 试用 / 注册特点 机器锁定码 高级注册系统的 SmartActivate® 码 多个试用类型 可以结合多种地试用类型和注册码 在系统里用来储存试用期限的强劲引擎 拥有超过 50 种函数的完整 SDK 完全的 .NET SDK 支援 针对个别开发者需求的自定义的试用计算器 使用网络 服务器来创建你个人的注册系统 针对特定国家的试用锁定和注册码 用来延长过期程式的期限延长码 文字码注册 文件码注册 注册表项目注册 个别试用或注册版的独特密码保护 有期限的注册码 对于被偷用的注册码的检测 自定义所有的试用 / 注册讯息,也控制是否要展示特定的试用 / 注册讯息 使用嵌入式产生器来创建注册码,试用期延续码以及密码 对于个别受保护程式自动产生独特的注册码产生器 对于个别开发者的需求提供自定义的注册填项 使用数据库来安全地储存你所有的软件,客户和注册资料 保护措施特点 使用反 除错 工具技术来检测 / 瞒骗任何 除错 工具 反内存转存技术来阻止任何 Ring3 和 Ring0 的 转存 在个别受保护的程序里使用不同的加密 算法和编码 反 API 扫描技术来防止原导入资料的重建 在目标程序里使用自动逆向 编译和 干扰技术 使用虚拟机器对特定的代码进行模拟 高级变异引擎 与保护层的 SDK 沟通联系 对所有 静态和互动的 反汇编程序 采用反 反汇编 技术 多个多态层,拥有超过 50.000 个形态 高级的 API 打包 技术 对文件监视器和 Registry 监视器采取反监视技术 在真实的指令间随机加入垃圾码 专门的保护 线程 高级的 线程网络联系 在目标程序使用反内存 修改和 CRC 技术 使用多态引擎来扰乱原指令 高级的切入点保护 对目标程序进行动态加密 在真实的指令间加入反跟踪代码 高级反 断点 管理 对目标程序作即时保护 对目标程序,资源或保护代码作压缩 反除错隐藏技术 在保护代码中进行完全变异来防止 样式辨认 在目标程序进行即时模拟 对目标程序智能性的加入保护代码 对内在资料进行随机再分配 有机会对被保护的程序 设置自定义讯息 命令功能 支援 还有更多 ...
‘捌’ 关于android反编译软件jd-gui,反编译出的都是.class文件,怎样才能得到.java文件
jd-gui就是反编译成JAVA的。
点file 点Save all sources将jar包保存为JAVA文件。
‘玖’ 我下了个nasm编译器,但不知道应该怎么使用,麻烦用过的人可以教教我,谢谢!!!
一般用nasm都是把汇编文件.asm编译成执行文件.bin格式的二进制文件
先要找到你想编译的文件,我的是在F盘OS文件夹下!
第一步:先转到你自己的文件夹下!如图,先输入F:
跳到F:目录下,再用cd命令转换路径(OS是我自己的文件夹下,你自己用你自己的)
第二步:就是编译了!如图nasma.asm-ot.bin
其中a.asm是你要编译的文件,t.bin是编译后的文件,名字自定!
编译之后就已经成功了!!!