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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用二進制寫程序

Wildesbeast ? 來源:今日頭條 ? 作者:光電科學史 ? 2020-01-20 11:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

二進制來寫程序這么反人類的事情,的確是很裝的事情,但是它不但是一件很裝的事情,也是掌握底層知識的基礎能力之一。聽我慢慢道來。

程序設計語言有高級語言和低級語言之分,尤其是現在各種編程語言的不斷發展,掌握高級程序設計語言的人越來越多。

但是是否可以使用二進制來寫程序呢?也許最初使用打孔帶來控制機器的人可以完成,那么現在是否仍然有人可以完成呢?答案是肯定的!

計算機可以直接運行的指令是二進制的機器碼,所有的代碼在運行之前都會變成 CPU 可以識別的二進制。對于編譯型的二進制語言,其實都是可以直接使用二進制來寫的。

比如,Windows 下使用 C 語言編寫的程序編譯連接后可以生成一個 .exe 的可執行程序,生成的這個可執行程序就是一個二進制程序。那么,這個程序如何用二進制編寫呢?

先來考慮幾個問題!

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

其次,CPU 執行的代碼是二進制,但是在內存中的數據也是二進制數據,那么如何知道哪部分是代碼,哪部分是數據呢?這是操作系統在加載程序文件進入內存時,操作系統按照一定規則把不同二進制按照不同的屬性裝入了不同的內存分頁當中,并對內存設置相應的屬性。

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

因此,用二進制寫代碼就需要至少掌握兩方面,一方面是了解可執行程序的管理數據,另一方面就是了解 CPU 的機器碼。

在 Windows 下的可執行程序是 PE 格式的,那么就要了解 PE 格式的數據結構,和 CPU 的機器碼;在安卓下的可執行程序中,其格式是 DEX 格式,那么就要了解 DEX 格式的數據結構,以及安卓虛擬機的字節碼(這個字節碼不是 CPU 的機器碼,DEX 的字節碼最終被虛擬機解釋成機器碼,因此手寫 DEX 文件時了解 DEX 格式和其字節碼即可),同樣的,Java 編譯的 Class 文件也和安卓相同,因為它也是基于虛擬機執行的文件。其中 PE 格式和 DEX 格式就是程序的管理數據,用于告訴操作系統或虛擬機,整個文件中代碼、數據以及其他資源在文件中的結構。

因為二進制的閱讀性比較差,因此人們使用了八進制和十六進制。四位二進制可以表示為一位十六進制,由于系統是 32 位或 64 位,那么剛好使用 8 個十六進制位表示 32 個二進制位,或者 16 個十六進制位表示 64 個二進制位。因此,在內存中查看數據時,更多的是使用十六進制,其實從本質上十六進制和二進制是沒有區別的,只是表示的方式不同。因此,真正使用二進制來寫程序時,是使用十六進制來完成的。

那么,在使用十六進制來編寫 Windows 下的可執行程序時,首先需要使用十六進制編輯器構造 PE 文件結構,PE 文件結構主要告訴操作系統,程序加載入內存后,程序的映射起始地址是多少,程序的入口地址是多少,程序中的代碼和數據分別保存在哪里,以及它們的長度是多少,映射到內存中以后其地址是多少,該可執行文件調用了哪些系統函數,這些系統函數分別在哪些動態鏈接庫中等信息。構造完 PE 文件結構以后,就可以使用機器碼來寫程序了。只要把機器代碼寫到 PE 文件結構中標識程序入口的位置處就行了。當然了,機器碼寫程序是比較困難的,但是作為學習底層基礎知識來說,寫一個簡單的程序還是可以的,比如寫一個彈出對話框的“hello world”這樣的程序。用機器碼寫這樣的程序,也無需了解太多的知識,有一份 Opcode 的手冊就可以了。

這就是如何用十六進制編輯器來完成一個可執行程序的過程,關于 PE 文件格式,可以參考 MSDN 或網上的文章,對于學習機器碼相關的知識可以查看 Intel 的指令手冊。學習這些知識對于軟件破解、病毒分析、加密解密、內核驅動開發等是相應知識的基礎。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11063

    瀏覽量

    216474
  • 二進制
    +關注

    關注

    2

    文章

    805

    瀏覽量

    42242
  • WINDOWS
    +關注

    關注

    4

    文章

    3610

    瀏覽量

    91186
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    偏移二進制二進制補碼如何和實際數據對應,如何轉換?

    偏移二進制二進制補碼如何和實際數據對應,如何轉換,請哪位高手解惑
    發表于 01-16 06:01

    bcd編碼的應用 bcd與二進制的區別

    BCD(Binary-Coded Decimal)編碼是一種二進制編碼形式,用于表示十進制數字。它將每個十進制數字(0-9)直接編碼為一個四位二進制數。BCD編碼的主要優點是易于閱讀和
    的頭像 發表于 12-20 17:11 ?3003次閱讀

    hex格式和二進制的區別

    HEX格式和二進制在多個方面存在顯著的區別。以下是對這兩者的對比: 一、定義與表示方式 HEX格式 : HEX,全稱為Intel HEX,是一種用于存儲和傳輸數據到嵌入式系統(如單片機)的文件格式
    的頭像 發表于 11-18 15:24 ?1644次閱讀

    在線二進制編碼器:數據轉換的快捷通道

    在數字時代,數據的快速轉換與處理至關重要。二進制編碼,作為計算機內部數據表示的基礎,將信息轉化為0和1的序列,為數字世界構建了溝通的橋梁。然而,對于非專業用戶來說,手動進行二進制編碼既繁瑣又易出錯
    的頭像 發表于 11-15 09:01 ?1711次閱讀

    ASCII碼和二進制的轉換關系

    。ASCII碼使用7位二進制數來表示128個不同的字符,包括大小寫英文字母、數字0-9以及一些控制字符和標點符號。后來,ASCII碼被擴展到了8位,即ASCII-8BIT,可以表示256個不同的字符。 二進制
    的頭像 發表于 11-10 09:50 ?3853次閱讀

    二進制編碼器的精度與分辨率

    在數字電子系統中,二進制編碼器扮演著至關重要的角色。它負責將外部世界的模擬信號轉換為計算機可以理解的數字信號。精度和分辨率是衡量二進制編碼器性能的兩個關鍵指標。 1. 二進制編碼器的基本原理
    的頭像 發表于 11-06 09:56 ?1150次閱讀

    二進制編碼器在自動化領域的作用

    二進制編碼器是一種將二進制信號轉換為數字信號的電子設備,廣泛應用于自動化領域。 一、二進制編碼器的工作原理 二進制編碼器是一種將二進制信號轉
    的頭像 發表于 11-06 09:53 ?888次閱讀

    二進制編碼器的種類及特點

    二進制編碼器是一種電子電路,用于將二進制信號轉換為其他格式,如十進制、格雷碼等。以下是一些常見的二進制編碼器種類及其特點: 優先編碼器(Priority Encoder) : 特點 :
    的頭像 發表于 11-06 09:47 ?1375次閱讀

    二進制編碼器應用場景 二進制編碼器與模擬編碼器比較

    編碼器是將信息從一種形式或格式轉換為另一種形式的設備。在數字和模擬系統中,編碼器扮演著至關重要的角色。二進制編碼器和模擬編碼器是兩種常見的編碼器類型,它們在不同的應用場景中有著各自的優勢和局
    的頭像 發表于 11-06 09:45 ?1205次閱讀

    二進制編碼器工作原理 如何選擇二進制編碼器

    二進制編碼器是一種數字電路,它將輸入的二進制代碼轉換為對應的輸出信號。在數字系統中,編碼器用于將數據從一種形式轉換為另一種形式,以便于處理和傳輸。 二進制編碼器工作原理 輸入與輸出關系 :
    的頭像 發表于 11-06 09:44 ?2434次閱讀

    二進制補碼及與原碼的互相轉換方法

    大沙把一些基礎的知識說清楚,本文介紹二進制補碼及與原碼的轉換方法。 先說原碼,原碼?是一種計算機中對數字的二進制定點表示方法。在原碼表示法中,數值前面增加了一位符號位,最高位為符號位,0表示正數,1
    的頭像 發表于 09-19 22:25 ?1406次閱讀

    C28x嵌入式應用程序二進制接口

    電子發燒友網站提供《C28x嵌入式應用程序二進制接口.pdf》資料免費下載
    發表于 08-31 09:39 ?0次下載
    C28x嵌入式應用<b class='flag-5'>程序</b><b class='flag-5'>二進制</b>接口

    MSP430嵌入式應用程序二進制接口

    電子發燒友網站提供《MSP430嵌入式應用程序二進制接口.pdf》資料免費下載
    發表于 08-30 11:43 ?0次下載
    MSP430嵌入式應用<b class='flag-5'>程序</b><b class='flag-5'>二進制</b>接口

    C6000嵌入式應用程序二進制接口

    電子發燒友網站提供《C6000嵌入式應用程序二進制接口.pdf》資料免費下載
    發表于 08-29 14:52 ?0次下載
    C6000嵌入式應用<b class='flag-5'>程序</b><b class='flag-5'>二進制</b>接口

    二進制處理中的一些技巧

    二進制和十進制的處理中,有時候一些小技巧是很有用的。 1、把十進制數轉換成二進制數 (1)在MATLAB中有一個函數dec2bin,可以把正整數轉換為2
    的頭像 發表于 07-05 11:51 ?925次閱讀
    主站蜘蛛池模板: 狠狠躁夜夜躁人人躁婷婷视频 | 国产免费人人看大香伊 | 国产精品理论 | 免费性bbbb台湾 | 久久精品乱子伦免费 | 特级全黄大片 | 曰曰摸天天摸人人看久久久 | 日本一区二区三区四区不卡 | 99精品偷自拍 | 色吧在线视频 | 日韩综合色| 婷婷五月在线视频 | 欧美黄色三级 | 四虎永久免费网站 | 综合网激情 | 视频在线免费观看网址 | 在线激情网 | 激情开心婷婷 | 777影院| 亚洲资源最新版在线观看 | 欧美另类色 | 欧美在线视频免费播放 | 男啪女色黄无遮挡免费观看 | 欧美网色 | 天天天天天干 | 怡红院网址 | 免费免费啪视频在线 | 男人j桶进女人j的视频 | 性欧美成人依依影院 | 欧美视频图片 | www 在线播放 | 日本丰满毛茸茸熟妇 | 亚洲理论视频 | 自偷自拍亚洲欧美清纯唯美 | 男女一进一出抽搐免费视频 | 九九热免费观看 | 成人黄色免费观看 | 日韩欧美视频一区 | 毛色毛片 | 狠狠色丁香久久综合网 | 午夜在线播放视频在线观看视频 |