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

时间:2016-05-03 01:59:10

标签: assembly compilation compiler-construction linker x86

我正在编写一个非常小的x86汇编程序,它当前输出十六进制(或二进制,它是微不足道的更改)机器代码。如何将这个十六进制/二进制文件写入一个我可以实际执行的文件中?

对于简单的输入,例如:

mov ax, #1
ret

汇编程序将输出:

66b80100
c3

2 个答案:

答案 0 :(得分:0)

要在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));
    }
}

答案 1 :(得分:0)

你可以使用比C ++更容易的python,在这种情况下你不需要任何其他强大的低级别。

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

将它放入.py文件并使用python file.py [带有hex的文件]

运行它

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

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

或者python