C:将预编译的代码块存储为char [],然后执行它

时间:2015-10-10 19:11:18

标签: c binary-data

我想知道是否可以将一大堆已编译的代码存储为javax.persistence.PersistenceException: No Persistence provider for EntityManager named CookbookPU ,然后以某种方式执行它。

e.g。

persistence.xml
  • 可能吗?
  • 这个奇怪的东西有没有名字,是否有一些文章解释它?

由于

2 个答案:

答案 0 :(得分:0)

在标准C中,答案是否,代码不是数据

也就是说,如果char数组包含完整的可执行文件,您可以将其写入文件然后执行该文件(例如使用system())。如果它不是一个完整的可执行文件(只有几条指令),你会以某种方式将它变成一个完整的可执行文件。

在好的旧时代,当编译器接受

时,这会更容易
char main[] = { 42, 68, 0xcb, 0xdd, 0, 4, 74, 59 }; /* not a real program */

并创建了一个可执行程序: - )

答案 1 :(得分:0)

是的,有可能。例如,许多框架使用这种技术来实现thunk。诀窍是确保分配的内存块被标记为可执行。在Windows上,这意味着使用name分配内存,然后使用VirtualAlloc()授予PAGE_EXECUTE权限。您可以将CPU操作码存储在内存中,声明指向内存的函数指针,然后像任何其他函数一样调用它。