国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    11277

    瀏覽量

    224954
  • 二進制
    +關注

    關注

    2

    文章

    809

    瀏覽量

    43029
  • WINDOWS
    +關注

    關注

    4

    文章

    3702

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    CDx4HC283與CDx4HCT283:4位二進制全加器的技術解析與應用指南

    CDx4HC283與CDx4HCT283:4位二進制全加器的技術解析與應用指南 在數字電路設計領域,加法器是實現數值運算的基礎元件之一。今天我們要深入探討的CDx4HC283和CDx4HCT283
    的頭像 發表于 01-30 17:20 ?642次閱讀

    德州儀器4位二進制全加器:SN54/74系列的技術剖析

    德州儀器4位二進制全加器:SN54/74系列的技術剖析 在數字電路設計中,加法器是實現算術運算的基礎組件。德州儀器的SN54283、SN54LS283、SN54S283、SN74283
    的頭像 發表于 01-28 17:05 ?472次閱讀

    探索CD54/74AC283與CD54/74ACT283:高效4位二進制加法器的奧秘

    探索CD54/74AC283與CD54/74ACT283:高效4位二進制加法器的奧秘 在電子設計領域,加法器是實現數字運算的基礎元件之一。今天,我們將深入研究德州儀器(Texas
    的頭像 發表于 01-28 16:50 ?427次閱讀

    CDx4HC283和CDx4HCT283:高速CMOS邏輯4位二進制全加器的詳細解析

    CDx4HC283和CDx4HCT283:高速CMOS邏輯4位二進制全加器的詳細解析 在電子設計領域,加法器是數字電路中最基本的運算單元之一,用于實現二進制數的加法運算。今天要給大家介紹
    的頭像 發表于 01-19 14:50 ?315次閱讀

    解析CD54/74AC283與CD54/74ACT283:4位二進制加法器的卓越之選

    解析CD54/74AC283與CD54/74ACT283:4位二進制加法器的卓越之選 在電子設計領域,加法器是實現數字運算的基礎組件。今天我們要深入探討的是德州儀器(Texas
    的頭像 發表于 01-08 16:55 ?571次閱讀

    深入剖析CD54/74AC283與CD54/74ACT283:高性能4位二進制加法器

    深入剖析CD54/74AC283與CD54/74ACT283:高性能4位二進制加法器 在電子設計領域,加法器是一種基礎且關鍵的組件。今天,我們將詳細探討CD54/74AC283和CD54
    的頭像 發表于 01-04 17:25 ?705次閱讀

    CD54/74AC283與CD54/74ACT283:高性能4位二進制加法器的全面解析

    CD54/74AC283與CD54/74ACT283:高性能4位二進制加法器的全面解析 在電子設計領域,加法器是一種基礎且關鍵的數字電路,廣泛應用于各種計算和數據處理系統中。今天,我們要深入探討
    的頭像 發表于 12-31 17:10 ?1397次閱讀

    SN54F283與SN74F283:4位二進制全加器的技術剖析

    SN54F283與SN74F283:4位二進制全加器的技術剖析 在數字電路設計中,加法器是最基礎且關鍵的組件之一。今天我們要深入探討的是德州儀器(TI)的SN54F283和SN74F283這兩款4位
    的頭像 發表于 12-29 16:20 ?526次閱讀

    德州儀器4位二進制全加器:SN54/74283系列深度解析

    德州儀器4位二進制全加器:SN54/74283系列深度解析 在數字電路設計領域,加法器是構建復雜算術邏輯單元的基礎組件。德州儀器(TI)的SN54/74283系列4位二進制全加器憑借其快速進位
    的頭像 發表于 12-23 15:45 ?549次閱讀

    二進制查找(Binary Search)介紹

    二進制查找(Binary Search)用于在已排序的數組中執行二進制查找的函數。 int binary_search(int arr[], int size, int target
    發表于 12-12 06:54

    如何在vivado上基于二進制碼對指令運行狀態進行判斷

    在擴展指令時我們常常需要一些手段來幫助我們判斷指令是否能夠成功運行、運行狀態是否正確。一方面,我們可以通過模擬器來實現,另一方面,在沒有模擬器的情況下,我們可以通過將所擴展指令的二進制代碼導入
    發表于 10-24 06:46

    如何將圖像文件轉換為二進制文件?

    如何將圖像文件轉換為二進制文件
    發表于 09-05 08:28

    二進制數據處理方法分享

    時,我們如何去解析數據并且應用它們。本次的技術分享文章,我們就從如何傳輸數據和解析二進制數據來一步一步剝絲抽繭,搞清楚他的運作原理和二進制數據的數據結構。
    的頭像 發表于 07-30 15:41 ?2413次閱讀
    <b class='flag-5'>二進制</b>數據處理方法分享

    如何使用Keil將二進制文件加載到外部SPI Flash中?

    我想知道是否有辦法使用 Keil 將隨機二進制文件加載到外部 SPI 閃存中。二進制文件將通過 LPC54102(OM13077 EVK 板)。我知道一些用于 FPGA 的 ISE 允許您執行此作
    發表于 03-17 06:37

    無法使用密度化參數構建OpenVINO?二進制,怎么處理?

    無法使用密度化參數構建OpenVINO?二進制
    發表于 03-06 06:51