我想要一个简单的C方法能够在Linux 64位机器上运行十六进制字节码。下面是我的C程序:如何让c代码执行十六进制字节码?
char code[] = "\x48\x31\xc0";
#include <stdio.h>
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
printf("%s\n","DONE");
}
,我试图运行("\x48\x31\xc0"
)我通过书面方式这个简单的汇编程序(它不应该做任何事情)
获得的代码然后编译并objdump-它获得字节码。
但是,当我运行我的C程序时,出现了分段错误。有任何想法吗?
即使你的数据段是可执行的,或者你没有启用NX,你能指望这样做?它执行一条指令,然后执行后面的指令(你不控制),然后执行指令,直到它到达的内存不代表触发段错误的合法代码或代码。 – 2012-03-31 23:55:16
您需要为'ret'添加字节码,因为您做的间接函数调用应该是一个'call',它将返回地址压入堆栈。至少,这是我受过最好教育的猜测,我从未见过这样的事情。 – Chris 2012-03-31 23:56:56
我希望这样做什么都不做,但我希望它能够在不崩溃的情况下运行。 – Nosrettap 2012-03-31 23:58:52