零基礎自學反彙編相關的計算機知識,該如何入門,有什麼書可以推薦?

需要先學彙編語言嗎??該如何入門呢??另外求推薦好書籍資料


題主的問題本質上跟下面這個是等價的:

零基礎自學把中文技術文獻反向翻譯到英文的,需要先學習英文嗎?

那當然是要學習的咯。不然連目標語言在說什麼都無法完全確定的話,那得看得個頭疼…

不過可以邊動手實踐邊學習,不必擔心要一開始就把彙編玩得滾瓜爛熟才開始動手。

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.aspx

par 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 的發音,如何華麗麗的引導糾正他們又不失優雅?

TAG:編程 | 計算機 | 反彙編 |