【问题标题】:Are there applications to program in binary? [closed]有应用程序以二进制编程吗? [关闭]
【发布时间】:2013-05-13 08:36:20
【问题描述】:

有些人声称他们可以用二进制编程。是否可以在当今世界的现代系统上进行二进制编程?显然,用二进制编程没有太多好处。我要问的问题是它是否真的可能。

早在计算的早期,就有用于这类事情的打孔卡。冲孔转化为电信号。打孔卡是一种将命令(可以说是一种数据)存储到介质上的方式。今天,我们拥有可以存储数据的介质,例如磁带、软盘、CD、DVD、硬盘驱动器等。唯一的问题:这些东西没有“洞”,我们可以用它来表示二进制的“0”或“1”。他们还有其他存储数据的方法,这些方法不容易被人类访问。我们不能简单地用今天的媒体“删减”命令。

综上所述,是否有应用程序可以让人们输入 ASCII 字符“1”或“0”并将其实际转换为电信号 1 或 0(分别)?在这个时代用二进制编程是可能的吗?

【问题讨论】:

  • 即使现在有人用“二进制”编程,它也会使用十六进制,而不是 0 和 1。
  • 你为什么要这样做?组装水平就够了..
  • 真正的程序员使用copy con > t.exe :)

标签: assembly binary


【解决方案1】:

用二进制编程会很愚蠢,因为它会非常慢

您需要在书中使用查找表来记住您的所有命令,这些命令将由 pooter 存储为十六进制字节

Assembly 自动为您完成所有这些工作,极大地简化了流程

你写:cmp ecx,edx

十六进制为 3B CA

二进制是?

那么您必须“读取”二进制列才能进行任何调试...

00001000001110001000111100000101

00000111000100011110000010100110

祝所有走这条路的人好运,哈哈

【讨论】:

    【解决方案2】:

    您可以仅使用十六进制编辑器编写 EXE 文件。那将是二进制编程——你甚至不会使用汇编。

    您甚至可以通过稍微“作弊”来跳过复杂的 EXE 文件结构,然后编写一个包含您的“二进制编程”工作的字节数组的 C 程序,然后执行该指针。

    const unsigned char *binary_program = {
        // Your binary programming goes here.
        0xaa, 0xbb, 0xff,
    };
    
    typedef void (*func_type)(); 
    
    
    int main() {
        func_type func = (func_type) binary_program;
        func();
        return 0; 
    }
    

    【讨论】:

    • COM 文件会更传统。
    • COM 文件是现代 32 位或 64 位 Windows 中的一等公民吗?无论如何,我只是举个例子。你可以说为 Linux 编写一个 ELF 文件或为 ARM 编写其他文件。
    • 不,它不是一等公民,你确实可以用十六进制编辑器编写任何一个。我想我只是说如果要开始尝试仅使用十六进制编辑器编写应用程序,那么编写 COM 文件会容易得多,因为它基本上都是没有标题或强加结构的代码。
    • 一种方法是稍微作弊,并创建一个 C 程序,其中有一个指向包含“二进制编程”工作的字符数组的指针,然后执行该指针。然后 C 编译器会处理所有的 EXE 文件结构。
    • 另一种作弊的方法是在一个部分中使用带有incbin 或类似指令的汇编程序。它会将文件的原始内容包含到 EXE 中,但会为您完成所有标题等。
    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多