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

    文章

    11320

    浏览量

    225832
  • 二进制
    +关注

    关注

    2

    文章

    809

    浏览量

    43170
  • WINDOWS
    +关注

    关注

    4

    文章

    3705

    浏览量

    94305
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CD4089B:高性能CMOS二进制速率乘法器的设计与应用

    CD4089B:高性能CMOS二进制速率乘法器的设计与应用 在电子设计领域,对于能够实现精确脉冲速率控制和多样化运算功能的器件需求始终存在。CD4089B作为一款高性能的CMOS二进制速率乘法器
    的头像 发表于 04-18 14:45 59次阅读

    深入剖析 DM74LS283:4 位快速进位二进制加法器

    深入剖析 DM74LS283:4 位快速进位二进制加法器 在电子设计领域,加法器是实现数字运算的基础元件之一。今天我们要深入探讨的是 Fairchild 公司的 DM74LS283 4 位快速进位
    的头像 发表于 04-10 16:40 178次阅读

    74HC283 4位二进制全加器:设计利器深度解析

    74HC283 4位二进制全加器:设计利器深度解析 作为电子工程师,在数字电路设计中,加法器是我们经常会用到的基础元件。今天就来深入探讨一下74HC283 4位二进制全加器,它在诸多数字电路设计场景
    的头像 发表于 04-08 16:15 148次阅读

    二进制 GPU 驱动程序需要什么才能启动?

    二进制 GPU 驱动程序需要什么才能启动? 我想的是 USB、SD 卡、HDMI 和 ETH。 我猜音频没有 DAC,所以我们需要使用 USB 耳机加密狗?
    发表于 03-13 06:00

    CDx4HC283与CDx4HCT283:4位二进制全加器的技术解析与应用指南

    CDx4HC283与CDx4HCT283:4位二进制全加器的技术解析与应用指南 在数字电路设计领域,加法器是实现数值运算的基础元件之一。今天我们要深入探讨的CDx4HC283和CDx4HCT283
    的头像 发表于 01-30 17:20 805次阅读

    德州仪器4位二进制全加器:SN54/74系列的技术剖析

    德州仪器4位二进制全加器:SN54/74系列的技术剖析 在数字电路设计中,加法器是实现算术运算的基础组件。德州仪器的SN54283、SN54LS283、SN54S283、SN74283
    的头像 发表于 01-28 17:05 722次阅读

    探索CD54/74AC283与CD54/74ACT283:高效4位二进制加法器的奥秘

    探索CD54/74AC283与CD54/74ACT283:高效4位二进制加法器的奥秘 在电子设计领域,加法器是实现数字运算的基础元件之一。今天,我们将深入研究德州仪器(Texas
    的头像 发表于 01-28 16:50 575次阅读

    CDx4HC283和CDx4HCT283:高速CMOS逻辑4位二进制全加器的详细解析

    CDx4HC283和CDx4HCT283:高速CMOS逻辑4位二进制全加器的详细解析 在电子设计领域,加法器是数字电路中最基本的运算单元之一,用于实现二进制数的加法运算。今天要给大家介绍
    的头像 发表于 01-19 14:50 471次阅读

    解析CD54/74AC283与CD54/74ACT283:4位二进制加法器的卓越之选

    解析CD54/74AC283与CD54/74ACT283:4位二进制加法器的卓越之选 在电子设计领域,加法器是实现数字运算的基础组件。今天我们要深入探讨的是德州仪器(Texas
    的头像 发表于 01-08 16:55 715次阅读

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

    CD54/74AC283与CD54/74ACT283:高性能4位二进制加法器的全面解析 在电子设计领域,加法器是一种基础且关键的数字电路,广泛应用于各种计算和数据处理系统中。今天,我们要深入探讨
    的头像 发表于 12-31 17:10 1505次阅读

    SN54F283与SN74F283:4位二进制全加器的技术剖析

    SN54F283与SN74F283:4位二进制全加器的技术剖析 在数字电路设计中,加法器是最基础且关键的组件之一。今天我们要深入探讨的是德州仪器(TI)的SN54F283和SN74F283这两款4位
    的头像 发表于 12-29 16:20 992次阅读

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

    德州仪器4位二进制全加器:SN54/74283系列深度解析 在数字电路设计领域,加法器是构建复杂算术逻辑单元的基础组件。德州仪器(TI)的SN54/74283系列4位二进制全加器凭借其快速进位
    的头像 发表于 12-23 15:45 987次阅读

    二进制查找(Binary Search)介绍

    二进制查找(Binary Search)用于在已排序的数组中执行二进制查找的函数。 int binary_search(int arr[], int size, int target
    发表于 12-12 06:54

    如何将图像文件转换为二进制文件?

    如何将图像文件转换为二进制文件
    发表于 09-05 08:28

    二进制数据处理方法分享

    时,我们如何去解析数据并且应用它们。本次的技术分享文章,我们就从如何传输数据和解析二进制数据来一步一步剥丝抽茧,搞清楚他的运作原理和二进制数据的数据结构。
    的头像 发表于 07-30 15:41 2569次阅读
    <b class='flag-5'>二进制</b>数据处理方法分享