在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用二進(jìn)制寫(xiě)程序

Wildesbeast ? 來(lái)源:今日頭條 ? 作者:光電科學(xué)史 ? 2020-01-20 11:50 ? 次閱讀

二進(jìn)制來(lái)寫(xiě)程序這么反人類的事情,的確是很裝的事情,但是它不但是一件很裝的事情,也是掌握底層知識(shí)的基礎(chǔ)能力之一。聽(tīng)我慢慢道來(lái)。

程序設(shè)計(jì)語(yǔ)言有高級(jí)語(yǔ)言和低級(jí)語(yǔ)言之分,尤其是現(xiàn)在各種編程語(yǔ)言的不斷發(fā)展,掌握高級(jí)程序設(shè)計(jì)語(yǔ)言的人越來(lái)越多。

但是是否可以使用二進(jìn)制來(lái)寫(xiě)程序呢?也許最初使用打孔帶來(lái)控制機(jī)器的人可以完成,那么現(xiàn)在是否仍然有人可以完成呢?答案是肯定的!

計(jì)算機(jī)可以直接運(yùn)行的指令是二進(jìn)制的機(jī)器碼,所有的代碼在運(yùn)行之前都會(huì)變成 CPU 可以識(shí)別的二進(jìn)制。對(duì)于編譯型的二進(jìn)制語(yǔ)言,其實(shí)都是可以直接使用二進(jìn)制來(lái)寫(xiě)的。

比如,Windows 下使用 C 語(yǔ)言編寫(xiě)的程序編譯連接后可以生成一個(gè) .exe 的可執(zhí)行程序,生成的這個(gè)可執(zhí)行程序就是一個(gè)二進(jìn)制程序。那么,這個(gè)程序如何用二進(jìn)制編寫(xiě)呢?

先來(lái)考慮幾個(gè)問(wèn)題!

首先,可執(zhí)行程序中并非只有代碼,而 CPU 要執(zhí)行的只有代碼。

其次,CPU 執(zhí)行的代碼是二進(jìn)制,但是在內(nèi)存中的數(shù)據(jù)也是二進(jìn)制數(shù)據(jù),那么如何知道哪部分是代碼,哪部分是數(shù)據(jù)呢?這是操作系統(tǒng)在加載程序文件進(jìn)入內(nèi)存時(shí),操作系統(tǒng)按照一定規(guī)則把不同二進(jìn)制按照不同的屬性裝入了不同的內(nèi)存分頁(yè)當(dāng)中,并對(duì)內(nèi)存設(shè)置相應(yīng)的屬性。

最后,操作系統(tǒng)如何知道程序文件中的二進(jìn)制哪部分是數(shù)據(jù),哪部分是代碼呢?這是在程序被編譯連接時(shí)不但把代碼和代碼所需的數(shù)據(jù)編譯到了程序中,還把管理代碼的數(shù)據(jù)也放入了程序中,而這部分管理數(shù)據(jù)決定了哪部分是數(shù)據(jù)哪部分是代碼。

因此,用二進(jìn)制寫(xiě)代碼就需要至少掌握兩方面,一方面是了解可執(zhí)行程序的管理數(shù)據(jù),另一方面就是了解 CPU 的機(jī)器碼。

在 Windows 下的可執(zhí)行程序是 PE 格式的,那么就要了解 PE 格式的數(shù)據(jù)結(jié)構(gòu),和 CPU 的機(jī)器碼;在安卓下的可執(zhí)行程序中,其格式是 DEX 格式,那么就要了解 DEX 格式的數(shù)據(jù)結(jié)構(gòu),以及安卓虛擬機(jī)的字節(jié)碼(這個(gè)字節(jié)碼不是 CPU 的機(jī)器碼,DEX 的字節(jié)碼最終被虛擬機(jī)解釋成機(jī)器碼,因此手寫(xiě) DEX 文件時(shí)了解 DEX 格式和其字節(jié)碼即可),同樣的,Java 編譯的 Class 文件也和安卓相同,因?yàn)樗彩腔谔摂M機(jī)執(zhí)行的文件。其中 PE 格式和 DEX 格式就是程序的管理數(shù)據(jù),用于告訴操作系統(tǒng)或虛擬機(jī),整個(gè)文件中代碼、數(shù)據(jù)以及其他資源在文件中的結(jié)構(gòu)。

因?yàn)槎M(jìn)制的閱讀性比較差,因此人們使用了八進(jìn)制和十六進(jìn)制。四位二進(jìn)制可以表示為一位十六進(jìn)制,由于系統(tǒng)是 32 位或 64 位,那么剛好使用 8 個(gè)十六進(jìn)制位表示 32 個(gè)二進(jìn)制位,或者 16 個(gè)十六進(jìn)制位表示 64 個(gè)二進(jìn)制位。因此,在內(nèi)存中查看數(shù)據(jù)時(shí),更多的是使用十六進(jìn)制,其實(shí)從本質(zhì)上十六進(jìn)制和二進(jìn)制是沒(méi)有區(qū)別的,只是表示的方式不同。因此,真正使用二進(jìn)制來(lái)寫(xiě)程序時(shí),是使用十六進(jìn)制來(lái)完成的。

那么,在使用十六進(jìn)制來(lái)編寫(xiě) Windows 下的可執(zhí)行程序時(shí),首先需要使用十六進(jìn)制編輯器構(gòu)造 PE 文件結(jié)構(gòu),PE 文件結(jié)構(gòu)主要告訴操作系統(tǒng),程序加載入內(nèi)存后,程序的映射起始地址是多少,程序的入口地址是多少,程序中的代碼和數(shù)據(jù)分別保存在哪里,以及它們的長(zhǎng)度是多少,映射到內(nèi)存中以后其地址是多少,該可執(zhí)行文件調(diào)用了哪些系統(tǒng)函數(shù),這些系統(tǒng)函數(shù)分別在哪些動(dòng)態(tài)鏈接庫(kù)中等信息。構(gòu)造完 PE 文件結(jié)構(gòu)以后,就可以使用機(jī)器碼來(lái)寫(xiě)程序了。只要把機(jī)器代碼寫(xiě)到 PE 文件結(jié)構(gòu)中標(biāo)識(shí)程序入口的位置處就行了。當(dāng)然了,機(jī)器碼寫(xiě)程序是比較困難的,但是作為學(xué)習(xí)底層基礎(chǔ)知識(shí)來(lái)說(shuō),寫(xiě)一個(gè)簡(jiǎn)單的程序還是可以的,比如寫(xiě)一個(gè)彈出對(duì)話框的“hello world”這樣的程序。用機(jī)器碼寫(xiě)這樣的程序,也無(wú)需了解太多的知識(shí),有一份 Opcode 的手冊(cè)就可以了。

這就是如何用十六進(jìn)制編輯器來(lái)完成一個(gè)可執(zhí)行程序的過(guò)程,關(guān)于 PE 文件格式,可以參考 MSDN 或網(wǎng)上的文章,對(duì)于學(xué)習(xí)機(jī)器碼相關(guān)的知識(shí)可以查看 Intel 的指令手冊(cè)。學(xué)習(xí)這些知識(shí)對(duì)于軟件破解、病毒分析、加密解密、內(nèi)核驅(qū)動(dòng)開(kāi)發(fā)等是相應(yīng)知識(shí)的基礎(chǔ)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10895

    瀏覽量

    212497
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    41711
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3555

    瀏覽量

    89040
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    偏移二進(jìn)制二進(jìn)制補(bǔ)碼如何和實(shí)際數(shù)據(jù)對(duì)應(yīng),如何轉(zhuǎn)換?

    偏移二進(jìn)制二進(jìn)制補(bǔ)碼如何和實(shí)際數(shù)據(jù)對(duì)應(yīng),如何轉(zhuǎn)換,請(qǐng)哪位高手解惑
    發(fā)表于 01-16 06:01

    hex格式和二進(jìn)制的區(qū)別

    HEX格式和二進(jìn)制在多個(gè)方面存在顯著的區(qū)別。以下是對(duì)這兩者的對(duì)比: 一、定義與表示方式 HEX格式 : HEX,全稱為Intel HEX,是一種用于存儲(chǔ)和傳輸數(shù)據(jù)到嵌入式系統(tǒng)(如單片機(jī))的文件格式
    的頭像 發(fā)表于 11-18 15:24 ?663次閱讀

    二進(jìn)制編碼器在自動(dòng)化領(lǐng)域的作用

    二進(jìn)制編碼器是一種將二進(jìn)制信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的電子設(shè)備,廣泛應(yīng)用于自動(dòng)化領(lǐng)域。 一、二進(jìn)制編碼器的工作原理 二進(jìn)制編碼器是一種將二進(jìn)制信號(hào)轉(zhuǎn)
    的頭像 發(fā)表于 11-06 09:53 ?408次閱讀

    二進(jìn)制編碼器的種類及特點(diǎn)

    二進(jìn)制編碼器是一種電子電路,用于將二進(jìn)制信號(hào)轉(zhuǎn)換為其他格式,如十進(jìn)制、格雷碼等。以下是一些常見(jiàn)的二進(jìn)制編碼器種類及其特點(diǎn): 優(yōu)先編碼器(Priority Encoder) : 特點(diǎn) :
    的頭像 發(fā)表于 11-06 09:47 ?616次閱讀

    二進(jìn)制編碼器應(yīng)用場(chǎng)景 二進(jìn)制編碼器與模擬編碼器比較

    編碼器是將信息從一種形式或格式轉(zhuǎn)換為另一種形式的設(shè)備。在數(shù)字和模擬系統(tǒng)中,編碼器扮演著至關(guān)重要的角色。二進(jìn)制編碼器和模擬編碼器是兩種常見(jiàn)的編碼器類型,它們?cè)诓煌膽?yīng)用場(chǎng)景中有著各自的優(yōu)勢(shì)和局
    的頭像 發(fā)表于 11-06 09:45 ?552次閱讀

    二進(jìn)制編碼器工作原理 如何選擇二進(jìn)制編碼器

    二進(jìn)制編碼器是一種數(shù)字電路,它將輸入的二進(jìn)制代碼轉(zhuǎn)換為對(duì)應(yīng)的輸出信號(hào)。在數(shù)字系統(tǒng)中,編碼器用于將數(shù)據(jù)從一種形式轉(zhuǎn)換為另一種形式,以便于處理和傳輸。 二進(jìn)制編碼器工作原理 輸入與輸出關(guān)系 :
    的頭像 發(fā)表于 11-06 09:44 ?1068次閱讀

    二進(jìn)制補(bǔ)碼及與原碼的互相轉(zhuǎn)換方法

    大沙把一些基礎(chǔ)的知識(shí)說(shuō)清楚,本文介紹二進(jìn)制補(bǔ)碼及與原碼的轉(zhuǎn)換方法。 先說(shuō)原碼,原碼?是一種計(jì)算機(jī)中對(duì)數(shù)字的二進(jìn)制定點(diǎn)表示方法。在原碼表示法中,數(shù)值前面增加了一位符號(hào)位,最高位為符號(hào)位,0表示正數(shù),1
    的頭像 發(fā)表于 09-19 22:25 ?611次閱讀

    C28x嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《C28x嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-31 09:39 ?0次下載
    C28x嵌入式應(yīng)用<b class='flag-5'>程序</b><b class='flag-5'>二進(jìn)制</b>接口

    MSP430嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《MSP430嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 11:43 ?0次下載
    MSP430嵌入式應(yīng)用<b class='flag-5'>程序</b><b class='flag-5'>二進(jìn)制</b>接口

    C6000嵌入式應(yīng)用程序二進(jìn)制接口

    電子發(fā)燒友網(wǎng)站提供《C6000嵌入式應(yīng)用程序二進(jìn)制接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-29 14:52 ?0次下載
    C6000嵌入式應(yīng)用<b class='flag-5'>程序</b><b class='flag-5'>二進(jìn)制</b>接口

    二進(jìn)制處理中的一些技巧

    二進(jìn)制和十進(jìn)制的處理中,有時(shí)候一些小技巧是很有用的。 1、把十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù) (1)在MATLAB中有一個(gè)函數(shù)dec2bin,可以把正整數(shù)轉(zhuǎn)換為2
    的頭像 發(fā)表于 07-05 11:51 ?609次閱讀

    二進(jìn)制串行計(jì)數(shù)器工作原理是什么?

    在數(shù)字電路設(shè)計(jì)中,計(jì)數(shù)器是一種非常關(guān)鍵的組件,用于測(cè)量時(shí)間、計(jì)數(shù)事件或跟蹤狀態(tài)變化等。其中,二進(jìn)制串行計(jì)數(shù)器作為一種常用的計(jì)數(shù)器類型,在多種應(yīng)用場(chǎng)景中都發(fā)揮著重要作用。本文將對(duì)二進(jìn)制串行計(jì)數(shù)器
    的頭像 發(fā)表于 05-28 15:52 ?923次閱讀

    如何實(shí)現(xiàn)二進(jìn)制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變?

    如何實(shí)現(xiàn)二進(jìn)制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變? 二進(jìn)制碼是將十進(jìn)制數(shù)字表示為二進(jìn)制數(shù)和十進(jìn)制數(shù)的一種表示方法。在計(jì)算機(jī)系統(tǒng)中,
    的頭像 發(fā)表于 02-18 14:51 ?3802次閱讀

    二進(jìn)制與邏輯電平的變化范圍

    二進(jìn)制中的兩個(gè)數(shù)字0和1稱為位(bit, 是二進(jìn)制數(shù)字binary digit的縮寫(xiě))。在數(shù)字電路中,使用兩個(gè)不同的電平表示這兩個(gè)位。一般情況下,1 用高電平表示,0用低電平表示,這種邏輯體制稱為正邏輯。
    的頭像 發(fā)表于 02-04 16:54 ?1513次閱讀
    <b class='flag-5'>二進(jìn)制</b>與邏輯電平的變化范圍

    鴻蒙二進(jìn)制數(shù)組創(chuàng)建

    背景 c++層數(shù)據(jù)都是二進(jìn)制,需要轉(zhuǎn)換成arrayBuffer透?jìng)鞯絜ts層給業(yè)務(wù)使用,但是鴻蒙的使用下面兩個(gè)api創(chuàng)建出來(lái)的二進(jìn)制數(shù)組數(shù)據(jù)都是錯(cuò)誤的。 接口
    的頭像 發(fā)表于 01-31 15:24 ?1309次閱讀
    主站蜘蛛池模板: 午夜a级毛片| 人人草人| 国产午夜人做人视频羞羞| 国产精品免费久久久久影院| 日日干天天草| www日本高清| 一级大片免费观看| 天堂资源最新版在线官网| 免费又爽又黄禁片视频在线播放| 狠狠草视频| 好大好紧好爽好湿润视频| 亚洲视频第一页| 西西人体大胆高清啪啪欧洲| 久久伊人草| 在线看黄网| 亚洲一区二区视频| 国产免费高清在线精品一区| 亚洲丁香婷婷| 三级网址在线播放| 美女黄色在线| 欧美大片xxxxbbbb| 日韩一区二区三区在线| 台湾香港澳门三级在线| 亚洲成人av| 青草视频久久| 丁香婷婷在线视频| 国产成人免费无庶挡视频| 亚洲444kkk| 天天操一操| 综合7799亚洲伊人爱爱网| 美女被网站免费看九色视频| 五月婷婷色视频| 久久久久毛片成人精品| 夜夜爱夜夜做| 97天天干| 中文久草| 久久综合九色综合欧洲色| 午夜毛片网站| 免费在线a视频| 亚洲视频在线一区二区| 天堂资源bt|