編譯二進制的奧秘
1. C源程序經編譯形成的二進制代碼可以直接運行嗎
不可以直接運行,源程序是程序員寫給人看的,電腦執行的都是.EXE程序或者是二進制可執行代碼,所以得將源程序進行編譯連接然後才能生成可執行的程序也就是二進制的代碼。
源代碼(也稱源程序)是指未編譯的按照一定的程序設計語言規范書寫的文本文件,是一系列人類可讀的計算機語言指令。
在現代程序語言中,源代碼可以是以書籍或者磁帶的形式出現,但最為常用的格式是文本文件,這種典型格式的目的是為了編譯出計算機程序。
計算機源代碼的最終目的是將人類可讀的文本翻譯成為計算機可以執行的二進制指令,這種過程叫做編譯,通過編譯器完成。
(1)編譯二進制的奧秘擴展閱讀:
如果按照源代碼類型區分軟體,通常被分為兩類:自由軟體和非自由軟體。自由軟體一般是不僅可以免費得到,而且公開源代碼;相對應地,非自由軟體則是不公開源代碼。所有一切通過非正常手段獲得非自由軟體源代碼的行為都將被視為非法。
對於計算機而言,並不存在真正意義上的「好」的源代碼;然而作為一個人,好的書寫習慣茄螞將決定源代碼的好壞。源代碼是否具有可讀性,成為好壞的重要標准。軟體文檔則是表明可讀性的關鍵。
對軟體進行說明,即對軟體的編寫進行說明。為數不少的初學者,甚至少數有經驗的程序員都顫鍵埋忽視軟體說明的編寫,因為這部分不會在生成的程序中直接顯示,也不參與編譯。
但是亮悔注釋代碼對軟體的學習、分享、維護和軟體復用都有巨大的好處。因此,書寫軟體說明在業界被認為是能創造優秀程序的良好習慣,一些公司也硬性規定必須書寫。
網路-源代碼 (一系列人類可讀的計算機語言指令)
2. 計算機翻譯程序如何把一個面向人看懂的語句組成程序變成計算機可執行的二進制代碼的過程
計算機程序語言主要有兩類,一種是腳本語言,另一種是需通過編譯的語言。
腳本語言通過解釋執行。編譯語言通過編譯器翻譯後執行。
在紙上寫好人看懂的語句組成的程序,當然是按腳本語言或編譯語言的語法規定寫的。
用編輯器,例如notepad,從鍵盤打進去,存成磁碟文件。
解釋器,邊讀程序,邊解釋,邊執行。例如,瀏覽器處理HTML網頁,Shell處理「批」文件。
編譯語言,由編譯器讀入全部程序,然後做詞法分析,句法分析,語法分析,邏輯結構分析,按語句順序及程序內容規定的條件轉移次序,翻譯成數據和指令碼,鏈接嵌入必要的庫的代碼,作優化後把可執行碼(二進制代碼)存回磁碟。最後用戶運行可執行碼。例如,vb,vc程序。
3. python如何編譯生成二進制文件
1、可以
2、當你編輯運行py文件後,就會生成對應文件名的pyc文件。
3、pyc是一種二進制文件,是由py文件經過編譯後,生成的文件,是一種byte code,py文件變成pyc文件後,載入的速度有所提高,而且pyc是一種跨平台的位元組碼,是由python的虛擬機來執行的,這個是類似於java或者.NET的虛擬機的概念。pyc的內容,是跟python的版本相關的,不同版本編譯後的pyc文件是不同的。
總之,是可以的
4. 信息如何編譯成數字信號數字信號如何轉換成二進制
具體過程是采樣樣、量化和編碼。
1)采樣
又稱為抽樣,是利用采樣脈沖序列p(t),從連續時間信號x(t)中抽取一系列離散樣值,使之成為采樣信號x(nTs)的過程。n= 0,1…。Ts稱為采樣間隔,或采樣周期,1/Ts = fs 稱為采樣頻率。
由於後續的量化過程需要一定的時間τ,對於隨時間變化的模擬輸入信號,要求瞬時采樣值在時間τ內保持不變,這樣才能保證轉換的正確性和轉換精度,這個過程就是采樣保持。正是有了采樣保持,實際上采樣後的信號是階梯形的連續函數。
2)量化
又稱幅值量化,把采樣信號x(nTs)經過舍入或截尾的方法變為只有有限個有效數字的數,這一過程稱為量化。
若取信號x(t)可能出現的最大值A,令其分為D個間隔,則每個間隔長度為R=A/D,R稱為量化增量或量化步長。當采樣信號x(nTs)落在某一小間隔內,經過舍入或截尾方法而變為有限值時,則產生量化誤差,如上圖所示。
一般又把量化誤差看成是模擬信號作數字處理時的可加雜訊,故而又稱之為舍入雜訊或截尾雜訊。量化增量D愈大,則量化誤差愈大,量化增量大小,一般取決於計算機A/D卡的位數。例如,8位二進制為28=256,即量化電平R為所測信號最大電壓幅值的1/256。
3、編碼
抽樣、量化後的信號還不是數字信號,需要把它轉換成數字編碼脈沖,這一過程稱為編碼。 最簡單的編碼方式是二進制編碼。如果量化後有8個值,我們就可以用二進制這樣編碼 000 001 010 011 100 101 110 111 這8個二進制就表示8個不同的值。
上面試論解釋,形象的解釋比如一根繩子上面穿滿了珠子(項鏈),這個繩子就是你的信息,而珠子就是你經過抽樣量化後的信息,至於編碼按照珠子的多少,2的n方編就可以了
5. C/C++語言編譯生產可執行的二進制文件的過程求大神詳盡解釋,
預編譯。編譯器將你的.c、.cpp源代碼,通過解釋其中的預編譯指令,將源代碼轉換成相應的沒有任何預編譯指令的代碼。
編譯、優化。將上一步的代碼編譯成匯編指令,並作一定優化,形成對應的.s匯編代碼
匯編。將.s文件匯編成機器碼,形成對應的.o目標文件,此時是不可執行的二進制文件。生成對應的清單文件。為了連接需要,還會生成未定向符號表、導出符號表、地址重定向表等等。
連接。先根據對應的清單文件、連接文件及之間的調用關系,決定所有的目標文件及引用的庫文件在最後可執行文件中的位置;然後做一些其他事情,比如根據符號表等將目標文件中的符號地址補全等等;最終得到可執行文件。
這只是我個人的簡單理解,更詳盡的解答都可以寫成好幾本書了=_=望採納~
6. 如何編譯android 可執行的二進制文件
Android由於其代碼是放在dalvik虛擬機上的託管代碼,所以能夠很容易的將其反編譯為我們可以識別的代碼。 之前我寫過一篇文章反編譯Android的apk包到smali文件 然後再重新編譯簽名後打包實現篡改apk的功能。 最近又有一種新的方法來實現直接從Android apk包里的classes.dex文件,把dex碼反編譯到java的.class二進制碼,然後從.class二進制碼反編譯到java源碼想必就不用我來多說了吧。 首先我們需要的工具是dex2jar和jd-gui 其中第一個工具dex2jar是用來把classex.dex文件也就是dex二進制碼轉化為java的標准.class二進制碼,然後jd-gui是把標準的.class二進制碼再反編譯為java源碼。 首先從apk包裡面提取出classes.dex 放到dex2jar目錄下 然後在命令行下執行 dex2jar.bat classes.dex 這時執行成功後會生成一個classes.dex.dex2jar.jar文件 這個文件再用jd-gui打開,如下圖 幾乎跟我自己寫的這個程序的源碼一樣 提供這個反編譯方法主要用於大家學習與研究,有問題可以與我郵件討論。 希望大家不要用這個方法從事惡意的活動,畢竟,別人辛辛苦苦寫程序也不容易,用這個方法可以大致的學習到別人寫的程序的邏輯,架構,希望對大家有所幫助。 Android 逆向apk程序的心得 本文主要介紹如何逆向一個Android的APK應用程序,本文提供的方法僅供研究學習之用。 本文需要用到的工具有 jdk 這個用於搭建java運行環境 AXMLPrinter2.jar 這個用於逆向.xml文件 baksmali.jar 這個用於逆向classex.dex文件 由於Android的.apk文件實際上就是一個zip文件 可以直接用winrar打開
7. 二進制如何編程
1、打開易語言新建一個windows程序進入下圖界面。
8. 如何將一個函數編譯成二進制文件
通過下面這條命令,main.c和swap.c 就產生了一個可執行二進制文件swap
》gcc mian.c swap.c -o swap
那麼這條命令是么樣把源程序變成可執行程序的呢?
步驟如下:
1、驅動程序首先調用C預處理器(CPP)把源文件翻譯成一個ASCII中間文件mian.i,預處理器會把#include所包含的內容都插入到聲明的位置,並且做宏替換,把main.c 文件的第3行 的SIZE替換成2(注意這里只是做簡單的文本替換)。
2、接下來驅動程序的C編譯器將main.i翻譯成匯編語言程序main.s
3、然後驅動程序的匯編器將匯編語言程序main.s 翻譯成可重定位的二進制文件main.o
4、最後運行鏈接器將main.o 與swap.o 以及一些必要的系統目標文件(比如你將調用的printf函數就是printf.o)連接起來變成一個可執行的二進制文件。