⑴ 反編譯需要什麼語言
不同編程語言有不同的反編譯工具,比如java反編譯工具xjad
⑵ 想做副業,學編程,學哪種語言比較好(零基礎)
最近有很多同學問我,我是一個零基礎的小白,到底學習哪一種語言比較好?作為一個寫了十年代碼程序員,用過七種語言的我來說,必須要強調一下,語言只是一種工具,當你真正理解了要做的事,選一個順手的就行。跟工具一樣,哪天有新的好用的語言出來,把舊的扔掉就好。
我今天寫這篇文章的目的是想給大家一個參考。
決定用什麼語言的因素有有很多,比如性能,內存佔用,開發難度,運維難度,目標平台,可執行文件大小,代碼可維護性,項目周期,項目規模,招聘難度,團隊構成,歷史遺留問題,甚至派系斗爭等。
比如騰訊就有大量歷史遺留的C和C++的伺服器代碼,畢竟20年前沒得選。又比如空降技術負責人可能會為了讓自己人上位,讓自己團隊出成績,選擇用其他語言或者框架對本來工作良好的系統進行重構。
下面開始聊語言
python
先說python,是因為這個語言小學生都開始學習了,以後不會python要被小學生欺負了。語法簡單,除了前端幾乎萬能,可用的庫極其豐富,能想到的功能幾乎都有現成的庫可以用。不管是搞爬蟲,做人工智慧,機器學習,數據分析,還是自動化運維,自動化測試,python幾乎都是首選。不想當程序員還想學習一門語言的話,學習python就沒錯了。缺點是慢,但是能讓機器累的事,何必讓人來累。
php
PHP是世界上最好的語言,可能這個已經成為很多程序員的梗。
我沒用php開發過大型項目,自己做東西的感覺是這語言非常簡單,以前用的人很多,招聘容易,但是不適合做復雜的項目。現在用得越來越少了,迅雷以前有不少運營活動頁面是PHP做的。
C
C的語法足夠簡單,應該是最接近機器語言的高級語言,適合編寫操作系統底層,驅動程序,硬體相關的程序以及看重性能的程序。由於過於簡單,構建大型程序的復雜度非常高,建議想往研發方向走的同學都學習一下C語言。
可以對計算機一些底層原理了解,比如指令執行過程,內存管理,異常,多線程,編譯過程等又更深層次的了解。掌握C語言再學習其他語言會變得很輕松,學習破解也有幫助,畢竟匯編基本都可以反編譯出C代碼。
C++
C++是一個糟糕的語言,這不是我說的,這是Linux之父說的。我自己用C++四五年時間,越到後面就感覺這句話越有道理。
首先C++的強大是毋庸置疑的,但是作為一個跟C一樣偏底層的語言,如果不理解寫的代碼背後到底發生了什麼事,如果出了錯,你是永遠不可能知道錯在哪裡的。
一個沒有垃圾回收的語言,不用智能指針很容易導致內存泄漏,錯誤的用了智能指針不但內存泄漏之後不好解決,還容易導致提前釋放等問題。
C++支持強制類型轉換,如果轉換前後的內存結構不一樣,很有可能導致各種隱性問題。還有Java之類非原生語言的異常處理都是語言自定義的異常,而C和C++中的異常很多都是操作系統層的異常。
Windows下一個簡單的try catch,你覺得可以抓到try中所有的異常,但是由於異常處理函數的指針保存在棧上,這時一個棧溢出可能直接導致異常處理函數指針被覆蓋,異常會出現在你意想不到的地方。微軟有大神曾說過,想你的代碼後續可維護就刪掉代碼中所有的try catch。
又由於語言非常底層,當程序出現底層崩潰的時候,想解決掉這個崩潰往往要讀一些匯編,這時候如果使用了大量的模板,比如stl和boost,那生成的匯編幾乎完全不可讀。看過stl代碼的人應該都知道這玩意兒寫的有多晦澀,就導致了你想用一個C++庫,如果不了解這個庫的實現原理,那大概率會出錯。
C++的復雜度又讓你很難真的理解那個庫的原理,結論就是C++強大,但是必須用的人也強大。C++直到現在還在瘋狂的增加特性,我用了四五年我自己都不敢說自己會玩C++,能用其他語言就優先考慮其他的,把C++作為最後的選項,不建議新手學,除非你的目標領域必須使用。
Rust
Rust是為了解決C和C++的各種問題而出現的語言,性能接近C++,通過所有許可權,不用垃圾回收就解決了生命周期管理。有包括管理,又有極其嚴格的編譯器檢查,能編譯通過的代碼就不會有大問題,編譯器直接把水平不夠的新手擋在了門外,通過解決出問題的人是方式,從根本上解決了C++的問題。
我第一次用rust寫個小程序就跟編譯器較了一天的勁。它的缺點就是學習難度太大,語言太小眾,庫太少,很多輪子都要自己造。但是隨著微軟之類的大廠使用,相信之後發展會比較好,新項目如果需要C或者C++可以優先考慮rust。
Java
我現在主要也是一個Java程序員,對於Java這個語言我並沒有什麼很特別的感覺,配套設施完善,什麼都能幹,體驗非常贊,就是內存佔用有點難看。想搞安卓考法的必修,阿里有大量的伺服器項目使用Java。
唯一想吐槽的是gradle這個構建系統,版本問題搞得很頭疼。
JavaScript
js是前端的必修課,沒得選,然而node讓js也萬能了。用node做過後端項目後,感覺動態類型語言還是不太適合,由此帶來的低級錯誤很多,雖然可以用typescript解決,但是最終還要編譯成js,無法直接調試。由於沒有原生的多線程支持,利用cpu也只能通過開多個進程的方式。小項目的後端做著玩還可以,大點的還是考慮Java或者是go吧。
Lua
Lua是極其輕量的語言,語言特性接近js,runtime非常小。作為一個腳本語言,性能出色,內存佔用低,很適合各種嵌入式設備或者插件系統。
Go
這玩意兒一定是谷歌為了解決自己後端項目中遇到的問題而開發的語言,各種特性直戳痛處。語法簡單,規范嚴格,這就讓不管什麼水平的開發寫出來的代碼差距都不會太大。
靜態類型,沒有默認參數,沒有異常處理,可以降低犯低級錯誤的概率。編譯成原生代碼,可內嵌C代碼,原生支持協程和多線程,可以保證性能,支持跨平台編譯,輸出單文件方便部署,這些優點帶來的問題是Go的指向性太強,只適合做高並發api類的後端服務。
想用Go開發其他任何領域都會覺得特別別扭,類似C的語法過於簡單,又沒有泛型,導致很多功能都顯得很啰嗦。但由於Go解決了部署問題,跨平台問題,降低了研發人員的水平要求,降低了犯錯誤的概率。
關於這些語言的性能沒有絕對的排序,但根據我做項目帶團隊和面試的經驗,絕大多數的程序員的水平都還碰不到語言的性能瓶頸。一般來說對語言的理解以及多線程,演算法,網路,資料庫,緩存。硬體甚至業務的理解都比語言的性功能影響更大。
再次強調,語言只是工具,只有適不適合,沒有好與不好。基礎強大,用哪個都不怕,基礎太差,用什麼都尷尬。
只是會語法並不是掌握了這門語言,要知道程序背後發生了什麼。比如C++的對象模型,Java的虛擬機,垃圾回收,Go的協程,js的promise,rust怎麼編譯通過等等。
基礎是一門語言的核心,不管學習哪一門語言都要重點學好基礎。
⑶ VB6可以被很多軟體反編譯,那學VB還有何用
理論上,任何軟體都可以被反編譯,只是時間問題。與匯編、C語言比較VB6屬於比較難反編譯的了,如果不是做商業軟體,學一種編程語言的作用是能方便工作,提高效率。
VB6編譯器確實過時了,而且VB6有自身不足,但是一般軟體還是可以做的,而且比VB.net要小很多,VB.net的優點是很多東西都是現成的,比如菜單,可以直接設置出各種效果來,用VB6就要掌握API和自繪技術,或者借用第三方控制項。但是通過這樣可以提高自己的編程水平,缺點是開發效率低。
⑷ 程序員學哪種語言最好
1 、對普通人而言不建議C或C++
高手請略過,該語言底層,比較難,用的少。但對該語言一直懷有深深的敬意
2 、不建議學習Oracle、Cisco和C#系列
使用的公司少,就業面狹窄。Oracle主要金融、銀行在用,Cisco是路由器技術,用的公司也比較少,C#運行的Window伺服器環境貌似只佔了5%,這些語言並不是說不行,而是使用面狹窄
具體看下不同語言的差異
3、Web前端
web前端是最近才火的一個專業,遙想兩年前,做前端的還是被親切的稱為「前端仔」,從事的是一些切圖、布局、做瀏覽器兼容性等等不是那麼有技術含量的工作,很多公司的前端甚至外包出去,「前端仔」一直生活在程序員鄙視鏈的最底層。
4、服務端開發
如果想學服務端開發,隨便選一門語言即可,無論是Java、PHP還是Python,都是得到廣泛應用。
服務端主要工作包括業務邏輯的開發、數據模型的設計、可能還有中間件的開發、部署上線任務等等。
服務端工程師的發展方向是架構師以及CTO了,需要根據用戶量,產品特徵來設計整個系統的架構。比如現在需要做一個互聯網產品,這個產品的用戶量你需要估計有多大,根據用戶量推算需要多少伺服器,是否要做分布式,前端緩存要不要,用什麼語言開發等等.....這都是架構師或者CTO需要解決的工作。
其實服務端還包括很多內容,比如可能需要開發中間件,還需要部署開發測試環境,自動化測試工具等等,這些都屬於後端工程師的范疇。
5、機器學習工程師(數據科學)
其實市面上對機器學習的理解不對的,機器學習應該屬於數據科學的范疇,可笑的是社會上只是吹噓這個概念,而連基礎的概念都很少有人清楚
6、C/C++
C++能做什麼呢?貌似什麼都能做,又什麼都不能做... 但學習C++對了解計算機體系結構還是非常有作用的,其應用范圍包括操作系統、驅動開發、黑客技術、反編譯軟體破解、外掛開發等等,包括Nodjs、Java虛擬機、資料庫的底層代碼都是用C++來完成,所以如果你立志做一名極客,可能C++還是必須掌握的。但是其比較難,不像其它語言擼幾天就能擼個網站跑起來,C++從入門到應用實在是一件挺困難的事。
7、硬體工程師
偏傳統行業,研發周期長,沒軟體行業迭代快。需要的技能包括C/C++語言、匯編、電子電路、濾波器、arm等等。由於產業鏈條長,迭代慢,缺乏爆發性增長能力,整體收入並沒軟體工程師高。當然,硬體公司一旦成長起來更容易形成行業壟斷力,比如大疆、Intel等等,而且,確實很好玩是不是?
⑸ 我想學反編譯,要學匯編語言嗎,那有好的教程,給介紹一下
要學匯編語言
有基礎建議直接學
沒有就先學其他接近底層的語言
如:VC++,Delphi,
還要學Win32編程
⑹ 本人是計算機科學技術專業學生,想問一下學哪一個編程語言較好求大神指教
JAVA多在生活應用中。C語言多在伺服器、系統應用中。VB就比較少人用了。還有網頁語言。現在用的比較多的是php
在游戲應用中很多java和c語言結合應用的。
破解方面最基礎的就是匯編語言了。比如寫一些外掛等都一定會用到。反編譯等等。
所以不能想比較。要做基礎的話,就選c語言。學好了。 在學其他語言就很快了。1、2個月就可以自學會JAVA等
然後在學習匯編。
感覺ok就給個好評採納吧,盡快採納可以幫我賺多點分分哦,謝謝。。。。。
⑺ 哪些語言容易被反編譯
Java程序編譯後的結果是Java Bytecode,而.NET編譯後的結果是CIL(Common Intermediate Language),兩者都具有下列的特性:
-同為堆棧式(stack-based)指令集。
-同為高階面向對象機器語言
-和平台無關
-Code Validation
-Symbolic Link
上述任何一點特色,都可以讓程序變得更容易反編譯,全部五點結合起來更是不得了。所以要反編譯Java和.NET可以說是相當容易的。網路上就到處流傳著Java的反編譯器(decompiler),可以把編譯後的檔案反推出原始碼,
⑻ 請問不容易被反編譯的編程語言有哪幾種是比較推薦學習的
首先恭喜你選對了行業。不懂編程的人將來估計是寸步難行。IT行業入門門檻兒較低,對於IT專業外的知識儲備沒有太高要求。適合各專業各領域的學生和在職者加入。薪水高、地位高、沒有性別歧視和具體的年齡限制等。
至於具體學什麼,這個要看個人的愛好及特長。但總而言之,IT領域未來的發展方向,從實體方面來看一定是智能設備和物聯網,從領域來看一定是互聯網,未來的網路將會越來越智能,也將會提供大量的就業機會。因此,IT行業的前景是毋庸置疑的,國家信息產業部發布的最新報告顯示,我國目前信息安全從業人才缺口高達40萬人,每年以20%的速度在增長。國家信息產業部已把軟體工程師列為「國家緊缺型人才」的行列。前景好,人才需求廣,就業高薪,所以很多大學室會很青睞。希望可以幫到您,謝謝!
⑼ CAD二次開發的未來是哪種語言,我會LISP,可是已經有反編譯了,不知道有什麼好的語言沒有
現在用的VLISP就不是那麼好反編譯了,不過想接觸新語言的話可以學一下C++
⑽ 程序的反編譯是否需要 用到 匯編語言, 學習匯編語言之前需要 了解和學習什麼,求指教
學習匯編之前應該對操作系統與應用程序之間的關系弄清楚一點,最好是掌握C語言吧,這樣對一些專有名詞會比較有頭緒,反匯編其實也就是讀匯編代碼。