如何将机器代码转换为二进制可执行文件?

How to turn machine code into binary executable?

我正在编写一个非常小的 x86 汇编器,它当前输出十六进制(或二进制,更改起来很简单)机器代码。我怎样才能将这个 hex/binary 写入我可以实际执行的文件中?

对于像这样的简单输入:

mov ax, #1
ret

汇编器会输出:

66b80100
c3

要将十六进制值附加到 C++ 中的二进制文件,您必须将其表示为原始 int 值并将其写入文件。

因此:

void writeHexStringToFile(string hex, ofstream& file) {
    vector<string> hexBytes = hexBytesFromString(hex);
    for (unsigned i = 0; i < hexBytes.size(); i++) {
        istringstream buff(hexBytes.at(i));
        int hexVal;
        buff >> hex >> hexVal;
        file.write(reinterpret_cast<char*>(&hexVal), sizeof(int));
    }
}

您可以使用 python,在这种情况下,它比 C++ 更简单,您不需要任何其他强大的低级功能。

import sys
string = open(sys.argv[1],'r').read()
sys.stdout.write(string.decode("hex"))

将其放入 .py 文件中,然后 运行 使用 python file.py [十六进制文件]

但首先要替换换行符。您可以使用

cat file.hex | tr -d '\n' > file2.hex

或python