智能反編譯器
『壹』 用反編譯軟體顯示出了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是編譯後的文件,名字自定!
編譯之後就已經成功了!!!