零基礎自學反彙編相關的計算機知識,該如何入門,有什麼書可以推薦?
01-13
需要先學彙編語言嗎??該如何入門呢??另外求推薦好書籍資料
題主的問題本質上跟下面這個是等價的:
零基礎自學把中文技術文獻反向翻譯到英文的,需要先學習英文嗎?
那當然是要學習的咯。不然連目標語言在說什麼都無法完全確定的話,那得看得個頭疼…
不過可以邊動手實踐邊學習,不必擔心要一開始就把彙編玩得滾瓜爛熟才開始動手。x86的彙編的話其實稍微學習一點基礎知識之後,後面常常要做的事情就是查手冊。嫌Intel手冊查起來麻煩的話可以用一些現成的網站,例如這個:x86 Instruction Set Reference最簡單的x86彙編入門可以看wikibook:Wikibooks, open books for an open world
然後很重要的一點是「調用約定」(calling convention)。x86上的常見調用約定在這裡有簡單描述:x86 calling conventions取決於題主學習的目的/出發點,可能有一些不同的書適合引導入門。如果題主是以「cracking」(破解程序)為主要目的的,那看雪論壇的幾位大大們出的書都很不錯。例如說:- 《加密與解密》
- 《加密與解密》第三版
關於native調試,在Windows上的話,張銀奎大大的《軟體調試》一書雖然是個大部頭但是非常贊,值得一直放在手邊參考。
關於像C語言層面的語言功能是如何對應到底下的機器上的,可以通過《Computer Systems: A Programmer"s Perspective》 (3rd Edition)(CS:APP)來入門。學反彙編其實不用完整的學習彙編,可以先看看下面兩篇就能看懂基本的x86彙編,然後其他的指令碰到了再查。
Just enough assembly language to get by:part 1:
http://www.microsoft.com/msj/0298/hood0298.aspxpar 2:http://www.microsoft.com/msj/0698/hood0698.aspx感覺題主是本著玩玩的心態想搞些破解吧,估計是處於中二年紀,黑X檔案之類的很適合…簡單破解對於彙編的要求,就像在國外麥當勞點餐對於英語的要求,基本只要會「this,that,ok,thanks」就能完成簡單的點餐~當然對於更高難度的破解,就如同用英語完成一次商業談判,不僅要英語(彙編)熟練,更需要談判技巧(破解思路)。不過看題主的問題應該只是麥當勞點餐的程度吧…
零基礎正好看 csapp 啊,看完前幾章以後去做官網的那個 bomb lab,人肉反彙編,很有意思。
《有趣的二進位》,計算機組成原理,《加密與解密》
自學反彙編,問出需要先學彙編語言的問題? 黑人問號.jpg那斗膽設想一下,編程零基礎的話,是不是看了點地攤文學裡的,亂七八糟的黑客和破解軟體,突發奇想的?如果是想學彙編,王爽的《彙編語言》不錯,既然都到彙編層次了,用彙編玩玩51單片機也是不錯的實踐.
簡單看了下別人的回答,computer organization and architecture之類的其實屬於ee的內容,ee的東西零基礎自學入門大多都比較困難,推薦先去mooc上找個公開課看一下,然後再決定要不要刷那些大部頭的書吧…
首先你得有數電的基礎,這門課EE和CS應該都學。沒這個基礎後面的就沒法學了。接下來你得學習CPU的基本電路結構。包括狀態機設計,流水線結構以及多線程設計。知道什麼是指令集架構,什麼是Microarchitecture。以及計算機的存儲模型。下面這兩本書可以幫助你學習這些內容。先看計算機組成與設計再看計算機體系結構。UCBerkeley的CS系主任和斯坦福大學校長的經典著作。
這兩本書說是計算機體系結構組成原理,其實是講CPU的。以MIPS指令集架構作為例子來講的。
然後你要學習彙編語言以及軟硬體在計算機上是如何交互的。接下來你就該學習大名鼎鼎的csapp。然後你得找一本x86指令集和intel cpu的手冊去了解基本的x86指令集架構和CPU架構。有了上面的基礎,你就可以看的懂官方手冊了。最終做的就是要了解彙編語言和機器語言對照關係,你就可以寫反彙編代碼了。。。。零基礎為什麼要學反彙編。。。。先把計算機組成原理和C語言修完。。
作為一個破解過軟體和寫過遊戲外掛的人,我告訴你個最實際的方法:上 吾愛破解論壇……把裡面的初級教程全部看透。 你會對彙編有一個非常感性的認識。而不僅僅是停留在理論上。
然後在學習的過程中,最好能夠學一門編程語言,最好是c++。然後自己寫程序,自己反彙編調試。你會對計算機到底是怎麼處理堆棧,分配變數有絕對刻骨銘心的認識。"Reverse Engineering for Beginners" free book
竟然沒人推薦這本書?基本貼合題主的要求,這一本書應該就夠了。看其他書都是浪費時間,看完這幾卷就畢業了:Intel? 64 and IA-32 Architectures Software Developer Manuals
首先 你要學會c語言 只有特殊場合才會用彙編寫東西 比如shellcode 或者hook
零基礎學彙編要有耐心有恆心 。首先記性好 把問題與知識記好 然後練習去參悟 再去反覆學習去思考。PDCA循環學習
功夫在詩外,彙編語言本身並不難「學」,我初中時抱著一本書兩個月就全「學」完了,難的是編程的周邊知識、編程思想、問題建模:這個可是無止境的,否則,學了也是白學。
一直做逆向,直接學彙編效果不大,結合c學不錯,彙編 先看王爽那本,然後看羅雲彬那本。然後就去看雪看看別人推薦的書。
推薦閱讀:
※請問各位寫代碼都是從零開始嗎?比如做課程設計等。網上的源碼該如何利用?自己寫了其中多少代碼算自己寫的?
※哪些編程習慣會導致內存泄漏?
※如何成為一個內力深厚的程序員?正確的補充計算機基礎知識?
※SQL如何實現1-1,1,1-2-1,2-1,2-1-2-3,1-3,10-1這樣的排序?
※經常有人發錯 SQL 的發音,如何華麗麗的引導糾正他們又不失優雅?