返回信息流比如说,把编译好的程序a(二进制格式),读到一个指定的数组b中,然后按顺序在b数组中执行a的各条指令?
这是一条镜像帖。来源:北邮人论坛 / cpp / #29047同步于 2009/9/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[请教]Unix系统中,有什么函数是装载内存中一段指令,然后执行
grepf
2009/9/24镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
goto
【 在 grepf (hust_) 的大作中提到: 】
: 比如说,把编译好的程序a(二进制格式),读到一个指定的数组b中,然后按顺序在b数组中执行a的各条指令?
如果你这个二进制文件仅仅只是指令的话,那就很好写了,用goto或者汇编的jmp都可以实现。
如果你这个二进制文件包括文件头等控制信息,那就要先解析文件头,然后进行转载。
其实这跟Unix的Loader道理是一样的。Unix的ELF可执行文件就包括控制信息。所以再装载之前要解析出各个段,然后把数据map到内存去。
测试代码:
static char code[] = { (char)0xC3 }; //0xC3为retn的机器指令
int main()
{
__asm lea eax, code
__asm call eax
return 0;
}
在vc上编译通过
用gcc生成的二进制文件。谢谢!
请问这个Loader是一个机制还是一个函数?还有,这里的map是指mmap么?问这个是因为一些平台非x86,比如说arm。
【 在 jmpesp 的大作中提到: 】
: 如果你这个二进制文件仅仅只是指令的话,那就很好写了,用goto或者汇编的jmp都可以实现。
: 如果你这个二进制文件包括文件头等控制信息,那就要先解析文件头,然后进行转载。
: 其实这跟Unix的Loader道理是一样的。Unix的ELF可执行文件就包括控制信息。所以再装载之前要解析出各个段,然后把数据map到内存去。
【 在 grepf 的大作中提到: 】
: 用gcc生成的二进制文件。谢谢!
: 请问这个Loader是一个机制还是一个函数?还有,这里的map是指mmap么?问这个是因为一些平台非x86,比如说arm。
GCC一般生成的ELF格式的,所以你要先看ELF文件格式信息,然后把各个段给映射到内存去。这个跟加载器Loader是一样的。你可以去看下linux的加载器这部分代码。
谢谢!
【 在 jmpesp 的大作中提到: 】
: GCC一般生成的ELF格式的,所以你要先看ELF文件格式信息,然后把各个段给映射到内存去。这个跟加载器Loader是一样的。你可以去看下linux的加载器这部分代码。