如何将机器代码转换为二进制可执行文件?
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
我正在编写一个非常小的 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