使我的程序执行数据的最佳方法是什么。比如说,我为x86_64机器编写了(所谓的)编译器:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <cstdint>
struct compiler
{
void op() const { return; }
template< typename ...ARGS >
void op(std::uint8_t const _opcode, ARGS && ..._tail)
{
code_.push_back(_opcode);
return op(std::forward< ARGS >(_tail)...);
}
void clear() { code_.clear(); }
long double operator () () const
{
// ?
}
private :
std::vector< std::uint8_t > code_;
};
int main()
{
compiler compiler_; // long double (*)();
compiler_.op(0xD9, 0xEE); // FLDZ
compiler_.op(0xC3); // ret
std::cout << compiler_() << std::endl;
return EXIT_SUCCESS;
}
但我不知道如何operator ()
正确实施。我怀疑,我必须将所有内容code_
放入连续的内存块中,然后转换为long double (*)();
并调用它。但是有一些困难:
- 我应该在 Windows 上使用
VirtualProtect(Ex)
(+ ) 吗?FlushInstructionCache
在 Linux 上也有类似的东西? - 什么是容器,它以正确的方式(即一个一个)可靠地将字节放入内存中?并且还允许获取指向内存块的指针。